renderscript 用の GLSL でカスタム シェーダーを作成するとき、プログラム ビルダーは、指定された型に関係なく、一様定数としてバインドする構造体のすべてのメンバーを float または vec に変換しているようです。また、コンパイル時に次のエラーを報告している制服があります:「プログラムをリンクできませんでした、L0010、制服「ここの制服名」は精度が異なります。」. 頂点シェーダーとフラグメント シェーダーに別々にバインドする 2 つの異なる構造に、同じ名前の uniform があります。
[編集] 2番目の部分への回答をありがとう。最初の部分に関しては、より明確にしようとします。Java 側でシェーダー プログラムをビルドするとき、renderscript 構造にバインドされた Java 変数を入力として、定数をプログラム ビルダー (頂点とフラグメントの両方) にバインドします。すべてがうまく機能し、すべての float 変数は、シェーダー プログラムでユニフォームとして完全にアクセスできます。ただし、構造体に bool 型や int 型などのメンバーが含まれていて、if (i == UNI_memberInt) (i はシェーダーで宣言された整数カウンター) などを試みた場合、または if (UNI_memberBool) の行に沿ってエラーが発生します。 「int と float を比較できません」または「if() 条件はブール型である必要があります」これは、データが GLSL プログラムに完全に到達していないことを示唆しています。GLSL では 0 の float 値が常に正確である必要があるため、それらを float 値にして 0.0 などを使用することでこれを回避できますが、私には粗雑に思えます。for ループで UNI_memberInt を停止条件として使用しようとすると、同様のことが起こります。