Pregunta

¿Hay una manera de saber si una luz se activa en GLSL que no implica pasar atributos o la creación de una tonelada de diferentes shaders?

¿Qué pasa con el uso de C de NVidia para gráficos (CG)? ¿Puedo hacerlo con Cg?

Ahora estoy convencido de que no puede hacerlo. Pero ahora me pregunto: ¿por qué no

¿Fue útil?

Solución

De acuerdo con mi comprensión de "Activar o no habilitar" parte de GLSL errores comunes esta es una razón filosófica: shaders están escritos para anular la tubería fija, por lo que no deben confiar en los estados de tuberías fijas. Tienes que utilizar un sombreado diferente para cada capacidad que necesita.

También supongo que esto podría ser una opción de diseño basado en el hecho de que las ramas son caros en la GPU y alguien debe haber pensado que no debería estar haciendo cosas como

if (gl_LightSource[0].enabled)
{ ... }

en el primer lugar.

Otros consejos

unforgiven3 es correcto - GLSL no proporciona acceso a la tubería fija permitir a los estados. Usted tiene que pasar en un uniforme.

Si GLSL es algo como HLSL (equivalente de DirectX), que sospecho que es, creo que hay que contentarse con los atributos que pasan.

: - (

Se puede configurar el color de la luz a (0,0,0,0) y dos ramas en que, o simplemente dejar que un bucle sobre las luces ahora no contribuyentes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top