2009-06-03 3 views
3

Gibt es eine Möglichkeit herauszufinden, ob in GLSL ein Licht aktiviert ist, das keine Attribute weitergibt oder eine Menge verschiedener Shader erstellt?Warum kann ich den Status von OpenGL-Lichtern in GLSL nicht wissen?

Wie wäre es mit NVidias C für Graphics (Cg)? Kann ich es mit Cg machen?

Ich bin jetzt davon überzeugt, dass Sie es nicht tun können. Aber jetzt frage ich: Warum nicht?

+0

Ich vertraue dir, du meinst nicht die alten festen Pipeline Lichter ... (alte Frage, obwohl ich realisiere) – thecoshman

Antwort

6

Nach meinem Verständnis von "Aktivieren oder nicht zu aktivieren" Teil von GLSL Common Mistakes ist dies eine philosophische Grund: Shader werden geschrieben, um eine feste Pipeline zu überschreiben, daher sollten sie sich nicht auf feste Pipeline-Zustände verlassen, sondern müssen für jeden c einen anderen Shader verwenden Fähigkeit, die Sie brauchen.

Auch ich denke, das eine Designauswahl basiert auf der Tatsache sein könnte, dass Äste auf der GPU teuer sind und jemand muss gedacht haben, dass Sie nicht Dinge tun sollten wie

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

an erster Stelle.

1

Wenn GLSL ist so ähnlich wie HLSL (DirectX-Äquivalent), was ich vermute, dass es ist, denke ich, dass Sie mit der Weitergabe von Attributen stecken.

:-(

3

unforgiven3 stimmt - GLSL keinen Zugang bieten zu den festen Rohrzustände ermöglichen Sie haben es als einheitliche passieren in

+0

Gibt es einen Grund dafür? –

+0

Ich weiß es nicht genau, aber es wäre wahrscheinlich zu teuer gewesen, es vom Standpunkt der Hardware aus zu unterstützen. –

0

Sie die Lichtfarbe einstellen könnte (.. 0,0,0,0) und entweder verzweigen, oder lass es einfach über die jetzt nicht beitragenden Lichter schleifen

+0

Netter Trick. Es könnte funktionieren, aber es scheint plump (das Licht an/aus ist so viel sauberer als das Speichern/Wiederherstellen der Farbe). Ich habe die ursprüngliche Frage aufgegeben. Du kannst es nicht tun. Jetzt interessiere ich mich mehr für "warum nicht?" –

Verwandte Themen