Por que eu não posso saber o estado do OpenGL acende em GLSL?
Pergunta
Existe uma maneira de descobrir se uma luz é habilitado em GLSL que não envolve passando atributos ou a criação de uma tonelada de diferentes shaders?
Que tal usar C da NVidia para gráficos (CG)? Posso fazê-lo com Cg?
Agora estou convencido de que você não pode fazê-lo. Mas agora eu pergunto: por que não?
Solução
De acordo com o meu entendimento de "Ativar ou não ativar" parte do GLSL em comum esta é uma razão filosófica: shaders são escritos para substituir gasoduto fixo, portanto, não devem confiar em estados de oleodutos fixos. Você tem que usar um sombreador diferente para cada recurso que você precisa.
Além disso eu acho que isso pode ser uma escolha de design baseado no fato de que as sucursais são caros na GPU e alguém deve ter pensado que você não deveria estar fazendo coisas como
if (gl_LightSource[0].enabled)
{ ... }
em primeiro lugar.
Outras dicas
unforgiven3 é certo - GLSL não fornece acesso ao tubo fixo permitir estados. Você tem que passá-lo como um uniforme.
Se GLSL é qualquer coisa como HLSL (do DirectX equivalente), que eu suspeito que é, eu acho que você está preso com o passar atributos.
: - (
Você pode definir a cor da luz de (0,0,0,0) e um ou outro ramo em que, ou simplesmente deixá-lo loop sobre as luzes agora não-contribuintes.