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