D3D9: Fehler beim Herunterfahren bei Present()
-
Also, ich bin gerade dabei, eine D3D-Anwendung zu schreiben, hab einfach mal eine Debug-Sitzung gestartet, und immer wenn ich die Anwendung beenden wollte, kam eine Fehlermeldung "Benutzerdefinierter Haltepunkt aufgerufen etc. blabla". Dieser Fehler tritt während des Aufrufs von IDirect3DDevice9::Present auf, und er ist verschwunden, seit ich direkt vor dem Present-Aufruf auf gewünschte Beendigung prüfe und die Schleife gegebenenfalls abbreche.
Das Seltsame ist: Wenn der Benutzer per Tastendruck das Beenden der Anwendung anfordert, wird zunächst nur ein internes Flag gesetzt, und dieses wird in der Gameloop (als Bedingung für die while-Schleife) geprüft. Das heißt, an dieser Stelle, wo Present aufgerufen wird, dürfte das Direct3D Device noch voll funktionstüchtig sein. Was könnte hier der Fehler sein?Oh, und für alle Fälle poste ich mal die Gameloop ;c)
while ((ProcessMessages() == S_OK) && (!WantShutdown())) { hr = CheckDeviceLost(); QueryPerformanceCounter(&now); m_fElapsedTime = (now.QuadPart - last.QuadPart) * fFactor; last.QuadPart = now.QuadPart; hr = m_pCallback->FrameMove(m_fElapsedTime); hr = m_pDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, m_dwClearColor, 1.0f, 0); if (SUCCEEDED(m_pDevice->BeginScene())) { m_pCallback->Render(); m_pDevice->EndScene(); } // Hier der neue Test, ohne den in Present der Fehler auftritt if (WantShutdown()) break; m_pDevice->Present(NULL, NULL, NULL, NULL); }
Nachtrag: Hmmm... Jetzt tritt der Fehler wieder auf ;c(
[ Dieser Beitrag wurde am 27.02.2003 um 19:39 Uhr von OregonGhost editiert. ]
-
"Benutzerdefinierter Haltepunkt aufgerufen etc. blabla"
Das hört sich eher nach einem Fehler des Debuggers an! Wo hast du denn einen Haltepunkt gesetzt? Funktioniert es, wenn du das Programm ganz normal startest? Wie sehen ProcessMessages und WantShutdown aus?
-
Original erstellt von flenders:
[quote]"Benutzerdefinierter Haltepunkt aufgerufen etc. blabla"Das hört sich eher nach einem Fehler des Debuggers an! [/QUOTE]
Benutzerdefinierte Haltepunkt ist IMHO ein "int 3", schon möglich, das im in der DXSDk irgendwo einer eingebaut ist, wenn man was falsch macht. Geben die DX Debug Runtimes denn irgendwelche Ausgaben?
-
*pfeif und nach oben schau*
Konnte ja keiner ahnen, dass mit F12 der Debugger angehalten wird, weil damit wird nämlich auch mein Programm beendet Und das erklärt auch, warum ich für den Haltepunkt keinen Kontext hatte (immer nur NTDLL)
Aber egal, bei der Gelegenheit ist mein Code wieder etwas übersichtlicher und fehlerloser geworden.