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: 15.04.2004, 20:59 Titel: Fehler bei Release? |
|
|
Hi,
bei mir kommt es (manchmal) zu einem Fehler (und dann zum Absturz) wenn ich eine Textur (LPDIRECT3DTEXTURE9) mit ->Release wieder freigebe. Soweit ich weiß werden die Texturen mit new erzeugt und delete wieder gelöscht (mit Create und Release). Nun meine Frage: kann es sein, dass es zu einem Fehler kommen kann, wenn ich eine Textur freigebe die während dem selben schleifendurchlauf auch benutzt wird (zum beispiel mit Sprite->Draw)? Ich hoffe dass man meine Erklärung verstehen kann, ist blöd geschrieben... _________________ <-- Noch in der Entwicklungsphase: http://www.uranus-entertainment.de -->
Das Spiel zu unserer Schule:
http://www.grabbe-game.de |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 15.04.2004, 21:08 Titel: |
|
|
Wenn ich das jetzt richtig verstanden habe, fürt das auf jeden Fall zu Problemen.
Wenn du die Textur releast, steht sie ja nicht mehr zur Verfügung(d.h. AFAIK ungültiger Zeiger).
Wenn du dann versuchst, darauf zuzugreifen, gibt es logischerweise Zugriffsverletzungen _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
fowly JLI'ler
Anmeldedatum: 25.01.2004 Beiträge: 196 Wohnort: Detmold - NRW Medaillen: Keine
|
Verfasst am: 15.04.2004, 21:38 Titel: |
|
|
es ist ja nicht so, dass die textur erst released wird und dann mit sprite->draw drauf zugegriffen wird, ich hab mal ein bild ums nochmal zu verdeutlichen...
das ganze wird natürlich nur einmal ausgeführt nach release wird draw also nicht nochmal ausgeführt... _________________ <-- Noch in der Entwicklungsphase: http://www.uranus-entertainment.de -->
Das Spiel zu unserer Schule:
http://www.grabbe-game.de |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 15.04.2004, 22:07 Titel: |
|
|
Mmmh. Weiß ich jetzt auch nicht.
Wenn du ein "Minimal-Beispiel" zur Verfügung stellen könntest, könnten wir dir bestimmt besser helfen. |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 16.04.2004, 05:46 Titel: |
|
|
Wenn er beim freigeben der Textur abstürzt:
Hast du auch vorher geprüft, ob der Zeiger auf die Textur = NULL ist, und nah dem freigeben auf NULL gesetzt? Im den Codebeispielen aus dem Buch wurde das immer bei jedem DirectX Objekte gemacht, und ich mach es auch und ich hatte noch nie Probleme. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 16.04.2004, 10:04 Titel: |
|
|
Bitte korrigiert mich, wenn ich jetzt falsch liege, aber BeginScene() bereitet doch AFAIK die Szene irgendwie vor.
D.h. höchstwahrscheinlich werden da die Texturen DX irgendwie übergeben oder bereitgestellt.
Da EndScene() das Gegenstück dazu ist, muss die Textur logischerweise noch gültig sein.
Aber ist es denn ein Problem, die Textur erst nach EndScene zu releasen? _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 16.04.2004, 10:21 Titel: |
|
|
Ja stimmt. die Textur "released" man erst beim deinitialisieren des Programms. |
|
Nach oben |
|
|
fowly JLI'ler
Anmeldedatum: 25.01.2004 Beiträge: 196 Wohnort: Detmold - NRW Medaillen: Keine
|
Verfasst am: 16.04.2004, 18:40 Titel: |
|
|
@KI klar, normalerweise wird die textur erst beim beenden des spiels released.
ich wollte aber, um grafikspeicher zu sparen nicht mehr benötigte texturen wieder löschen, zum beispiel vom spielmenü. erst wenn das menü wieder angezeigt wird, werden die texturen wieder hinzugefügt. nur das es da (manchmal) abstürzt... muss man vor dem releasen vielleicht erst endscene() aufrufen? _________________ <-- Noch in der Entwicklungsphase: http://www.uranus-entertainment.de -->
Das Spiel zu unserer Schule:
http://www.grabbe-game.de |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 16.04.2004, 19:17 Titel: |
|
|
wenn es wircklich daran liegt, das du das zwischen BeginScene() und EndScene() nicht machen darfst:
BeginScene() und EndScene() sollten nicht die komplette Spieleschleife umgeben, sondern nur den Teil, in dem gerendert wird:
Code: |
Gameloop()
{
//Verarbeitung der Daten
GetInput();
switch(Status)
{
case 1:
Menu.Aktion();
case 2:
Spiel.Aktion;
}
//Rendern der Scene
BeginScene();
switch(Status)
{
case 1:
Menu.Show();
case 2:
Spiel.Show();
}
EndScene();
}
|
So mach ichs. Die Texturen würden dann im Aktion() Teil gelöscht. Dort finden auch alle Berechnungen, Kollsiosnabfrage und alles ander was nicht Render ist statt. In den Render Teil wird wirckloich nur angezeig. Damit sollte es möglich sein die Texturen zu releasen.
Also: Berechnungen und sonstiges aus dem Renderteil raushalten! _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
|