Direct3D9: DrawIndexedPrimitive nach Device Reset



  • Hi,

    ich schlage mich derzeit mit DirectX rum und habe mich mit dem Device Lost Problem beschäftigt. Nach langem Lesen und einigem Rumprobieren habe ich es jetzt geschafft, dass die Sprites und die Fonts "wiederhergestellt" werden. Nur noch die Funktion DrawIndexedPrimitive wirft eine Ausnahme:

    Eine Ausnahme (erste Chance) [...]: Microsoft C++-Ausnahme: long an Speicherposition 0x0038b51c..
    Eine Ausnahme (erste Chance) [...]: Microsoft C++-Ausnahme: Exception an Speicherposition 0x0038b780..
    

    Die Funktion stolpert ja wohl über ein long. Also hab ich die Zahlen überprüft, indem ich bei der Erstellung der Vertex- und Index-Buffer das D3DUSAGE_WRITEONLY wegfallen ließ und danach nach dem Reset den Inhalt der beiden Buffer auf die Debugausgabe schreiben ließ. Schön und gut, funktioniert einwandfrei und ich kam zu dem Schluss, dass wenigstens die Positionen der Vertices (und ich gehe davon aus, damit dann auch der ganze Rest) und die Indices alle stimmten.
    Jetzt stehe ich auf dem Schlauch. Die Funktion liefert lediglich ein D3DERR_INVALIDCALL und das sagt mir ja jetzt nicht ultra viel und leider spuckt mir die Debugversion von DirectX auch nicht mehr aus 😞

    Kann mir da bitte jemand weiterhelfen?

    Danke! 😃



    1. Welche D3D Version?
    2. Was sagt die D3D-Debug Runtime mit hochgedrehtem Debug-Level und "maximum validation"?


  • hustbaer schrieb:

    1. Welche D3D Version?

    Steht im Titel.



  • Es hat sich erledigt. Ich hab mich heute noch mal ein bisschen schlau gemacht und hab mich nach einer Lösung auf meine Frage "Warum bekomme ich eigentlich soo wenig Debuginformationen" gemacht. Natürlich habe ich eine gefunden ;).
    Ich hatte wohl beim Installieren des DirectX SDKs die Installation des Control Panels ausgeschaltet, was natürlich total doof war, wie ich jetzt weiß.^^

    Nun nach einer erneuten Installation des SDKs und den passenden Einstellungen hab ich auch endlich mehr Informationen erhalten und konnte dem Fehler endlich auf den Grund gehen. Eigentlich sind es sogar zwei. 😃
    Die erste Ausnahme wurde geworfen, da ich ein Licht mit GetLight() abgefragt habe und dieses dann mit SetLight() wieder zugewiesen habe. Wie ich jetzt weiß, verfallen ja auch die Lichter beim Reset.
    Die zweite Ausnahme wurde geworfen, weil ich vergessen habe, dass DirectX nach einem Reset ja nicht mehr weiß, welchen Index- und welchen Vertexbuffer es verwenden soll. 👍

    Man irgendwo ziemlich dämliche Fehler, auf die ich eigentlich selber hätte kommen können. 🙄

    Na ja, jetzt ist es jedenfalls behoben und ich hab auch fleißig den Vollbildmodus durch Alt+Tab oder Strg+Alt+Entf verlassen und dann wieder geöffnet. Jetzt hab ich nur noch ein kurzes grünes Flimmern, aber meine fünf Würfel funktionieren wieder. 🤡


Anmelden zum Antworten