glGenerateMipmap-标识符未找到?

Chr*_*son 1 c++ opengl textures mipmaps opengl-3

我正在尝试实现glGenerateMipmap,所以我可以继续重新着色我渲染的多维数据集的每个级别,除了程序不会编译给出错误

'错误C3861:'glGenerateMipmap':找不到标识符'

我已经包含'#include'并且在标题内部似乎存在定义(虽然在IF语句中?见下文)所以我想知道是否有办法重新定义/定位它以便程序将编译或运行,如果没有,是否有另一种方法可以自动生成mipmap?

#ifdef GL_GLEXT_PROTOTYPES
...
...
GLAPI void APIENTRY glGenerateMipmap (GLenum);
...
#endif /* GL_GLEXT_PROTOTYPES */
Run Code Online (Sandbox Code Playgroud)

非常感谢,克里斯

tib*_*bur 6

glGenerateMipmaps是一个扩展。考虑使用glew来加载它。

  • 例如,并不意味着它是由 Microsoft 提供的! (2认同)

dat*_*olf 5

这不是访问OpenGL扩展的正确方法.正确的方法有点涉及,因为您不能重新定义可能从库导入的符号.在Windows上不是一个大问题,因为只导出了OpenGL-1.1符号.但是在几乎任何其他操作系统上都有OpenGL库导出的其他符号.

我强烈建议使用扩展加载程序库,因为正确加载扩展的简单事实很繁琐.所以只需从http://glew.sourceforge.net获取GLEW 并完成它.或者使用一些OpenGL框架,它也提供像GLFW这样的扩展管理.

只需看看如何正确加载OpenGL扩展,以了解原因:

typedef GLAPI void APIENTRY (*__MYGLEXTFP_GLGENERATEMIPMAPS)(GLenum);
__MYGLEXTFP_GLGENERATEMIPMAP __myglextGenerateMipmaps;
#define glGenerateMipmaps __myglextGenerateMipmaps;
Run Code Online (Sandbox Code Playgroud)

后来在扩展初始化中:

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

__myglGenerateMipmap = 
    (__MYGLEXTFP_GLGENERATEMIPMAPS) __MYGLEXT_GetProcAddress("glGenerateMipmaps");
Run Code Online (Sandbox Code Playgroud)

看起来很乱,你同意吗?然而,这是唯一干净的方法.如果在Windows下使用多个OpenGL上下文,它确实会更加复杂,因为Windows OpenGL扩展函数的函数指针在上下文之间可能不同.