Принудительное использование только профиля ядра OpenGL - PullRequest
17 голосов
/ 14 января 2011

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

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

РЕДАКТИРОВАТЬ 2: Я бы предпочел получить ошибку во время компиляции, но ошибка времени выполнения также будет в порядке.

Ответы [ 4 ]

9 голосов
/ 15 января 2011

Вы можете скомпилировать свой код, используя gl3.h вместо gl.h.

http://www.opengl.org/registry/api/gl3.h

8 голосов
/ 14 января 2011

Попробуйте wglCreateContextAttribsARB () с WGL_CONTEXT_CORE_PROFILE_BIT_ARB.

или glXCreateContextAttribsARB с GLX_CONTEXT_CORE_PROFILE_BIT_ARB.

Вы можете найти этопример полезен в качестве испытательного стенда.

4 голосов
/ 18 января 2011

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

Обратите внимание: если вы запрашиваете контекст GL версии до 3.0 на современном оборудовании / драйверах, вы, скорее всего, получите новейший контекст в режиме совместимости. Проверьте, что ваш графический процессор возвращает с glGetString(GL_VERSION), чтобы убедиться.

Если вы используете другой API для создания контекста OpenGL, обратитесь к его справочному руководству за аналогичными функциями.


КСТАТИ: Я считаю, что невозможно получить ошибку во время компиляции - ваш компилятор не может знать, какой контекст OpenGL вы получите после вашего запроса (если есть). Правильный способ убедиться, что вы не используете устаревшую функциональность, - это тестирование на glGetError().

Кроме того, я рекомендую использовать оболочку расширения gl3w, если вы компилируете для Windows.

0 голосов
/ 13 мая 2013

Я нашел другой способ сделать это с помощью неофициального комплекта разработки программного обеспечения OpenGL:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...