Подтвердить что ты не робот

Принудительный профиль OpenGL Core

Есть ли флаг компилятора или другой способ заставить только профиль ядра OpenGL? Я хочу получить сообщение об ошибке, когда я использую устаревшие функции, такие как glRotatef и т.д.

EDIT1: Я использую Linux, однако, мне также интересно узнать, как это сделать в Windows

EDIT2: я бы предпочел получить сообщение об ошибке во время компиляции, но ошибка времени выполнения тоже будет нормально.

4b9b3361

Ответ 3

Зависит от того, что создает контекст 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.

Ответ 4

Я нашел другой способ сделать это, используя 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