【问题标题】:glGenerateMipmap- identifier not found?glGenerateMipmap- 找不到标识符?
【发布时间】:2011-03-02 14:25:22
【问题描述】:

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

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

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

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

非常感谢, 克里斯

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 嗯,它开始是作为扩展,但现在它是核心的一部分。
    • 不代表是微软提供的,比如!
    • Tibur 是正确的,因为高于 1.4 版本(Windows 下为 1.2)的所有内容通常都算作扩展,即使它是核心,因为您必须以相同的方式初始化函数指针。
    【解决方案2】:

    这不是访问 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 扩展函数的函数指针可能会因上下文而异。

    【讨论】:

    • 非常感谢有关如何手动链接 OpenGL dll 的演示。几周来我一直在想这个问题。
    猜你喜欢
    • 1970-01-01
    • 2013-03-17
    • 2015-03-01
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多