我正在尝试运行这个GL演示,但是它只在CentOS 7中运行,如果我设置了MESA_GL_VERSION_OVERRIDE=3.0
,如下所示:
git clone https://github.com/ebassi/glarea-example.git
make
MESA_GL_VERSION_OVERRIDE=3.0 ./glarea
如果没有该环境变量,我将得到以下错误:
我尝试过将#version
更改为110和120,但是它无法编译。
问题:
顶点和片段代码如下:
==> glarea-fragment.glsl <==
#version 130
smooth in vec4 vertexColor;
out vec4 outputColor;
void main() {
outputColor = vertexColor;
}
==> glarea-vertex.glsl <==
#version 130
in vec3 position;
in vec3 color;
uniform mat4 mvp;
smooth out vec4 vertexColor;
void main() {
gl_Position = mvp * vec4(position, 1.0);
vertexColor = vec4(color, 1.0);
}
发布于 2021-11-21 08:56:20
我认为您忽略了描述超覆实际工作的部分:
更改glGetString(GL_VERSION)返回的值,并可能更改GL类型。 ..。Mesa可能并没有真正实现所有给定版本的特性。(只适用于开发人员)
这意味着,如果强迫OpenGL版本报告我的Mesa,您就会感到幸运的是,特定的演示程序运行/运行良好,因为Mesa没有实现所需版本的某些特性,并且可能会崩溃或行为不当。
glxinfo
来检查差异,该报告系统中有关核心和兼容配置文件的信息。所以回到问题上来。
不应该以某种方式检测GL版本吗?
是的,通常要求应用程序检查glGetString(GL_VERSION)
并在版本低于支持的情况下终止有意义的消息(而不是像本示例那样试图编译不支持版本的GLSL程序)。
将其设置为跨平台OpenGL应用程序以在许多不同的Linux发行版上运行的正确方法是什么?
这不是构建应用程序的问题,而是开发应用程序的问题。为了更好地兼容,应用程序应该支持它可以运行的较低版本的OpenGL。在这种特殊情况下,我想,使代码与OpenGL 2.1兼容将是一项小小的努力。
但同时,较新的GTK版本在默认情况下创建核心配置文件,而不是兼容配置文件,这样便携式应用程序应该能够同时处理两者(通过提供不同的GLSL程序/处理缺失的GL函数等等)。
我对CentOS 7不太了解,但它看起来很旧(2014年发布)--我想参考的示例在大多数现代的Linux发行版上运行得很好,无需修改(使用更新的Mesa和更新的GTK)。
https://stackoverflow.com/questions/70051270
复制相似问题