OpenGL头文件版本信息不匹配。

3

我正在linux上进行一些opengl编程的尝试,有一些疑问。

glxinfo给出了以下OpenGL版本信息:

OpenGL version string: 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

因此,GL_VERSION_xx未针对1.4、1.5、2.0进行定义。所以我的问题是,为什么头文件不包括至少到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

弗朗西斯科

1个回答

4
你需要区分实际实现的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
@Francesco:头文件中的GL_VERSION_X_X宏仅告诉您可以从该头文件获取哪些OpenGL符号(标记和过程)。这个想法是,您可以添加一些#ifndef宏,在编译时如果安装的头文件不包含所有所需的符号,则会发出错误。 - datenwolf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接