Ответ 1
Вы можете скомпилировать свой код, используя gl3.h
вместо gl.h
.
Есть ли флаг компилятора или другой способ заставить только профиль ядра OpenGL? Я хочу получить сообщение об ошибке, когда я использую устаревшие функции, такие как glRotatef и т.д.
EDIT1: Я использую Linux, однако, мне также интересно узнать, как это сделать в Windows
EDIT2: я бы предпочел получить сообщение об ошибке во время компиляции, но ошибка времени выполнения тоже будет нормально.
Вы можете скомпилировать свой код, используя gl3.h
вместо gl.h
.
Попробуйте wglCreateContextAttribsARB() с WGL_CONTEXT_CORE_PROFILE_BIT_ARB
.
Или glXCreateContextAttribsARB с GLX_CONTEXT_CORE_PROFILE_BIT_ARB
.
Вы можете найти этот пример полезным в качестве тестового стенда.
Зависит от того, что создает контекст OpenGL.
Если вы используете GLFW (который я искренне рекомендую для автономных оконных приложений OGL), вы можете сделать это до создания окна:
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR,3);
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR,1);
glfwOpenWindowHint(GLFW_OPENGL_PROFILE,GLFW_OPENGL_CORE_PROFILE);
// the last line shouldn't be necessary
// as you request a specific GL context version -
// - at least my ATI will then default to core profile
Обратите внимание, что если вы запрашиваете контекст pre-3.0 GL на современных аппаратных средствах/драйверах, вы, скорее всего, получите более новый контекст в режиме совместимости. Проверьте, что ваш графический процессор возвращается с glGetString(GL_VERSION)
, чтобы убедиться.
Если вы используете другой API для создания контекста OpenGL, проверьте его справочное руководство для аналогичных функций.
BTW:
Я считаю, что невозможно получить ошибку во время компиляции - ваш компилятор не может знать, какой контекст OpenGL вы получите после вашего запроса (если есть). Правильный способ убедиться, что вы не используете функциональность вне версии, тестирует glGetError()
.
Кроме того, я рекомендую использовать оболочку расширения gl3w
, если вы компилируете для Windows.
Я нашел другой способ сделать это, используя Unofficial OpenGL Software Development Kit:
http://glsdk.sourceforge.net/docs/html/index.html
Используя компонент "GL Load", можно загрузить основной профиль OpenGL и удалить списки совместимости и функции для версий OpenGL 3.1 или выше. Краткое описание можно найти здесь:
https://www.opengl.org/wiki/OpenGL_Loading_Library#Unofficial_OpenGL_SDK