C OpenGL头文件版本信息不匹配
我正在玩一点linux上的opengl编程,我有些怀疑 glxinfo为OpenGL版本提供了以下信息: OpenGL版本字符串:2.1 Mesa 7.11 我想这意味着我的系统支持使用Mesa实现的OpenGL2.1 然后,如果我查看/usr/include中的GL/GL.h,我会发现如下内容: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
#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宏,如果安装的头文件未包含编译时所需的所有符号,则会在编译时发出一些错误。