//GLFW if(glfwInit() == GL_FALSE) { cerr << "GLFW Init Error!"; cin.ignore( numeric_limits<streamsize>::max(), '\n' ); return 1; } //GLFW Hints glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); glfwWindowHint(GLFW_DEPTH_BITS,32); //GLFW window GLFWwindow* w = glfwCreateWindow(SCREEN_W, SCREEN_H, "Test 01", NULL, NULL); glfwMakeContextCurrent(w); //GLEW glewExperimental = GL_TRUE; GLenum err = glewInit(); if(err != GLEW_OK) { cerr << "GLEW Init Error: " << glewGetErrorString(err); cin.ignore( numeric_limits<streamsize>::max(), '\n' ); return 1; }

//Cube cuteCube = new cube(0,0,0,2); cuteCube->createCubeVertices(); //Indices Buffer glGenBuffers(1, ebo); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo[0]); glBufferData(GL_ELEMENT_ARRAY_BUFFER, cuteCube->getVertexIndicesSize(), cuteCube->getVertexIndices(), GL_STATIC_DRAW); //Vertex Arrays glGenVertexArrays(1, vao); glBindVertexArray(vao[0]); //VBO Buffer glGenBuffers(1, vbo); glBindBuffer(GL_ARRAY_BUFFER, vbo[0]); glBufferData(GL_ARRAY_BUFFER, cuteCube->getVertexPositionsSize() + cuteCube->getVertexColorsSize(), NULL, GL_STATIC_DRAW); glBufferSubData(GL_ARRAY_BUFFER, 0, cuteCube->getVertexPositionsSize(), cuteCube->getVertexPositions()); glBufferSubData(GL_ARRAY_BUFFER, cuteCube->getVertexPositionsSize(), cuteCube->getVertexColorsSize(), cuteCube->getVertexColors()); shader_position = glGetAttribLocation(shader_program, "inPosition"); shader_color = glGetAttribLocation(shader_program, "inColor"); glVertexAttribPointer(shader_position, 4, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)0); glVertexAttribPointer(shader_color, 4, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)cuteCube->getVertexPositionsSize()); glEnableVertexAttribArray(shader_position); glEnableVertexAttribArray(shader_color); glClearColor(1.0, 1.0, 1.0, 1.0); //MVP stuff shader_mvp = glGetUniformLocation(shader_program, "MVP"); glm::mat4 Projection = glm::perspective(45.0f, (float)SCREEN_W / (float)SCREEN_H, 0.1f, 100.0f); glm::mat4 View = glm::lookAt(glm::vec3(4,3,-3), glm::vec3(0,0,0), glm::vec3(0,1,0)); glm::mat4 Model = glm::mat4(1.0f); glm::mat4 MVP = Projection * View * Model;

while (!glfwWindowShouldClose(w)) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //This line "enables" the bug glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS); glUseProgram(shader_program); //setup uniform MVP glUniformMatrix4fv(shader_mvp, 1, GL_FALSE, &MVP[0][0]); glBindVertexArray(vao[0]); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo[0]); glPolygonMode(GL_FRONT_AND_BACK, rendermode[render]); glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_SHORT, NULL); glfwSwapBuffers(w); glfwPollEvents(); //Update rotation Model = glm::rotate(Model,1.0f,glm::vec3(0,1,0)); MVP = Projection * View * Model; }

#version 430 core in vec4 inPosition; in vec4 inColor; out vec4 passColor; uniform mat4 MVP; void main() { passColor = inColor; gl_Position = MVP * inPosition; }

#version 430 core in vec4 passColor; out vec4 outColor; void main() { outColor = vec4(passColor[0], passColor[1], passColor[2], passColor[3]); }