Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
fowly JLI'ler
Anmeldedatum: 25.01.2004 Beiträge: 196 Wohnort: Detmold - NRW Medaillen: Keine
|
Verfasst am: 07.09.2004, 19:45 Titel: Ich glaube ich werde verrückt... |
|
|
Ich glaube einige kennen das Problem: m_lpD3DDevice->RESET();
( SORRY KEIN CODE, ERST MORGEN... )
Ich rufe es immer auf, wenn nach Device->Present rauskommt dass das Device Verloren wurde, also zum Beispiel wenn die Anwendung minimiert wurde. ALLE TEXTUREN SIND IM MANAGED-POOL ANGELEGT... Also brauchen diese nicht gelöscht zu werden. Also WARUM???? kommt bei mir immer "Invalid Call"???
Ich hatte es bislang immer so, dass ich, wenn das Device mal wieder weg war das alte gelöscht und ein neues erstellt habe (und alle texturen neu geladen usw.). komischerweise geht das ganze nur so um die sieben mal, danach kommt auch bei der CreateDevice() Methode ein "Invalid Call". Weiß jemand ob man ein Device nur begrenzt oft in einer Anwendung erstellen kann? Wäre doch eigentlich unsinnig... Und, wie kann man das ändern?
Wenn mir einer die erste oder die zweite Frage beantworten kann wäre ich überglückglich... _________________ <-- Noch in der Entwicklungsphase: http://www.uranus-entertainment.de -->
Das Spiel zu unserer Schule:
http://www.grabbe-game.de |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 07.09.2004, 20:04 Titel: |
|
|
Das Device kann sich in einem Zustand befinden, in dem es noch nicht wieder hergestellt werden kann. Schau mal in der Hilfe zu: TestCooperativeLevel();
while(D3DERR_DEVICELOST == TestCooperativeLevel())
{
Sleep(1000);
}
Reset();
C. |
|
Nach oben |
|
|
fowly JLI'ler
Anmeldedatum: 25.01.2004 Beiträge: 196 Wohnort: Detmold - NRW Medaillen: Keine
|
|
Nach oben |
|
|
fowly JLI'ler
Anmeldedatum: 25.01.2004 Beiträge: 196 Wohnort: Detmold - NRW Medaillen: Keine
|
Verfasst am: 09.09.2004, 13:04 Titel: |
|
|
*push*
kann mir keiner helfen? hat sich einer schonmal das beispielprog. gezogen (nur so 300 kb) und kann mir sagen obs bei ihm auch nicht klappt, oder doch? _________________ <-- Noch in der Entwicklungsphase: http://www.uranus-entertainment.de -->
Das Spiel zu unserer Schule:
http://www.grabbe-game.de |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 10.09.2004, 20:20 Titel: |
|
|
Aus meinem Huge Book alike Tutorial:
Zitat: | Verlieren des Devices
Normalerweise läuft alles korrekt, alles funktioniert super. Grafik wird gezeichnet, Speicherresourcen werden im Speicher behalten. Doch es kann passieren, dass das Device verloren wird.
Das kann daran liegen, dass eine andere Anwendung die Kontrolle an sich gerissen hat und den ganzen Speicherbereich verworfen hat (alle 0 und 1 anders angeordnet hat, argh das reinste Chaos!!), das alle Grafikdaten von deiner Anwendung enthalten hat. Aber das lassen wir uns nicht gefallen und fordern es zurück!
Nun wie stellt man fest, dass es überhaupt verloren wurde? Einfach indem man die Rückgabewerte überprüft. Wenn wir später Grafik darstellen werden und von der Funktion die wir benutzen den Rückgabewert überprüfen. Sollte dieser D3DERR_DEVICELOST zurückgeben ist das was wir befürchtet haben eingetreten.
Die Kontrolle wiederzuerlangen ist leichter getan als gesagt!
HRESULT IDirect3DDevice9::Reset(
D3DPRESENT_PARAMETERS *pPresentationParameters);
Der einzige Parameter der übergeben wird ist die Presentation Struktur die wir schon übergeben haben, als wir das Device erstellt haben:
// g_pD3DDevice = pre-initialized Device Objekt
// d3dpp = pre-setup Presentation Struktur
g_pD3DDevice->Reset(&d3dpp);
Dies ist eine Zauberfunktion das sie alles nötige tut um das Device wiederherrzustellen. Sie löscht aber auch alle Ressourcen, was aber gar nicht so schlimm ist, das diese wahrscheinlich als das Device verloren wurde schon längst wegwaren. Auf jeden Fall musst du alle Ressourcen neuladen und auch die Device States. |
Der Managed 3D Pool verwaltet nur die Daten, aber wenn sie weg sind sind sie weg AFAIK...bitte korrigiert mich falls nötig _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
fowly JLI'ler
Anmeldedatum: 25.01.2004 Beiträge: 196 Wohnort: Detmold - NRW Medaillen: Keine
|
Verfasst am: 11.09.2004, 17:38 Titel: |
|
|
ja, das hab ich ja auch alles gemacht, aber trotzdem kommt immer invalid call -> siehe mein tolles beispiel...
wenn es bei einem von euch klappt, kann er mir dann nicht irgendwie mal ne kleine anwendung schicken, vielleicht seh ich dann was ich falsch gemacht habe... _________________ <-- Noch in der Entwicklungsphase: http://www.uranus-entertainment.de -->
Das Spiel zu unserer Schule:
http://www.grabbe-game.de |
|
Nach oben |
|
|
|