www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheDirectX-Forum

Stormrider

Gepostet:
09.04.2005 00:01

C# DirectX 9.0 DirectDraw Surface-Fehler  
Ich hab' damals (2004) in Visual Basic 6.0 mit DirectX 8.0 ein kleines 2D-Autorennspiel gebastelt, das leider nicht mehr unter XP lief. Nun hab ich mich endlich mal hingesetzt und es mit C# und DirectX 9.0 für WindowsXP neu gebaut.

Leider hat nach einer gewissen Zeit das Spiel zunächst aufgehört den Text auszugeben.
Ich erhielt eine Microsoft.DirectX.DirectDraw.CannotCreateDeviceContextException.
Diesen Fehler konnte ich beheben, indem ich m_HauptDevice.RestoreAllSurfaces();
verwendete und dann das Haupt, sowie das Hilfssurface (eine Art Backbuffer) Disposed und auf null gesetzt habe
und darauf hin erneut geladen habe.

Für die Ausgabe der Bilder verwende ich Microsoft.DirectX.DirectDraw.Surface
und dann DrawFast().

Nun ist das Spiel zwar nicht mehr abgestürzt und brachte auch keinerlei Fehlermeldungen mehr, jedoch gab es nach einiger Zeit, zumeist nach einem Levelwechsel Bildfehler. Die Surfaces wurden mit DrawFast() nicht mehr korrekt ausgeben. Es sah aus, als würde man versuchen aus dem Grafikspeicher zu lesen, ohne den Pitchwert zu beachten.
Ich erstelle jetzt bei jedem Levelsprung, sowie bei einer SurfaceLostException das HauptDevice, das HauptSurface, das HilfsSurface und alle Bilder neu. Nun tritt der beschriebene Fehler zwar seltener auf, jedoch war es mir immer noch nicht möglich, ihn zu verhindern.

Leider scheint das Internet DirectDraw verbannt zu haben. Doch da ich nur dieses 2D Spiel konvertieren möchte ohne auf Direct3D umzusteigen (was dann mein nächstes Ziel sein wird) würde ich mich sehr freuen, falls mir jemand helfen könnte.
Zum Seitenanfang    
 
Stormrider

Gepostet:
09.04.2005 16:16

   
Ich wollt euch grad mal n paar Screenshots schicken.
Geht aber nicht. Wenn ich normal Screenshots vom Spiel mache: alles Super, aber sobald der Bildfehler auftritt und ich versuch einen Screenshot zu machen bringt er mir die Fehlermeldung, dass mein Arbeitsspeicher für das Bild nicht ausreicht und ich ihn bitte leeren soll!! Bin jetzt erst recht verwirrt..
Zum Seitenanfang    
 
Stormrider

Gepostet:
10.04.2005 11:19

   
Ähm war n Fehler mit Pointern... Ich übergeb vor DrawText noch n Fonthandle an das Surface, damit es die richtige Schriftart einstellt. nur leider kümmert sich da der Garbage-Collektor nicht mehr drum >:(
Folglich wird der RAM immer voller, bis das Spiel abstürzt....
Zum Seitenanfang    
 
Jammni

Gepostet:
10.04.2005 16:53

   
also hast du den fehler selbst gefunden ;-)
Zum Seitenanfang Homepage   ICQ