2 Shader bei einem Modell benutzen

FSA

Erfahrenes Mitglied
Hallo. Vorab ein paar Infos:
DirectX9.0c, Shaderversion 2.0.
Mein Problem besteh darin für DrawIndexedPrimitive 2 Shader zu benutzen. Ich dachte mir so:
C++:
Effect1->Begin();
Effect2->Begin();
Effect1->Pass(0);
Effect2->Pass(0);
DrawIndexedPrimitive(...);
Effect1->End();
Effect2->End();
So funktioniert aber leider nur der erste Shader :/ Ich verwende eine Effectklasse meiner Engine. Deswegen nu Start, Pass und End. Das ziel ist eigentlich ein Materialshader(Effect1) und dann der Phongbeleuchtungsshader(Effect2) zusammen zu verwenden und dann das Objekt mit der Textur die von Effect1 und 2 verändert wurde zu rendern.
Danke im Voraus :)
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

wie du schon bemerkt hast, kann pro Pipeline-Stage höchstens ein Shaderprogramm aktiv sein. Dir bleiben im Grunde zwei Möglichkeiten: entweder du zeichnest das Modell in zwei Passes, also in etwa so:
C++:
Effect1->Begin();
Effect1->Pass(0);
DrawIndexedPrimitive(...);
Effect1->End();

Effect2->Begin();
Effect2->Pass(0);
DrawIndexedPrimitive(...);
Effect2->End();
Im zweiten Pass musst du Blending aktivieren, damit sich am Ende die richtige Farbe ergibt.

Die zweite Möglichkeit wäre, die Berechnungen beider Shader in einen Shader zu kombinieren. Dann kommst du mit nur einem Pass aus.

Grüße,
Matthias
 
  • Gefällt mir
Reaktionen: FSA
Danke:) Aber dennoch stehe ich etwas auf der Leitung -.-
Also effect 1 benutzen und dann das selbe nochmal mit Blending und Effect2 Rendern?
 
OK also mein Code:
C++:
D3D.SetRS(D3DRS_ALPHABLENDENABLE,TRUE);
D3D.SetRS(D3DRS_SRCBLEND,D3DBLEND_ONE);
D3D.SetRS(D3DRS_DESTBLEND,D3DBLEND_ZERO);
Object->Render(effect);

D3D.SetRS(D3DRS_SRCBLEND,D3DBLEND_ZERO);
D3D.SetRS(D3DRS_DESTBLEND,D3DBLEND_SRCCOLOR);
Object->Render(effect2);
Leider sehe ich nur den letzten Effekt: Meine Blendeinstellungen scheinen nicht korrekt zu sein :(
Danke
 
Zuletzt bearbeitet von einem Moderator:
Zurück