GLSL share uniforms among programs #130
我目前正试图弄清楚如何在旧 GLSL 中的着色器之间共享制服。
在制服前坚持"共享"并没有编译。
编辑:我知道制服的范围是一个程序。
一个例子可以是模型-投影-矩阵。不想为每个程序单独设置一次。
有什么办法吗?
这是(顶点)着色器代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #version 130 in vec4 position; in float size; in vec4 incol; out vec4 color; shared uniform ivec4 relWorldOffset; uniform vec4[14] cubestrip; uint cubeindex; void main() { gl_Position = gl_ModelViewProjectionMatrix * (cubestrip[cubeindex] * size + relWorldOffset + position); cubeindex++; color = incol; cubeindex %= 14U; |
这是错误:
1 | 0:6(1): error: syntax error, unexpected NEW_IDENTIFIER, expecting $end |
在 GLSL 中没有像这样的
1 2 3 4 5 | uniform MatrixBlock { mat4 projection; mat4 modelview; }; |
另外,请查看本教程和 GLSL 1.40 规范(第 4.3.5.1 章)以获取更多指导。
(编辑:实际上,在最近的 OpenGL 版本中定义了