我一直在尝试创建一个片段着色器,但是我在创建一个简单的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复制的。我根本找不到解决这个问题的方法,我尝试的所有内容都以错误结束。也许这是着色器设置的问题?
答案 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
及以上版本执行您想要的操作。