GLSL 1.50:"在int中"在OS X中不合法?

Jus*_*tin 3 opengl macos glsl opengl-3 osx-mountain-lion

此片段着色器代码在Windows中编译,但在OS X(Mountain Lion,使用3.2核心上下文)中引发错误.

#version 150 core
in int vinstance_id;
uniform uint object_id[16];
out uint id_map;

void main() {
    id_map = object_id[vinstance_id];
}
Run Code Online (Sandbox Code Playgroud)

错误是:

ERROR: 0:2: int can't be an in in the fragment shader
Run Code Online (Sandbox Code Playgroud)

我不认为这是正确的:在GLSL 1.50规范中,第4.3.4节说明片段着色器:

片段输入只能是有符号和无符号整数和整数向量,浮点数...

这是驱动程序错误吗?

Bar*_*icz 10

不,你没有彻底阅读规范.

必须使用插值限定符flat限定有符号或无符号整数或整数向量的片段着色器输入.

(大致位于链接文档第32页的中间,如果有人想验证的话)

  • 如果有人感兴趣的话,它仍然保持相同的"4.3". (2认同)