DGL https://delphigl.com/forum/ |
|
Abfrage auf GL_LIGHTING https://delphigl.com/forum/viewtopic.php?f=20&t=8642 |
Seite 1 von 1 |
Autor: | Seth [ Fr Aug 28, 2009 12:15 ] |
Betreff des Beitrags: | Abfrage auf GL_LIGHTING |
Hallo, 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? Vielen Dank. mfg |
Autor: | WhiteHunter [ Fr Aug 28, 2009 12:28 ] |
Betreff des Beitrags: | |
Ich glaube diese Info gibt es nicht als Built-In-Variable. Der einfachste Weg dürfte es wahrscheinlich sein, eine bool Uniform einzubauen. MfG |
Autor: | Seth [ Fr Aug 28, 2009 12:32 ] |
Betreff des Beitrags: | |
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. |
Autor: | Coolcat [ Fr Aug 28, 2009 12:38 ] |
Betreff des Beitrags: | |
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. |
Autor: | WhiteHunter [ Fr Aug 28, 2009 12:42 ] |
Betreff des Beitrags: | |
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. ![]() MfG |
Autor: | Seth [ Fr Aug 28, 2009 12:55 ] |
Betreff des Beitrags: | |
Den Zugriff wollte ich, da ich die Funktion selbst nicht verändern wollte, aber jetzt da ich die Funktion in zwei aufgesplittet habe, klappt es ja ![]() |
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |