opengl, как лучше всего обновить заголовки с Visual Studio? - PullRequest
5 голосов
/ 19 декабря 2011

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

Ответы [ 4 ]

5 голосов
/ 19 декабря 2011

У меня возникла небольшая проблема с обновлением моих заголовков GL.

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

3 голосов
/ 19 декабря 2011

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

Пример с GLEE:

#include <gl/GLee.h>          

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

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

1 голос
/ 19 декабря 2011

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

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

if (strstr(string, "GL_ARB_texture_compression") != NULL)
   p = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)wglGetProcAddress("glCompressedTexImage2D");
0 голосов
/ 20 декабря 2011

Перейти к: http://www.opengl.org/registry/ и загрузите новейшую версию glext.h и wglext.h

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

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

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