GLSL阵列不起作用

时间:2014-07-09 21:16:04

标签: java arrays opengl glsl lwjgl

我一直在尝试创建一个片段着色器,但是我在创建一个简单的vec2常量数组时遇到了很多麻烦。我到处寻找并尝试了我能找到的所有东西,比如:

const vec2 poisson16[16] = vec2[](vec2( -0.94201624,  -0.39906216 ),
                            vec2(  0.94558609,  -0.76890725 ),
                            vec2( -0.094184101, -0.92938870 ),
                            vec2(  0.34495938,   0.29387760 ),
                            ...some other vec2's...
                            vec2( -0.81409955,   0.91437590 ),
                            vec2(  0.19984126,   0.78641367 ),
                            vec2(  0.14383161,  -0.14100790 ) );

但它会打印出来:

ERROR: 0:23: ']' : syntax error syntax error 
ERROR: 0:38: ';' : syntax error syntax error

我也尝试过:

const vec2 poisson16[16] = {    vec2( -0.94201624,  -0.39906216 ),
                            vec2(  0.94558609,  -0.76890725 ),
                            vec2( -0.094184101, -0.92938870 ),
                            vec2(  0.34495938,   0.29387760 ),
                            ...some more vec2's...
                            vec2( -0.81409955,   0.91437590 ),
                            vec2(  0.19984126,   0.78641367 ),
                            vec2(  0.14383161,  -0.14100790 ) };

但是会返回:

ERROR: 0:22: '{' : syntax error syntax error

提供错误的着色器是片段着色器。我在我的程序中使用带有LWJGL的java,并为着色器使用ARB扩展。我用于着色器的设置是直接从http://lwjgl.org/wiki/index.php?title=GLSL_Shaders_with_LWJGL复制的。我根本找不到解决这个问题的方法,我尝试的所有内容都以错误结束。也许这是着色器设置的问题?

1 个答案:

答案 0 :(得分:1)

GLSL 1.20 spec,第3.3节,"预处理器",第14页:

  

该语言版本1.10不要求着色器包含此指令[#version],而不包含#version指令的着色器将被视为目标版本1.10。 < / p>

因此,由于您没有指定#version指令,因此您的GLSL被假定为#version 110

因此,从GLSL 1.10 spec,第4.1.9节,&#34;阵列&#34;,第27页:

  

在着色器中没有在声明时初始化数组的机制。

您可以使用#version 120及以上版本执行您想要的操作。