Opengl 2.1 + glsl 1.2
Mam taki bład i nie wiem o co chodzi...
Nie mogę załadować shaderów, bo dostaje informacje: layout -syntax- parse errror
#include "libs.h"
static void glfwError(int id, const char* description)
{
std::cout << description << std::endl;
}
void frameBufferResizeCb(GLFWwindow* window, int fbW, int fbH)
{
glViewport(0, 0, fbW, fbH);
}
bool loadShaders(GLuint &program)
{
bool loadSucess = true;
char infoLog[512];
GLint success;
std::string temp = "";
std::string src = "";
//vectors
std::ifstream in_file;
in_file.open("vertex_core.glsl");
if (in_file.is_open())
{
while (std::getline(in_file, temp)) {
src += temp + "\n";
}
}
else {
std::cout << "ERROR: COULDN'T OPEN VERTEX FILE\n";
loadSucess = false;
}
in_file.close();
GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
const GLchar* vertSrc = src.c_str();
glShaderSource(vertexShader, 1, &vertSrc, NULL);
glCompileShader(vertexShader);
glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success);
if (!success)
{
glGetShaderInfoLog(vertexShader, 512, NULL, infoLog);
std::cout << "ERROR: COULDN'T COMPILE VERTEX SHADER\n" << infoLog << "\n";
loadSucess = false;
}
//fragment glsl
in_file.open("fragment_core.glsl");
if (in_file.is_open())
{
while (std::getline(in_file, temp)) {
src += temp + "\n";
}
}
else {
std::cout << "ERROR: COULDN'T OPEN FRAGMENT FILE\n";
loadSucess = false;
}
in_file.close();
GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
const GLchar* fragSrc = src.c_str();
glShaderSource(fragmentShader, 1, &fragSrc, NULL);
glCompileShader(fragmentShader);
glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success);
if (!success)
{
glGetShaderInfoLog(fragmentShader, 512, NULL, infoLog);
std::cout << "ERROR: COULDN'T COMPILE FRAGMENT SHADER\n" << infoLog << "\n";
loadSucess = false;
}
temp = "";
src = "";
//program start
program = glCreateProgram();
glAttachShader(program, vertexShader);
glAttachShader(program, fragmentShader);
glLinkProgram(program);
glGetProgramiv(program, GL_LINK_STATUS, &success);
if (!success)
{
loadSucess = false;
glGetProgramInfoLog(program, 512, NULL, infoLog);
std::cout << "ERROR: COULDN'T LINK PROGRAM\n" << infoLog << "\n";
}
//end program
glUseProgram(0);
glDeleteShader(vertexShader);
glDeleteShader(fragmentShader);
return loadSucess;
}
int main()
{
//glfwSetErrorCallback(&glfwError);
glfwInit(); //inicjalizacja biblioteki glfw
const int windowWidth = 640, windowHeight = 480;
int frameBufferWidth = 0, frameBufferHeight = 0;
//glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
//glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
//glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
glfwWindowHint(GLFW_RESIZABLE, GL_TRUE);
GLFWwindow* window = glfwCreateWindow(windowWidth, windowHeight, "VECTORS VISUALIZATION", NULL, NULL);
//static viewport and buffer for static window
//glfwGetFramebufferSize(window, &frameBufferWidth, &frameBufferHeight);
//glViewport(0, 0, frameBufferWidth, frameBufferHeight);
glfwSetFramebufferSizeCallback(window, frameBufferResizeCb);
glfwMakeContextCurrent(window); //important
/*init GLEW*/
glewExperimental = GL_TRUE;
if (glewInit() != GLEW_OK)
{
std::cout << "ERROR- GLEW INIT FAILED";
glfwTerminate();
}
//shader init
GLuint core_program;
if (!loadShaders(core_program))
{
glfwTerminate();
}
/*Main Loop*/
while (!glfwWindowShouldClose(window))
{
//update loop
glfwPollEvents();
//clear
glClearColor(0.f, 1.f, 0.f, 1.f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
//draw
//end drawing
glfwSwapBuffers(window);
glFlush();
}
glfwDestroyWindow(window);
glfwTerminate();
glDeleteProgram(core_program);
return 0;
}
VERTEX-SHADER:
#version 120
layout(location = 0) in vec3 vertex_position;
layout(location = 1) in vec3 vertex_color;
layout(location = 2) in vec2 vertex_textcoord;
varying vec3 vs_position;
varying vec3 vs_color;
varying vec2 vs_textcoord;
void main()
{
vs_position = vertex_position;
vs_color = vertex_color;
vs_textcoord = vec2(vertex_textcoord.x, vertex_textcoord.y * -1.f);
gl_Position = vec4(vertex_position, 1.f);
}
FRAGMETN-SHADER
#version 120
varying vec3 vs_position;
varying vec3 vs_color;
varying vec2 vs_texcoord;
in vec4 fs_color;
void main()
{
fs_color = vec4(vs_color, 1.f);
}