Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Mai 16, 2024 06:04

Foren-Übersicht » Programmierung » Shader
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Abfrage auf GL_LIGHTING
BeitragVerfasst: Fr Aug 28, 2009 12:15 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 28, 2009 12:28 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Ich glaube diese Info gibt es nicht als Built-In-Variable.
Der einfachste Weg dürfte es wahrscheinlich sein, eine bool Uniform einzubauen.

MfG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 28, 2009 12:32 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
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.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 28, 2009 12:38 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
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.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 28, 2009 12:42 
Offline
DGL Member
Benutzeravatar

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. ;)

MfG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 28, 2009 12:55 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
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 ;)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Foren-Übersicht » Programmierung » Shader


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.023s | 17 Queries | GZIP : On ]