3 votes

Pourquoi ne puis-je pas connaître l'état des lumières OpenGL en GLSL ?

Existe-t-il un moyen de savoir si une lumière est activée en GLSL qui n'implique pas de passer des attributs ou de créer une tonne de shaders différents ?

Pourquoi ne pas utiliser le C for Graphics (Cg) de NVidia ? Est-ce que je peux le faire avec Cg ?

Je suis maintenant convaincu que tu ne peux pas le faire. Mais je demande maintenant : pourquoi pas ?

6voto

D'après ma compréhension de la partie "Activer ou ne pas activer" de la directive Erreurs courantes du GLSL C'est une raison philosophique : les shaders sont écrits pour remplacer le pipeline fixe, donc ils ne devraient pas compter sur les états du pipeline fixe. Vous devez utiliser un shader différent pour chaque capacité dont vous avez besoin.

De plus, je suppose que c'est un choix de conception basé sur le fait que les branches sont coûteuses pour le GPU et quelqu'un a dû penser qu'il ne fallait pas faire des choses telles que

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

en premier lieu.

3voto

Nathan Monteleone Points 3182

Unforgiven3 a raison - GLSL ne donne pas accès aux états d'activation des tuyaux fixes. Vous devez le passer en tant qu'uniforme.

1voto

unforgiven3 Points 9608
Si GLSL ressemble à HLSL (l'équivalent de DirectX), ce que je soupçonne, je pense que vous êtes obligé de passer des attributs.

-(

0voto

heeen Points 1836

Vous pouvez définir la couleur de la lumière sur (0,0,0,0) et vous pouvez soit vous brancher là-dessus, soit laisser la boucle se faire sur les lumières qui ne contribuent plus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X