GL_TEXTURE_2D がシェーダーでアクティブになっているかどうかを知りたいです。
シェーダーとアクティブなテクスチャ (GL_TEXTURE_2D が設定されている場合) に色をバインドしており、これら 2 つを組み合わせる必要があります。
したがって、テクスチャがバインドされている場合は、色とテクスチャ (sampler2D * color) を混合し、テクスチャがバインドされていない場合は、色を使用します。
それとも、これについて別の方法をとるべきですか?
「GL_TEXTURE_2Dがアクティブである」または「GL_TEXTURE_2Dが設定されている」とはどういう意味かは明確ではありません。
次の点に注意してください:
glEnable(GL_TEXTURE_2D)
(フラグメント)シェーダーには影響しません。フラグメントシェーダーを使用して置き換えたパイプラインの固定関数部分をパラメーター化します。textureSize(sampler, 0).x > 0
に関連付けられた有効なテクスチャの存在を検出するために使用できる場合がありますが、動作が定義されていない可能性があります。textureQueryLevels(gsampler2D sampler)
に関連付けられたテクスチャがない場合に0を返すことを明示的に示しています。あなたはこれについて別の方法をとるべきですか?私はそう思います:シェーダー内で決定を行う代わりに、「白」の1x1ピクセルのテクスチャをバインドし、そのテクスチャを無条件にサンプリングして、結果に色を掛けます。これにより、明らかにが返され1.0 * color
ます。それはまた、よりポータブルでより速くなるでしょう。