GLSL在#130计划中共享制服

时间:2014-03-29 00:09:07

标签: opengl glsl legacy

我正在试图弄清楚,我如何在旧GLSL中的着色器之间共享一个制服。 在制服面前坚持“共享”并没有编译。 编辑:我知道制服的范围是一个程序。 这方面的一个例子可能是modeliew-projection-matrix。人们不希望单独为每个程序设置它,而只是一次。

有办法吗?

这是(顶点)着色器代码:

#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;

这是错误:

0:6(1): error: syntax error, unexpected NEW_IDENTIFIER, expecting $end

1 个答案:

答案 0 :(得分:3)

GLSL中没有shared个关键字。您可能正在寻找统一块统一缓冲区对象(UBO)。根据{{​​3}},它们需要OpenGL 3.1版(因此需要GLSL #version 140或更高版本)。如果这不是问题,OpenGL wiki将如下:

uniform MatrixBlock
{
    mat4 projection;
    mat4 modelview;
};

另外,请查看GLSL syntaxthis tutorial(第4.3.5.1章)以获取更多指示。

(编辑:实际上,shared关键字是在最新的OpenGL版本中定义的,但它仅用作计算着色器中的布局限定符,以使变量在工作组中共享。)