webglの頂点シェーダで、vector_array[foo]
(fooは範囲内で整数であると仮定します)というタイトルは正しいですか?可変配列インデックスはwebglシェーダでは使用できませんか?
テクスチャが最適ですか、または回避策やルックアップテーブルを模倣するためのより良い方法がありますか?
webglの頂点シェーダで、vector_array[foo]
(fooは範囲内で整数であると仮定します)というタイトルは正しいですか?可変配列インデックスはwebglシェーダでは使用できませんか?
テクスチャが最適ですか、または回避策やルックアップテーブルを模倣するためのより良い方法がありますか?
http://www.khronos.org/registry/webgl/specs/latest/#DYNAMIC_INDEXING_OF_ARRAYS 「はWebGLのは、定数式、ループインデックスまたは組み合わせで動的索引付けを可能にする。唯一の例外は、任意の式を使用して索引付けすることができ、頂点シェーダに均一にアクセスするためのものです」。
試しましたか?それがうまくいかなかった場合、いくつかのオプションがあります。
値が小さい場合は、if-elseが正常に機能します。 AFAIKでは、ユニフォームの値がレジスタにロードされることになるので、数十サイクルの計算を実行しても、シェーダの速度はそれほど遅くならないでしょう。
多くの値の場合、テクスチャが最適です。
私はそれをテストしていませんが、私は回避策はあり、次の
//index as a float
attribute lowp float vColorIndex;
//the array
uniform vec4 Colors[16];
//type cast the float in an int
int index = int(vColorIndex);
//use index
vec4 col = Colors[index];
これは実行時に失敗します。 – jes5199
から任意のコンパイルエラーを得ることはありません: '/ *与えられた変数iがインデックス* /(int型のx =についてですが、 0、x