我尝试使用以下顶点着色器程序运行一个简单的 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;
};
我在来自不同公司的 3 个 GPU 上运行了此代码,结果不同。
- 使用Intel的驱动程序,没有错误,运行完美。
- 使用 Nvidia 的驱动程序时,错误是“out 不能与非变化的 otexcoord 一起使用”。
- 使用 AMD 驱动程序时,错误为“GL3 向前兼容上下文不支持隐式版本号 110”
AMD 的似乎是最不明显的。事实上我对此一无所知。
下面是一些查询字符串
- 英特尔:OpenGL 3.2.0 - 内部版本 9.17.10.2932 GLSL 1.50 - 内部版本 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
Intel 和 Nvidia 的类似,都是 GLSL 1.50 编译器。 AMD 的是 GLSL 4.20
下面是问题:-
- 在这种情况下,英特尔和 Nvidia 的编译器中哪一个可以正常工作?
- AMD 编译器的错误消息的真正含义是什么?我需要什么来纠正错误。
最佳答案
您必须始终使用 #version directive 。如果您不这样做,那么编译器将假定您指的是 GLSL 版本 1.10。这意味着 out
不是有效的关键字。
关于opengl - Nvidia 驱动程序上出现“out 不能与非变化的”着色器编译错误,Intel 工作正常,AMD 有另一个错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15234281/