PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit DirectX: Effecte & Shader


Corrail
2006-04-20, 12:33:48
Hallo!

Ich bin gerade mitten in meinen Arbeiten für meine Engine und hab ein Problem mit Effecten. Und zwar würde ich gern über Effect gewissen Parameter sharen. Transformationsmatrizen oder Shadow Maps usw. Dazu sind mir zwei Lösungen eingefallen: über das shared Keyword im Effect oder über Registerbinding.

Bei der Lösung mim shared Keyword hab ich das so gemacht: Ich erzeuge mir einen Dummy-Effect mit allen shared Parametern und wenn ich z.B. die Matrizen neu berechnet habe, dann setze ich sie bei diesem Dummy Effect die Matrizen und es sollte über alle anderen Effekte (erzeugt mit dem gleichen EffectPool) übernommen werden. Das funktioniert auch ganz gut, gibt es da Rendering Artefekte. Und zwar springen ein bis zwei Dreiecke herum. Ein Eckpunkt vom Dreieck wird jedes ca. 5te Frame in die linke obere Bildschirmecke abgebildet. Wenn ich die Matrizen direkt bei den Effekt setze, mit dem ich das Objekt rendere, hab die diese Probleme nicht.

Bei der Lösung mit dem Register Binding bekomm ich die Werte nicht in den Shader. Ich hab folgenden Pixel Shader:

float4 blub : register(c40);
float4 AmbientPS() : COLOR
{ return blub; }

Wenn ich jetzt allerdings ein float array mit device->SetVertexShaderConstantF oder SetPixelShaderConstantF auf das Register 40 setze, bekomm ich die Werte nicht als Farbe gerendert. Es bleibt alles Schwarz.

Ich bin für jede Hilfe Dankbar!!

[EDIT] Ok, das Problem mit den shared Parametern dürfte wo anders liegen...

[EDIT2] Das Problem mit den shared Parametern lag wirklich wo anders... *kopfamtischhau* Jetzt aber eine andere Frage: wie managed DirectX diese shared Parameter? Wenn ich einen Parameter shared, legt DirectX den dann auf die gleichen Register? Oder setzt DirectX den Parameter für jeden Effect im EffectPool neu?