PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [DX8] ZBuffer auslesen


HajottV
2004-11-10, 12:53:12
Huhu,

ja, ich weiß, daß ..., ich will das aber trotzdem machen (DirectX8). Offenbar wird die einfachste Lösung von nVidia Karten nicht unterstützt (ZBuffer vom Typ D3DFMT_D16_LOCKABLE). :down:
Auf den getesten ATi-Karten funzte das problemlos. :up:

Ich habe mir schon einen Ast abgebrochen, um das auch unter nVidia Karten hinzubekommen. Eigenes Rendertarget anlegen... aber klappt alles nicht. :usleep:

Bevor ich jetzt hier auf völlig kranke Sachen zurückgreife (Szene rendern, ZTest umstellen und dann 65536 zum Bildschirm parallele Ebenen mit "Z-Farbe" rendern) :crazy: , wäre ich für einen praktikableren Tipp echt dankbar.

Das Auslesen kann gerne grottig lahm sein... das Ganze soll eh nur 1x gemacht werden.

Gruß

Jörg

Demirug
2004-11-10, 20:33:06
Da wirst du kein Glück haben weil nVidia dieses Format nicht unterstützt. Unter anderem damit man nicht auf solche Ideen kommt. ;)

HajottV
2004-11-11, 12:29:39
Da wirst du kein Glück haben weil nVidia dieses Format nicht unterstützt. Unter anderem damit man nicht auf solche Ideen kommt. ;)

Der Große Demirug hat zu mir gesprochen. Ich bin unwürdig. :massa:

Was mich wundert: unter DX7 geht das mit dem Locken von ZBuffern. Hab da ein Beispiel von der PowerVR Seite, das auch auf der 440MX hier läuft. Aber der D3D Teil von DX7 ist zum Weglaufen. Nee, wat ist dat für'n Gebastel im Vergleich zu DX8. Nuja, ich werde mir da wohl was Kreatives einfallen lassen müssen... so, wie oben beschrieben, geht es auf jeden Fall nicht. Soviel Füllrate hat keine GPU momentan.

Jörg

Demi ohne Keks
2004-11-11, 12:51:12
Der Große Demirug hat zu mir gesprochen. Ich bin unwürdig. :massa:

Was mich wundert: unter DX7 geht das mit dem Locken von ZBuffern. Hab da ein Beispiel von der PowerVR Seite, das auch auf der 440MX hier läuft. Aber der D3D Teil von DX7 ist zum Weglaufen. Nee, wat ist dat für'n Gebastel im Vergleich zu DX8. Nuja, ich werde mir da wohl was Kreatives einfallen lassen müssen... so, wie oben beschrieben, geht es auf jeden Fall nicht. Soviel Füllrate hat keine GPU momentan.

Jörg

Bei DX7 musste man das auch noch zwingend unterstützen ab DX8 ist es eine Option.

Was hast du den mit dem Z-Buffer vor?

Kannst du alternativ auch DX9 benutzen?

Auf welcher Hardware muss es am Ende lauffähig sein?

HajottV
2004-11-11, 14:04:28
Huhu!


1. Was hast du den mit dem Z-Buffer vor?
2. Kannst du alternativ auch DX9 benutzen?
3. Auf welcher Hardware muss es am Ende lauffähig sein?


1. Vorberechnetes Shadowmapping

2. Eher ungern... klar, mit DX9 kann ich per Pixelshader den ZWert als Farbe wegschreiben und dann den Framebuffer auslesen. (Oder gibt's mit DX9 eine elegantere Möglichkeit?) In meinem Fall wäre es aber vermutlich besser, einen primitiven rekursiven ZRenderer zu proggen (Grund: siehe unten).

3. Das Problem ist nicht so sehr die Hardware (die wird Highend sein), sondern eher, daß das Ganze am Ende in 4kb unterkommen soll.

Gruß

Jörg

Demirug
2004-11-11, 15:06:46
Huhu!



1. Vorberechnetes Shadowmapping

2. Eher ungern... klar, mit DX9 kann ich per Pixelshader den ZWert als Farbe wegschreiben und dann den Framebuffer auslesen. (Oder gibt's mit DX9 eine elegantere Möglichkeit?) In meinem Fall wäre es aber vermutlich besser, einen primitiven rekursiven ZRenderer zu proggen (Grund: siehe unten).

3. Das Problem ist nicht so sehr die Hardware (die wird Highend sein), sondern eher, daß das Ganze am Ende in 4kb unterkommen soll.

Gruß

Jörg

Und warum willst du die Shadowmap in den Hauptspeicher holen? Wenn die sowieso wieder zum rendern gebraucht wird würde ich sie im Grafikspeicher erzeugen und dort auch lassen.

Mit DX9 kann man dank FP-Texturen gerade im Bereich der Schattenverfahren einiges einfacher machen als mit DX8. Zudem sind sich DX8 und 9 so ähnlich das es eigentlich keinen Grund gibt heute noch DX8 zu nehmen.

HajottV
2004-11-11, 17:02:03
Und warum willst du die Shadowmap in den Hauptspeicher holen? Wenn die sowieso wieder zum rendern gebraucht wird würde ich sie im Grafikspeicher erzeugen und dort auch lassen.

Mit DX9 kann man dank FP-Texturen gerade im Bereich der Schattenverfahren einiges einfacher machen als mit DX8. Zudem sind sich DX8 und 9 so ähnlich das es eigentlich keinen Grund gibt heute noch DX8 zu nehmen.

Ich wollte die Shadowmap beim Setup mit den Texturen verrechnen, so daß ich keinen Pixelshader brauche. Vom Techlevel wäre DX8 eigentlich das, was ich brauche... bis auf das ZBufferproblem. Aber vermutlich hast Du recht... mal gucken, ob das Ganze noch läuft, wenn ich alle 8-ten durch 9-nen ersetze. :wink:

Gruß

Jörg

Coda
2004-11-12, 10:18:25
Du kannst auch alle DX8 Features mit DX9 abdecken.
Es gibt wirklich einen Grund noch 8 zu benützen.

HajottV
2004-11-12, 17:49:46
Du kannst auch alle DX8 Features mit DX9 abdecken.
Es gibt wirklich einen Grund noch 8 zu benützen.

Das ist schon klar, und ich weiß auch, daß ich die ZBuffer Sache mit Pixelshader und Float RenderTarget lösen kann. Es geht mir aber um eine kompakte Lösung, die man in maximal 200 Bytes unterbringen kann, denn mehr kostbare Bytes sind die Schatten nicht wert. :rolleyes:

Hab aber jetzt eine einfache Lösung, die mit DX8 geht, und mit der ich vermutlich noch unter 200 Bytes bleiben werde (die Umsetzung nach Assembler kommt erst ganz am Ende, aber abschätzen kann ich das ja jetzt schon). :biggrin:

Gruß

Jörg