属性の受け渡しや大量の異なるシェーダーの作成を伴わないライトがGLSLで有効になっているかどうかを確認する方法はありますか?
NVidiaのCforGraphics(Cg)を使用するのはどうですか?Cgでできますか?
私は今あなたがそれをすることができないと確信しています。しかし今、私は尋ねます:なぜそうではないのですか?
GLSL Common Mistakesの「Enable or Not to Enable」部分に関する私の理解によると、これは哲学的な理由です。シェーダーは固定パイプラインをオーバーライドするように作成されているため、固定パイプラインの状態に依存するべきではありません。必要な機能ごとに異なるシェーダーを使用する必要があります。
また、これはブランチが GPU で高価であり、誰かが次のようなことをすべきではないと考えたに違いないという事実に基づいた設計上の選択かもしれません。
if (gl_LightSource[0].enabled)
{ ... }
そもそも。
unforgiven3 は正しいです - GLSL は固定パイプ有効状態へのアクセスを提供しません。ユニフォームとして提出する必要があります。
GLSL が HLSL (DirectX に相当するもの) のようなものであると思われる場合は、属性を渡すことに固執していると思います。
:-(
ライトの色を(0,0,0,0)に設定し、その上で分岐するか、現在は寄与していないライトをループさせることができます。