2011-12-19 1 views
5

У меня возникла проблема с обновлением заголовков GL. В основном я хочу получить доступ к функции glCompressedTexImage2D, но мои заголовки gl действительно старые, и я не считаю, что функция существует в этих заголовках. Поэтому я попытался обновить файл gl.h, но я получаю множество ошибок. Я пробовал обновлять программное обеспечение для графических карт, среди прочего. Может ли кто-нибудь помочь?opengl, как лучше всего обновлять заголовки с визуальной студией?

ответ

3

Видимо, Windows застряла на старой версии OpenGL (1.2?). Попробуйте использовать GLEW или Glee для загрузки необходимого расширения (GL_ARB_TEXTURE_COMPRESSION в случае glCompressedTexImage2D). Эти библиотеки загружают доступные расширения и позволяют вам проверять свой код, если загружается конкретное расширение или нет.

Пример с ликованием:

#include <gl/GLee.h>   

if (GLEE_ARB_TEXTURE_COMPRESSION) 
{ 
    glCompressedTexImage2D(...); 
} 
else 
{ 
    // the extension is not available, use a different method 
} 

Обратите внимание, что GLEE не требует, чтобы вы явно инициализировать его (в отличие от GLEW). Я настоятельно рекомендую этот метод для ручной загрузки указателя функции. Не потому, что это мой ответ :), а потому, что это также позаботится о том, будет ли аппаратное обеспечение и его драйвер поддерживать расширение (которое может быть очень грязным), и оно не зависит от платформы.

+0

Обратите внимание, что GLEE является несуществующей и больше не обновляется. Он остановился на GL 3.3; с тех пор было выпущено 6 версий OpenGL. Поэтому, насколько бы вам ни нравился этот стиль, вы не должны его использовать. Существует несколько альтернатив для загрузки функций OpenGL (http://www.opengl.org/wiki/OpenGL_Loading_Library). –

+0

Спасибо за хед-ап. –

1

Вы должны выяснить, если текущее устройство поддерживает эту функцию, а затем получить адрес функции, прежде чем вы можете назвать это:

PFNGLCOMPRESSEDTEXIMAGE2DPROC p = NULL; 
const char* string = glGetString(GL_EXTENSIONS); 

if (strstr(string, "GL_ARB_texture_compression") != NULL) 
    p = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)wglGetProcAddress("glCompressedTexImage2D"); 
5

Я имею то вроде обновления вопроса мои заголовки GL.

Это потому, что вы не должны это делать. В Windows все, что находится за OpenGL-1.1, собирается через механизм расширения. Самый простой способ получить доступ к этому - через GLEW. Установите это и используйте GL/glew.h вместо обычного GL/gl.h. Затем после создания контекста OpenGL первое, что нужно назвать, - glewInit().

0

Перейти к: http://www.opengl.org/registry/ и скачать последнюю версию glext.h и wglext.h

Теперь вы сможете вручную получить указатель на функцию, функции, которые вы хотите. Под Windows есть только OpenGL 1.1.

Для новичка я предлагаю использовать GLEW (GLEE также большой, но не был обновлен в течение довольно долгого времени ...)

Смежные вопросы