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

Aktuelle Zeit: Mi Mai 29, 2024 01:14

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Mehrere Shader gleichzeitig
BeitragVerfasst: Mi Okt 20, 2010 11:05 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
Moin,

also ich wollte grad zusätzlich zu meinem projections-shader einen weiteren Shader einbinden welcher sich nur um eine Globale Lichtquelle kümmern soll. Also einfach nur einen Pointlight Shader (aus dem wiki). Diese funktioniert auch. Doch irgendwie haut es nicht hin das ich beide gleichzeitig zum laufen bringe. Funktioniert immer nur der den ich zuletzt mit glUseProgram aufrufe..

Was mach ich da verkehrt? Müsse doch eigentlich funktionieren oder?

Grüße
thomas


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mehrere Shader gleichzeitig
BeitragVerfasst: Mi Okt 20, 2010 11:17 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
Ähm, wie genau stellst du dir vor, dass zwei Shader gleichzeitig arbeiten(*)? Der eine setzt eine Pixelfarbe, und dann kommt der andere, und überschreibt sie wieder? Und was dann rauskommt hängt davon ab, in welcher Reihenfolge das intern ausgeführt wird? ;) Du könntest beides in einem Shader machen (ggf mit MRT), oder mit zwei Renderpasses, aber beides einzeln und trotzdem gleichzeitig wird schwer.

(*): Vielleicht isses möglich, aber dann weiß ich nix davon. glUseProgram setzt jedenfalls den aktuelen shader, und der vorherige ist dann nicht mehr gebunden. sonst würd glUseProgram(0) nicht den Shader wieder ausschalten.

oder meinst du Dual GPU?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mehrere Shader gleichzeitig
BeitragVerfasst: Mi Okt 20, 2010 11:28 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
nun dann hab ich da was falsch verstanden. Ich dachte das ich da mehere Shader-Units habe wo ich mehrere Shader reinladen kann. Aber wenn ich deine Antwort so lese hast du recht.. so kanns nicht gehen. Nun die ganze Szene deshalb nochmal rendern wäre quatsch. Ich kann ja auch alles in einem Shader packen, doch der is jetzt schon ganz schön groß. Oder wird das intern automatisch auf die einzelnen Shader-Units aufgeteilt?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mehrere Shader gleichzeitig
BeitragVerfasst: Mi Okt 20, 2010 11:55 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Oder wird das intern automatisch auf die einzelnen Shader-Units aufgeteilt?

Eine aktuelle Grafikkarte hat so um die 128 bis 256 Shader-Units, ggf. auch mehr. D.h. das z.B. 128-256 Pixel (Fragmente) parallel (also gleichzeitig) berechnet werden. Vom Prinzip ist das wie bei CPU-Kernen....die Grafikkarte weißt ihnen automatisch Aufgaben zu.

Zitat:
Ich kann ja auch alles in einem Shader packen, doch der is jetzt schon ganz schön groß.

Wenn du dir glShaderSource genauer anschaust wirst du merken das du da eigentlich ein Array von Strings übergibst. Du kannst also einen Shader leicht in mehrere Dateien aufteilen und so diese Teile in einem anderen Shader ebenfalls benutzen. Wichtig ist halt das du jeweils nur eine main()-Funktion hast.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mehrere Shader gleichzeitig
BeitragVerfasst: Mi Okt 20, 2010 12:14 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
Du kannst zur selben Zeit immer nur einen Fragmentshader und einen Vertexshader haben. (Geometryshader wahrscheinlich auch nur einen, aber da kenne ich mich nicht aus.) Trotzdem hast du auf deiner Grafikkarte (höchstwahrscheinlich) mehrere Shaderunits, also Rechenwerke, die den Shadercode ausführen. Das können durchaus mehrere hundert sein, weil sich die Rechenaufgaben sehr gut parallelisieren lassen. Der Fragmentshader wird ja schließlich einmal pro Pixel aufgerufen, also > 1 Mio. mal pro Frame (!, nicht Sekunde). Die Grafikkarte verteilt die Arbeit des Fragmentshaders gleichmäßig auf die Shaderunits. Irgendwo im Wiki haben wir auch eine schöne Grafik, die das veranschaulicht. Leider finde ich sie gerade nicht.

Du musst die beiden Shader also zu einem machen. :)


Zuletzt geändert von mrtrain am Mi Aug 31, 2011 20:55, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mehrere Shader gleichzeitig
BeitragVerfasst: Mi Okt 20, 2010 14:52 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
wie sharkman schon angesprochen hat, kannst du auch mit mehreren Rendertargets arbeiten, dann kannst du erstmal das Licht für deine Pointlights mit dem einen Shader berechnen und speicherst die fertige Szene (nur das Licht, ohne Texturen oder sonst was) in eine Textur, danach machst du das gleiche mit deinen Projektoren und dem anderen Shader. Zum schluß brauchst du dann einen dritten shader, der beide Texturen bekommt, deine Szene zeichnet und die Lichtdaten aus den ersten beiden Texturen dazu rechnet.
Das kommt "deferred Rendering" schon sehr nahe. Nachteil bei dem Verfahren wäre, dass du die Geometrie zwei- bis dreimal zeichnen müsstest. Das wird aber beim richtigen deferred Rendering auch eingespart. Vielleicht würde dir das weiterhelfen um verschiedene Lichttypen mit einander zu kombinieren. Nebenbei bekäme man so auch noch andere Effekte schnell realisiert, andere allerdings (wie z.b. Alphatransparente Flächen) nur sehr schwer.

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mehrere Shader gleichzeitig
BeitragVerfasst: Mi Okt 20, 2010 17:56 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
andere allerdings (wie z.b. Alphatransparente Flächen) nur sehr schwer.

=> Inferred Lighting

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mehrere Shader gleichzeitig
BeitragVerfasst: Do Okt 21, 2010 08:16 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
@Coolcat:
Das Paper zu inferred Lighting hab ich schonmal durchgelesen, als du das vor einiger Zeit hier vorgestellt hast. Das fand ich schonmal sehr interessant. Aber ich denke ich werd in Zukunft erstmal lieber ohne transparente Flächen auskommen. Der Aufwand dafür ist in der Implementierung doch etwas viel, obwohl es doch schon verdammt reizt. Außerdem hab ich meine Bedenken, wie das mit Shadowmapping zusammen arbeiten soll.
Aber bevor ich solche Ansprüche stelle, versuch ich lieber mal endlich normales deffered Rendering auf die Beine zu stellen. Das schieb ich nun auch schon seit langer Zeit vor mir her, weil ich mir immer soviele Gedanken um Optimierungsarbeiten mache >_<" .

_________________
Klar Soweit?


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 23 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.009s | 16 Queries | GZIP : On ]