glGenerateMipmap-标识符未找到?

时间:2011-03-02 14:25:23

标签: c++ opengl textures opengl-3 mipmaps

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

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

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

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

非常感谢, 克里斯

2 个答案:

答案 0 :(得分: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;

以及稍后的扩展初始化:

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

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

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

答案 1 :(得分:4)

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