gl.h только для OpenGL 1.1 (а в некоторых случаях до 1.3 в зависимости от того, какую версию файла вы используете и какую операционную систему). Для всего остального вам дополнительно потребуется glext.h и, вероятно, glxext.h (Linux / Unix) или wglext.h (Windows).
Все функции из более новых версий OpenGL должны быть связаны во время выполнения. Поэтому, чтобы использовать их, вы должны получить правильный адрес функции и назначить его указателю на функцию. Самый простой способ сделать это, используя что-то вроде GLEW .
Ручной способ будет выглядеть примерно так:
PFNGLCREATESHADERPROC glCreateShader = NULL;
glCreateShader = (PFNGLCREATESHADERPROC) wglGetProcAddress("glCreateShader");
или для Linux:
PFNGLCREATESHADERPROC glCreateShader = NULL;
glCreateShader = (PFNGLCREATESHADERPROC) glXGetProcAddress((GLubyte*) "glCreateShader");
Если вы определили GL_GLEXT_PROTOTYPES до включения glext.h, вы можете пропустить первую строку.
РЕДАКТИРОВАТЬ: SDL_opengl.h выглядит так, как будто он содержит копию glext.h (хотя и не в курсе). Так что, если вы используете это, все равно должно быть в силе Если вы хотите использовать отдельный glext.h, вы должны определить NO_SDL_GLEXT, прежде чем включать SDL_opengl.h. Кроме того, прототипы функций недоступны, пока GL_GLEXT_PROTOTYPES не определен или вы пишете их сами.
EDIT2: Очевидно, SDL имеет свою собственную функцию GetProcAddress, которая называется SDL_GL_GetProcAddress .