すべてのフラグメント計算に必要な重みの配列を保存したいだけです。GLSL(OpenGL ES 2.0)で定数配列を定義する方法は?
ERROR: 0:30: ']' : syntax error syntax error
ERROR: 0:30: ';' : syntax error syntax error
すべてのフラグメント計算に必要な重みの配列を保存したいだけです。GLSL(OpenGL ES 2.0)で定数配列を定義する方法は?
ERROR: 0:30: ']' : syntax error syntax error
ERROR: 0:30: ';' : syntax error syntax error
、段落4.1.9 Arrays
(P 24):
float weights[5] = float[5](3.4, 4.2, 5.0, 5.2, 1.1);
はちょうどこのをスロー
で配列を初期化するための機構がありませんシェーダ内からの宣言時間。
これは、が意図的に除外されたことに注意してください。です。 this postによれば、OpenGL ES 2のOpenGL ES SLバージョンはOpenGL SL 1.2に基づいています。同じ段落(P 20)が含まれています
配列は、配列コンストラクタから形成された初期化子を持つことができます:それは、Androidのキットカット版(のOpenGL ES 2.0)で働いている
float a[5] = float[5](3.4, 4.2, 5.0, 5.2, 1.1); float a[5] = float[](3.4, 4.2, 5.0, 5.2, 1.1); // same thing
precision highp float;
const float a[5] = float[5](3.4, 4.2, 5.0, 5.2, 1.1);
。
デバイスにはどのようなGPUがありますか? ES 2.0仕様では、「シェーダ内から宣言時に配列を初期化するメカニズムはありません」という理由で、シェーダのコンパイラのバグのように見えます。いくつかのコンパイラは、エラーを報告することなくES 2.0シェーダでES 3.0機能を使用することについてかなり自由です。問題は、異なるベンダーのGPUを搭載したデバイスで同じコードが失敗することです。 –
しかし、それはconst配列のためにそれを行うことができるようだ、試してみてください! –
@Stefanしたがって、const 1.0でconst配列を初期化できますか? –
@Viktor Sehr私は仕様を引用しました。インプリメンテーションがサポートする機能を使用しないでください。厳密には対象外です。コードが機能しない可能性があります。他の答えに対するReto Koradiのコメントも参照してください。 –