2015-12-25 3 views
2

Я запрашиваю указатели на функции вручную и задаюсь вопросом, не нацелен ли я на OpenGL 2.0 как минимальное требование, когда следует использовать расширение-вариант функций?C++ - таргетинг на OpenGL 2.0

Позвольте мне спросить вас на примере. Вот gl.spec файл: https://www.opengl.org/registry/oldspecs//gl.spec

Я полагаю, что < = 2,0 функция также доступна при ориентации 2.0, так что давайте посмотрим раздел «OpenGL 1.2 команды». Существует функция TexImage3D, которая доступна, когда поддерживается EXT_texture3D.

Другим примером может служить раздел («Команда OpenGL 2.0») Функция DrawBuffers. Доступно ли это только в случае реализации ARB_draw_buffers?

Расширения должны использоваться при таргетинге < = 2.0, не так ли? Если драйвер реализует OpenGL 2.0, мне вообще нужно использовать расширения?

+1

Файлы * .spec были заменены форматом XML. Больше не используйте их. –

+0

Спасибо за информацию, я просто пропустил первые строки файла, где вы можете найти предупреждение. В любом случае, вот соответствующий XML-файл: https://cvs.khronos.org/svn/repos/ogl/trunk/doc/registry/public/api/gl.xml – csisy

ответ

4

Если вы ориентируетесь на определенную версию OpenGL, то вы должны never использовать эквивалент расширения.

Например:

Существует функция называется TexImage3D, которая доступна, когда EXT_texture3D поддерживается.

Нет, это не так. glTexImage3D доступен в OpenGL 1.2. glTexImage3DEXT предоставляется EXT_texture_3d. Они не являются одной и той же функцией, и нет никакой гарантии, что вызов glTexImage3DEXT будет в точности эквивалентным вызову glTexImage3D.

Если драйвер реализует OpenGL 2.0, мне нужно использовать расширения вообще?

Если вы не хотите использовать расширение для функциональности, не предоставляемой OpenGL 2.0.

+0

Спасибо! Прямо сейчас я получаю перечисленные функции (в Windows) с wglGetProcAddress и группу из 3,0 основных функций, предоставляемых расширением ARB_framebuffer_object. Спасибо за разъяснения! – csisy

+0

Еще одно: поэтому функции, перечисленные <= 2.0 (а не расширения ARB), будут работать на большинстве графических процессоров? OGL 2.0 уже устарел, и если карта не может обрабатывать команды 2.0, она не сможет отобразить игру в любом случае. Это верно? – csisy