9

我尝试使用以下顶点着色器程序运行一个简单的 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 上运行此代码,结果不同。

  • 使用英特尔的驱动程序,没有错误,并且运行良好。
  • 使用 Nvidia 的驱动程序,错误是“out can't be used with non-variable 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

英特尔和英伟达的类似,都是 GLSL 1.50 编译器。AMD 是 GLSL 4.20

下面是问题:-

  1. 在英特尔和英伟达的编译器之间,哪一个在这种情况下工作正常?
  2. AMD 编译器的错误信息到底是什么意思?我需要什么来纠正错误。
4

1 回答 1

19

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

于 2013-03-05T21:39:31.447 回答