glGenerateMipmap - идентификатор не найден? - PullRequest
1 голос
/ 02 марта 2011

Я пытаюсь реализовать glGenerateMipmap, чтобы я мог перекрашивать каждый уровень куба, который я рендерил, за исключением того, что программа не компилируется, выдавая ошибку

'error C3861:' glGenerateMipmap ': идентификатор не найден '

Я включил' #include ', и внутри заголовка определение, кажется, существует (хотя внутри оператора IF? см. ниже ), поэтому мне было интересно, есть либыл способ как-то переопределить / найти его так, чтобы программа скомпилировалась или запустилась, и если нет, то был ли другой способ автоматически генерировать mipmaps?

#ifdef GL_GLEXT_PROTOTYPES
...
...
GLAPI void APIENTRY glGenerateMipmap (GLenum);
...
#endif /* GL_GLEXT_PROTOTYPES */

Большое спасибо, Крис

Ответы [ 2 ]

5 голосов
/ 02 марта 2011

Это неправильный способ доступа к расширениям OpenGL. Правильный способ немного сложен, так как вы не должны переопределять символы, которые могут быть импортированы из библиотек. В Windows нет большой проблемы, поскольку экспортируются только символы OpenGL-1.1. Но практически во всех других ОС есть дополнительные символы, экспортируемые библиотекой OpenGL.

Я настоятельно советую использовать библиотеку загрузчика расширений, поскольку простая загрузка расширений утомительна. Так что просто получите GLEW от http://glew.sourceforge.net и покончите с этим. Или используйте некоторую платформу OpenGL, которая также обеспечивает управление расширениями, например GLFW.

Просто посмотрите, как правильно загрузить расширения OpenGL, чтобы понять, почему:

typedef GLAPI void APIENTRY (*__MYGLEXTFP_GLGENERATEMIPMAPS)(GLenum);
__MYGLEXTFP_GLGENERATEMIPMAP __myglextGenerateMipmaps;
#define glGenerateMipmaps __myglextGenerateMipmaps;

и позже при инициализации расширения:

#ifdef WIN32
#define __MYGLEXT_GetProcAddress wglGetProcAddress
#endif
#ifdef GLX
#define __MYGLEXT_GetProcAddress glXGetProcAddress
#endif

__myglGenerateMipmap = 
    (__MYGLEXTFP_GLGENERATEMIPMAPS) __MYGLEXT_GetProcAddress("glGenerateMipmaps");

Выглядит довольно грязно, вы согласны? Однако это единственный чистый способ сделать это. Он становится еще более сложным, если в Windows используется несколько контекстов OpenGL, так как указатели функций функций расширения Windows OpenGL могут отличаться в зависимости от контекста.

4 голосов
/ 02 марта 2011

glGenerateMipmaps является расширением. Попробуйте использовать glew для загрузки.

...