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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top