均一な配列を使用するフラグメントシェーダーを作成しようとしていました (呼び出し全体で一貫しているシェーダーに多くの値が必要なため)。私は webgl でこれを試しているので、多くのユニフォームをパックするために uniformbuffers を使用できません。これらのユニフォームをパックするために 2D テクスチャを使用することもできましたが、ユニフォームの一部の値が 255 を超えてしまうため、特にモバイルで広く利用されていない浮動小数点テクスチャを使用する必要があります。そのため、uniform array を使用するアプローチに固執する必要がありました。私のフラグメントシェーダーコードには次のような宣言があります:
uniform float array[100];
Intel HD グラフィックス カードでサイズ 100 のアレイを使用すると、パフォーマンスが 50% 低下しますが、nvdia カードではそうではありません。私は私の場合MAX_FRAGMENT_UNIFORM_VECTORS
に出てくるものを尋ねました221
。この配列のさまざまなサイズを試してみたところ、非常に奇妙な動作が見られました。
配列のサイズが 81 を超えると、パフォーマンスが突然 50% 低下します。誰もこの問題に直面したことがありますか? これを解決する方法はありますか? ブラウザでは、シェーダ バージョン 1.0 のみがサポートされていることに注意してください ( #version 100 ) 。