【问题标题】:OpenGL header files version information mismatchOpenGL头文件版本信息不匹配
【发布时间】:2011-12-30 23:35:15
【问题描述】:

我在 linux 上玩了一下 opengl 编程,我有一些疑问。

glxinfo 为我提供了 OpenGL 版本的以下信息:

OpenGL 版本字符串:2.1 Mesa 7.11

我猜这意味着我的系统使用 Mesa 实现支持 OpenGL 2.1。

然后,如果我从 /usr/include 中查看 GL/gl.h,我发现类似:

#define GL_VERSION_1_1 1
#define GL_VERSION_1_2 1
#define GL_VERSION_1_3 1
#define GL_ARB_imaging 1

所以没有为 1.4、1.5、2.0 定义 GL_VERSION_xx。所以我的问题是,为什么头文件不包含 2.0 之前的 GL 版本的定义(至少)? 我应该用更合适的东西更改 GL/gl.h 头文件?

有关信息,我使用的是标准的 ubuntu linux 安装。这里有一些来自 glxinfo 的更多信息:

OpenGL vendor string: X.Org R300 Project
OpenGL renderer string: Gallium 0.4 on ATI RV515
OpenGL version string: 2.1 Mesa 7.11
OpenGL shading language version string: 1.20

弗朗西斯科

【问题讨论】:

    标签: c linux opengl


    【解决方案1】:

    您需要区分实际实现的 OpenGL 版本和头文件中的内容。 OpenGL 头文件的内容通常是某种最低公分母,因为 OpenGL 有一个扩展系统。 OpenGL 实现(也)通过扩展系统提供它们的功能,扩展系统实际上是某种形式的动态库链接。

    这允许需要扩展功能的程序在功能较少的系统上正常中止,提供一些有用的错误消息而不是“libGL.so 中所需的符号 glShaderSource 无法解析”,这可能会使用户感到困惑,甚至下拉到兼容模式。

    获得更高 OpenGL 版本功能的最简单方法是使用 GLEW 库 (http://glew.sourceforge.net),归结为包含 GL/glew.h 而不是 GL/gl.h,并在上下文创建后立即调用 glewInit()

    【讨论】:

    • 所以头文件中定义的 GL_VERSION_X_X 无关紧要,因为一切都是在运行时确定的?这看起来很奇怪,但我想你是对的......
    • @Francesco:头文件的 GL_VERSION_X_X 宏只是告诉您,您可以从该头文件中获得哪些 OpenGL 符号(令牌和过程)。这个想法是,如果安装的头文件不包含编译时所需的所有符号,则添加一些 #ifndef 宏,它会在编译时发出一些错误。
    猜你喜欢
    • 2014-02-03
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多