Ich hab grad mal ein wenig im Forum gesucht, allerdings finde ich grad nicht wirklich heraus, wie ich in meinem Shader abfragen kann, ob das Licht überhaupt angeschaltet ist.
Ich lasse in einer Funktion nämlich sowohl beleuchtete, wie auch unbeleuchtete Elemente zeichnen und würde dies gerne im Shader berücksichtigen.
Wie stelle ich das an?
Das Problem ist, dass ich von außen keinen Zugriff auf die Funktion habe und das Licht in der Funktion geschaltet wird. Vielleicht sollte ich mein Design überdenken...
EDIT: ich hab die Funktion getrennt und schalte zwischendrin den Shader aus. So gehts erstmal.
Zuletzt geändert von Seth am Fr Aug 28, 2009 12:41, insgesamt 1-mal geändert.
Der beste Weg wäre hier sicherlich verschiedene Shader zu benutzen. Ein Universal-Shader ist der falsche Weg! Der Shader müsste sonst die Entscheidung ob Licht oder nicht für jeden gerenderten Pixel (!) erneut treffen. Ein Shader sollte auf genau die Aufgabe spezialisiert sein die er erfüllen soll. Statt Licht ein- und ausschalten ist es daher besser den Shader zu wechseln, zumindest wenn du mehr als ein nur wenige Dreiecke renderst.
Wie auch immer...den Status von GL_LIGHTING kannst du sicherlich mit glGet* ermitteln und dann via Uniform an den Shader weitergeben.
Registriert: Mo Sep 02, 2002 15:41 Beiträge: 867 Wohnort: nahe Stuttgart
Wozu brauchst du Zugriff auf die Funktion von außen, um in der Funktion eine Uniform zu setzen?
Die Funktion muss lediglich über das Shader-Program-"Handle" oder die UniformLocation via glGetUniformLocation() bekannt wissen.
Der Quick-&-Dirty-Workaround wäre noch, einfach eine andere Built-In-Uniform zu "missbrauchen" (z.B. ungenutzte Material/Light-Werte), indem man bspw. ein Float = -1 oder +1 setzt und im Shader >< 0 prüft.
Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.