2017-05-18 12 views
0

意図は:GLSL ES 2:カラー/ベクトルの配列添え字としてユニフォームを使用するのは安全ですか?

  • テクスチャをサンプリングして色を取得します。
  • .x/y/z/r/g/bでカラーコンポーネントを取得する代わりに、theColor [theIntUniform]という形式を使用すると便利です。これは配列サブスクリプト記法と呼ばれます。
  • OpengGL ES 2.0プログラミングガイドで

:あなたは慎重に する必要が

  1. 」一つのことは、しかし、(あなたは非定数整数 式で、ベクターにアクセスした場合ということです例えば、整数変数インデックスを使用して)、これはOpenGL ES 2 .0でサポートされている ではない可能性があります。

  2. 「のOpenGL ES 2.0仕様は、特定の変数の型(すなわち、均一変数)に を除いて、この動作のサポートを強制しません。」

は、2番目の文は、「制服は配列の添え字として使用することができます」または「非constsで均一なベクトルのインデックスを作成することができます」と言っていますか?私の理解に基づいて (。https://www.khronos.org/files/opengles_shading_language.pdf P110、概要の表を参照してください、それは本当に後で意味)

、制服はシェーダのために実際に一定であるので、は次のようにそれを使用することが安全である:theColorは[theIntUniform]?

ありがとうございました!

答えて

0

theColor [theIntUniform]?

動作保証されていません。

任意の整数式は、それが動作するはずのように聞こえる添字

...が、その後、セクション10.25の状態として使用することができます:5.5節のOpenGL ESシェーディング言語v1.0の仕様状態:

配列、ベクトル、および行列の動的インデックス付けは、一部の実装では直接サポートされていません。 ...ベクトルや行列の動的インデックスを仕様から削除する必要がありますか? 解決策:主な仕様を守ってください。サポートは必須ではありません。

しかし、サポートされていても、このようにするのは本当に良い考えではありません。ほとんどのモバイルアーキテクチャでは、ダイナミックまたは統一ベースの索引付けは、定数索引付けやスウィズル構文(コンパイル時として知られているため、コンパイラーによってインライン展開され、命令に直接エンコードされる)を使用するよりも遅くなる可能性があります)。

+0

ありがとうございました!結局のところ、少し遅くても問題はありません。結局のところ、別の動的アプローチ(コンポーネントを選択するために均一なベクトルを描く)を使用すると、さらに遅くなる可能性があります。私はちょうどこれが動作するかどうか確認したい。 – macrod

+0

プログラミングガイドで説明されているように、動作することは保証されていませんが、変数に対しては機能しません。 – macrod

+0

@macrod OpenGL ESシェーディング言語v1.0仕様文書のどのビットがそれを禁止しているか考えてみませんか?私が参照しているセクションでは、可変インデックスを明示的に許可しているようですが、「任意の」整数式はベクトルインデックスの配列添字にすることができます。これをコンパイル時定数式または統一式のいずれかにする必要はありません。 – solidpixel

関連する問題