2014-07-09 226 views
1

我一直在嘗試創建一個片段着色器,但創建一個簡單的vec2常量數組時遇到了很多麻煩。我看着無處不在,什麼都試過了我能找到的,像這樣的:GLSL Array Not Working

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 

着色器給出e錯誤是片段着色器。我在我的程序中使用帶LWJGL的java,併爲着色器使用ARB擴展。我用於着色器的設置直接從http://lwjgl.org/wiki/index.php?title=GLSL_Shaders_with_LWJGL複製。我根本找不到解決這個問題的方法,我試過的所有事情都以錯誤結束。也許這是着色器設置的問題?

+0

順便說一句,我想做的着色器是簡單的SSAO着色。如果您擁有自己的任何SSAO着色器,發佈它將與修復陣列問題一樣好。 – user3693187

+0

你的'#version'指令在哪裏? – genpfault

回答

1

GLSL 1.20 spec,3.3節, 「預處理」,第14頁:

語言的版本1.10不需要着色器,包括該指令[#version]和着色器不包含的#Version指令將被視爲定位版本1.10。

所以,既然你不指定#version指令你的GLSL被假定爲#version 110

因此,從GLSL 1.10 spec,部分4.1.9,「陣列」,第27頁:

沒有機制用於從着色器內初始化在聲明時陣列。

儘管您可以使用#version 120或更高版本進行操作。