: It was the first version to fully enforce a Core Profile , which removes "Fixed Function" legacy code (like glBegin and glEnd ) in favor of programmable shaders.
out vec4 FragColor;
A hidden, yet critical, feature of OpenGL 3.3 was the deprecation of the and the Display List mechanisms. While these were easy to use, they forced the driver to guess the programmer's intent, leading to redundant validation and memory copies.
// Clean up glDeleteVertexArrays(1, &vao); glDeleteBuffers(1, &vbo); glDeleteProgram(program); glDeleteShader(fragmentShader); glDeleteShader(vertexShader);