我正在为Unity编写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替换const时,例如:
uniform vec3 binomial_offsets = vec3(0.0, 1.3846153846, 3.2307692308);
uniform vec3 binomial_weights = vec3(0.2270270270, 0.3162162162, 0.0702702703);Unity的抱怨是:
GLSL shader load error (stage 1 shader 40):
ERROR: 0.40: Initializer not allowed有人能告诉我在GLSL的上下文中统一和常量有什么区别吗(我熟悉C/C++中的常量限定符)
顺便说一句,我正在尝试实现高斯模糊,如果有人感兴趣的话
发布于 2015-05-28 23:06:33
您不能在GLSL中初始化制服。Uniform不同于const。Uniform必须从c++/unity程序中获取值。
https://stackoverflow.com/questions/30507592
复制相似问题