私はiPhone用のOpenGLアプリケーションを開発しています。私の頂点シェーダでは、多数の(しかしすべてではない)頂点の色を一度に変更する方法が必要なので、私はカラーインデックスを作成しました。これにより、VBOを静的にしておき、各頂点をループして各フレーム間の色情報を変更するのではなく、単一の一様な変数を変更することができます。OpenGL ES 2.0で配列インデックスの整数を指定しますか?
私の計画では、カラー配列を使用してユニフォームを作成し、属性にインデックスを含む整数を追加します。ここに私の頂点シェーダは、次のとおりです。
uniform mat4 u_mvp_matrix;
uniform vec4 u_color_array[];
attribute vec4 a_position;
attribute int a_colorIndex;
varying lowp vec4 v_color;
void main()
{
v_color = u_color_array[a_colorIndex];
gl_Position = u_mvp_matrix * a_position;
}
これは、エラーが発生します。
int can't be an in in the vertex shader
私はいくつかの研究をしました。 iPhoneは遅くともOpenGL ES 2.0をサポートしています。つまり、遅くともGLSL 1.2をサポートしています。明らかに整数はGLSL 1.3以降でのみサポートされています。私はa_colorIndexをfloatに変更しようとしました。私はそれがうまくいくとは思っていませんでした。
どのようにして各頂点にカラーインデックスを指定できますか?
インデックスが配列ルックアップではなく、uv floatであるテクスチャルックアップを考えてみてください。または、floatをintにキャスト/ラウンドできますか? – Tim
"と表示されています。これは、最新で「GLSL 1.2」をサポートしていることを意味しています。 GL ES 2.0は、デスクトップGLSL言語とは異なる* GLSL *** ES ***シェーディング言語をサポートすることを意味します。 GLSL ESはGLSL 1.2をベースにしていますが、同じことではありません。* –