2015-05-28 53 views
0

我寫在GLSL着色器的團結和我遇到,我無法找到一個解釋一個怪癖:GLSL中的統一和常量;統一着色器

在ShaderLab SubShader通行證,我宣佈GLSLPROGAM ENDPROGRAM外內vec3s主要功能

const vec3 binomial_offsets = vec3(0.0, 1.3846153846, 3.2307692308); 
const vec3 binomial_weights = vec3(0.2270270270, 0.3162162162, 0.0702702703); 

這個編譯好。 然而,當我與統一更換常量,例如:

uniform vec3 binomial_offsets = vec3(0.0, 1.3846153846, 3.2307692308); 
uniform vec3 binomial_weights = vec3(0.2270270270, 0.3162162162, 0.0702702703); 

統一抱怨有:

GLSL shader load error (stage 1 shader 40): 
ERROR: 0.40: Initializer not allowed 

有人能告訴我什麼統一和const的區別是GLSL的情況下(我熟悉C/C++)

我想實現的方式高斯模糊,如果有人有興趣const限定符

+1

你正在使用哪種版本的GLSL?制服的初始化程序從GLSL 1.20(http://ogltotd.blogspot.co.uk/2007/12/default-uniform-values.html) – GuyRT

+0

不知道。無論哪種版本是我猜想的默認值。我從來沒有試過玩過一些版本宏 – Lancophone

+0

@GuyRT我試過版本規範,但Unity抱怨:'GLSL着色器加載錯誤(階段1着色器43):錯誤:0.108:「:#version必須發生在任何其他語句之前在程序中,我只是在GLSLPROGRAM下,所以我不太確定程序中'第一條語句'的位置是什麼? – Lancophone

回答

-1

你不能在GLSL中初始化制服。統一與常量不同。統一必須從你的C++ /統一程序中獲取價值

+2

這是不正確的,正如@GuyRT在上面的評論中已經指出的,制服可以在GLSL代碼中初始化與GLSL 1.20,於2006年發佈。 –

+0

@CrSe正如reto指出的,他們確實可以在GLSL中初始化。這是Unity的問題嗎?恐怕我不能在這個基礎上接受這個答案 – Lancophone

+0

@Lancophone耶對不起,我被告知錯了。 – CrSe