1

我正在尝试实现 glGenerateMipmap 以便我可以继续重新着色我渲染的立方体的每个级别,除了程序不会编译给出错误

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

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

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

非常感谢,克里斯

4

2 回答 2

6

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

于 2011-03-02T14:48:07.937 回答
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 扩展函数的函数指针可能在上下文之间有所不同。

于 2011-03-02T14:59:23.330 回答