'out不能用于Nvidia驱动上的非变化'着色器编译错误,Intel工作正常,AMD有另一个错误

Wut*_*dej 4 opengl glsl

我尝试使用以下顶点着色器程序运行一个简单的OpenGL 3应用程序: -

in vec4 vPosition;
out vec2 otexcoord;

uniform mat4 modelview;
uniform mat4 projection;

void main()
{
    gl_Position = projection * modelview * vPosition;
    otexcoord.s = vPosition.x;
    otexcoord.t = vPosition.y * -1.0;
};
Run Code Online (Sandbox Code Playgroud)

我在不同公司的3个GPU上运行此代码,结果不同.

  • 使用英特尔的驱动程序,没有错误,它运行完美.
  • 使用Nvidia的驱动程序时,错误是"不能用于非变化的otexcoord".
  • 使用AMD的驱动程序时,错误是"GL3前向兼容上下文不支持隐式版本号110"

AMD的一个似乎是最不明显的.事实上,我对它一无所知.

下面是一些查询字符串

  • 英特尔:OpenGL 3.2.0 - Build 9.17.10.2932 GLSL 1.50 - Build 9.17.10.2932
  • Nvidia:OpenGL 3.2.0 GLSL 1.50 NVIDIA通过Cg编译器
  • AMD:OpenGL 3.2.12002核心配置文件上下文9.12.0.0 GLSL 4.20

英特尔和Nvidia是类似的,它是一个GLSL 1.50编译器.AMD的是GLSL 4.20

以下是问题: -

  1. 在英特尔和Nvidia的编译器之间,哪一个在这种情况下正常工作?
  2. AMD编译器的错误信息究竟意味着什么?我需要什么来纠正错误.

Nic*_*las 11

您必须始终使用#version指令.如果不这样做,编译器将假定您的意思是GLSL版本1.10.这意味着它out不是有效的关键字.