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)
非常感谢,克里斯
这不是访问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扩展函数的函数指针在上下文之间可能不同.