12

GL_TEXTURE_2D がシェーダーでアクティブになっているかどうかを知りたいです。

シェーダーとアクティブなテクスチャ (GL_TEXTURE_2D が設定されている場合) に色をバインドしており、これら 2 つを組み合わせる必要があります。

したがって、テクスチャがバインドされている場合は、色とテクスチャ (sampler2D * color) を混合し、テクスチャがバインドされていない場合は、色を使用します。

それとも、これについて別の方法をとるべきですか?

4

1 に答える 1

19

「GL_TEXTURE_2Dがアクティブである」または「GL_TEXTURE_2Dが設定されている」とはどういう意味かは明確ではありません。

次の点に注意してください:

  • glEnable(GL_TEXTURE_2D)(フラグメント)シェーダーには影響しません。フラグメントシェーダーを使用して置き換えたパイプラインの固定関数部分をパラメーター化します。
  • テクスチャサンプラーに関連付けられたテクスチャユニットにバインドされた有効なテクスチャがあるかどうかをGLSLシェーダーの内部から判断する「直接」/「クリーン」な方法はありません(私の知る限り)。
  • GLSL 1.3以降では、サンプラーtextureSize(sampler, 0).x > 0に関連付けられた有効なテクスチャの存在を検出するために使用できる場合がありますが、動作が定義されていない可能性があります。
  • ARB_texture_query_levels拡張機能は、サンプラーtextureQueryLevels(gsampler2D sampler)に関連付けられたテクスチャがない場合に0を返すことを明示的に示しています。

あなたはこれについて別の方法をとるべきですか?私はそう思います:シェーダー内で決定を行う代わりに、「白」の1x1ピクセルのテクスチャをバインドし、そのテクスチャを無条件にサンプリングして、結果にを掛けます。これにより、明らかにが返され1.0 * colorます。それはまた、よりポータブルでより速くなるでしょう。

于 2013-02-20T14:35:53.160 に答える