IDirect3DDevice9::Clear funktioniert nicht.
-
Entschuldigt einen Neuling, der eine wohl recht banale Frage hat. Ich wollte mich mal mit DirectX9 beschäftigen und habe gerade das Buch 3D-Spieleprogrammierung mit DirectX9 und C++ zur Hand. Ich bin kein Programmierneuling, die WinAPI habe ich schon im großen und ganzen durch und wollte mal was neues probieren.
Folgende Codezeile funktioniert nicht wie geplant:
HRESULT hResult; if ( FAILED ( hResult = pd3dDevice->Clear( 0 , NULL , D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER , D3DCOLOR_XRGB (0,0,63) , 1.0f , 0 ) ) ) { tbWriteToLog ( "Failed to Clear Backbuffer" ); }
die TriBase Engine schreibt nach jedem Rendern diesen Fehler in die Log-Datei. Ich habe persönlich keinen Schimmer was der Fehler ist. Ich programmiere alles mit eigenem Stil, das heisst ich schreibe die Beispiele nicht ab, sondern versuche alles so weit wie möglich selbstständig auf die Beine zu stellen. Dabei habe ich diese Zeile einfach mal auf meine Variablen umgestellt und trotzdem wird der Backbuffer (bzw. der Bildbuffer) nicht gelöscht. Das Dreieck rotiert wie es soll, es hat die Farbe die es soll, es hat die richtige Größe, nur es hinterlässt die zuletzt gerenderten Bilder auf dem Backbuffer. kann mir einer sagen, wie ich den Backbuffer in dieser Form leeren kann? Das Internet bietet hier wenig Ansatz, ich habe schon gesucht.
Danke im Voraus.
-
entschuldigt mich, das Buch hat da einen kleinen Fehler.
Ich habe keinen z-Buffer, das Beispiel im Buch auch nicht, trotzdem soll der gelöscht werden. das geht natürlich nicht. einfach den flag D3DCLEAR_ZBUFFER als funktionsparameter entfernen und alles läuft rund.
--CLOSED-- (wenn ich das überhaupt kann
)
-
Moinsen
..schwierig zu sagen. Musste mehr Code zeigen, die Zeilen an sich sehen nicht falsch aus.
Bevor Du aber jetzt direkt mehr Code postest, solltest Du auswerten, was Clear() zurückgibt. Dann mal hier gucken http://msdn.microsoft.com/en-us/library/windows/desktop/bb174352%28v=vs.85%29.aspx, dass sollte Dir Informationen darüber liefern, was Du vorher bei der Initialisierung falsch gemacht hast.
Spass haben
-
trotzdem danke
-
beim entwickeln immer direct3d auf debug stellen, und dort "break on error", "break on corruption" und "break on warning", das spart unheimlich viel zeit die man sonst mit dem suchen nach dummen fehlern verschwendet.