Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C OpenGL头文件版本信息不匹配_C_Linux_Opengl - Fatal编程技术网

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

C OpenGL头文件版本信息不匹配,c,linux,opengl,C,Linux,Opengl,我正在玩一点linux上的opengl编程,我有些怀疑 glxinfo为OpenGL版本提供了以下信息: OpenGL版本字符串:2.1 Mesa 7.11 我想这意味着我的系统支持使用Mesa实现的OpenGL2.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

我正在玩一点linux上的opengl编程,我有些怀疑

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

OpenGL版本字符串:2.1 Mesa 7.11

我想这意味着我的系统支持使用Mesa实现的OpenGL2.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_版本_xx未针对1.4、1.5和2.0进行定义。所以我的问题是,为什么头文件不包含GL版本2.0(至少)之前的定义? 我应该用更合适的方法更改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

Francesco

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

这允许需要扩展功能的程序在功能较少的系统上运行,或者优雅地中止,给出一些有用的错误消息,而不是“libGL.so中必需的符号glShaderSource不解析”,这可能会混淆用户,甚至会进入兼容模式


获得更高OpenGL版本功能的最简单的方法是使用GLEW库(),它归结为包含
GL/GLEW.h
,而不是
GL/GL.h
,并调用
glewInit()
就在上下文创建之后。

所以头文件中定义的GL\u版本\u X\u X并不重要,因为一切都是在运行时确定的?这似乎很奇怪,但我认为你是对的…@Francesco:GL_版本的头文件的宏仅仅告诉你,你可以从头文件中获得哪些OpenGL符号(令牌和过程)。其思想是,添加一些#ifndef宏,如果安装的头文件未包含编译时所需的所有符号,则会在编译时发出一些错误。