2015-05-28 139 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