2012-05-06 18 views

答えて

17

、段落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 
+0

しかし、それはconst配列のためにそれを行うことができるようだ、試してみてください! –

+0

@Stefanしたがって、const 1.0でconst配列を初期化できますか? –

+0

@Viktor Sehr私は仕様を引用しました。インプリメンテーションがサポートする機能を使用しないでください。厳密には対象外です。コードが機能しない可能性があります。他の答えに対するReto Koradiのコメントも参照してください。 –

1
precision highp float; 

const float a[5] = float[5](3.4, 4.2, 5.0, 5.2, 1.1); 

+4

デバイスにはどのようなGPUがありますか? ES 2.0仕様では、「シェーダ内から宣言時に配列を初期化するメカニズムはありません」という理由で、シェーダのコンパイラのバグのように見えます。いくつかのコンパイラは、エラーを報告することなくES 2.0シェーダでES 3.0機能を使用することについてかなり自由です。問題は、異なるベンダーのGPUを搭載したデバイスで同じコードが失敗することです。 –

関連する問題