2012-03-14 48 views
0

在GLSL中为renderscript创建自定义着色器时,程序生成器似乎将所有绑定为统一常量的结构成员转换为浮点或vec,而不管它们的指定类型是什么。此外,我有一个统一的编译时报告以下错误:“无法链接程序,L0010,统一”统一名称在这里“精度不同。”我在两个不同的结构中有相同的命名统一体,它们分别绑定到顶点和片段着色器。编辑] 感谢您对第二部分的回答。关于第一部分,我会尝试更加清晰。在java端构建我的着色器程序时,我将常量绑定到程序构建器(包括顶点和片段),输入是绑定到renderscript结构的java变量。一切都很好,所有我的浮点变量都可以在着色器程序中作为制服完全访问。然而,如果结构有一个如bool或int类型的成员,并且我尝试了诸如if(i == UNI_memberInt),其中我是在着色器中声明的整数计数器,或者如果(UNI_memberBool)那么我得到错误“不能将int与float进行比较”或“if()条件必须是布尔类型”,这暗示了数据并未完整地呈现给GLSL程序。我可以通过使它们浮动值并使用像0.0这样的东西来解决这个问题,因为GLSL要求浮点值0总是精确的,但对我来说似乎很粗糙。如果我尝试在for循环中使用UNI_memberInt作为停止条件,则会发生类似的情况。Renderscript GLSL着色器将所有制服转换为浮动

回答

1

感谢您在开发者环聊中询问此问题。不幸的是,Renderscript团队的工程师不太理解您的问题的第一部分。如果你可以澄清那会很好。至于第二部分,这是一个已知的错误。

基本上,如果你在顶点和片段着色器中都有一个统一的“foo”,那么顶点着色器是高精度的,片段着色器是中等的,GLSL编译器无法处理。不幸的是,解决方案是两者之间没有任何名称冲突。