私はiPhone用のOpenGLアプリケーションを開発しています。頂点シェーダーでは、多数の(すべてではない)頂点の色を一度に変更する方法が必要なので、カラーインデックスを作成しました。これにより、VBOを静的のままにして、各頂点をループして各フレーム間の色情報を変更するのではなく、単一の一様変数を変更できるようになります。
私の計画は、カラー配列を使用してユニフォームを作成し、属性にインデックスを含む整数を追加することです。これが私の頂点シェーダーです:
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を頂点シェーダーに含めることはできません
私はいくつかの調査をしました。iPhoneは最新のOpenGLES2.0をサポートしています。つまり、最新のGLSL 1.2をサポートしており、整数はGLSL1.3以降でのみサポートされているようです。a_colorIndexをfloatに変更してみました。私はそれが機能することを期待していなかったし、そうでもなかった。
各頂点のカラーインデックスを指定するにはどうすればよいですか?