Textur aus Speicher entfernen

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

EPS

Betreff: Textur aus Speicher entfernen

BeitragDi, Nov 14, 2006 22:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi zusammen, hab grad ein kleines Problem.

Ich hab ein paar Meshs mit Texturen. Jetzt will ich beides wieder löschen (FreeEntity und FreeTexture). Soweit so gut.

Wenn ich mir nun aber vor dem Laden, nach dem Anzeigen und nach dem Löschen die Werte von AvailVidMem bzw. TotalVidMem anzeigen lasse, muß ich feststellen das der Speicher nicht freigegeben wurde.

Wie kommt das?
mGUI - Graphical User Interface für Blitz3D...Informationen gibt es hier

Man kann sich öfter als zweimal im Leben halb tot lachen.

Christoph

BeitragMi, Nov 15, 2006 18:37
Antworten mit Zitat
Benutzer-Profile anzeigen
AvailVidMem bzw. TotalVidMem ist vor dem Laden der Textur gleich wie nach dem Laden. Ich vermute mal schwer, das Texturen nicht da dazuzählen, oder dass die Funktion ungefähr so aussieht:

Zitat:
function Availvidmem()
return 4562546
end function

Wink

EPS

BeitragMi, Nov 15, 2006 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Und woher kommen dann die 14MB Speicherverlust nach dem Laden bzw. Anzeigen der Texturen? Oder anders gefragt, wie kann ich dann feststellen wieviel Speicher schon verbraucht ist durch geladene Texturen? Was wiederum die Frage aufwirft wo denn die geladenen Texturen im Speicher abgelegt werden.
mGUI - Graphical User Interface für Blitz3D...Informationen gibt es hier

Man kann sich öfter als zweimal im Leben halb tot lachen.

Christoph

BeitragMi, Nov 15, 2006 19:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Also bei mir verändert sich der Rückgabewert während des Programmes, das ich geschrieben habe, nie.

EPS

BeitragMi, Nov 15, 2006 19:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann ist es bei dir noch komischer als bei mir Wink
mGUI - Graphical User Interface für Blitz3D...Informationen gibt es hier

Man kann sich öfter als zweimal im Leben halb tot lachen.

Blitzcoder

Newsposter

BeitragMi, Nov 15, 2006 20:06
Antworten mit Zitat
Benutzer-Profile anzeigen
So, ich habe eben ein kleines Testprogramm geschrieben:
Code: [AUSKLAPPEN]

Graphics3D 200,50,0,2
AppTitle "VidMem"
mem=availvidmem()
tex=createtexture(1024,1024)
SetBuffer TextureBuffer(tex)
Oval 0,0,1024,1024
mem2=availvidmem()
FreeTexture(tex)
mem3=availvidmem()
SetBuffer backBuffer()
Print "Anfang: "+mem
Print "Mit Tex.: "+mem2
Print "Nach löschen: "+mem3
Flip
WaitKey:End


Er spukt immer exakt den gleichen Wert.

Hier hingegen:
Code: [AUSKLAPPEN]
Graphics3D 200,50,0,2
AppTitle "VidMem"
cam=createcamera()
cube=createcube()
mem=availvidmem()
tex=createtexture(1024,1024)
SetBuffer TextureBuffer(tex)
Oval 0,0,1024,1024
EntityTexture cube,tex
RenderWorld()
mem2=availvidmem()
FreeTexture(tex)
mem3=availvidmem()
SetBuffer backBuffer()
Print "Anfang: "+mem
Print "Mit Tex.: "+mem2
Print "Nach löschen: "+mem3
Flip
WaitKey:End


Sieht man, dass er etwas geladen hat. Kommentiert man aber das renderworld() aus, sagt er immer noch das gleiche:
Code: [AUSKLAPPEN]

Graphics3D 200,50,0,2
AppTitle "VidMem"
cam=createcamera()
cube=createcube()
mem=availvidmem()
tex=createtexture(1024,1024)
SetBuffer TextureBuffer(tex)
Oval 0,0,1024,1024
EntityTexture cube,tex
;RenderWorld()
mem2=availvidmem()
FreeTexture(tex)
mem3=availvidmem()
SetBuffer backBuffer()
Print "Anfang: "+mem
Print "Mit Tex.: "+mem2
Print "Nach löschen: "+mem3
Flip
WaitKey:End


Ich denke da speichert er nur den letzten Frame, da er ihn ja immer wieder zeigen muss, um auf die Hz-Zahl des Monitors zu kommen.

MfG Blitzcoder
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________
|°°°°°°°°°°°°°°||'""|""\__,_
|______________ ||__ |__|__ |)
|(@) |(@)"""**|(@)(@)****|(@)
 

Dreamora

BeitragMi, Nov 15, 2006 20:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein Grund für unterschiede beim Speicherverbrauch:

Der FrontBuffer und jeder der bis zu 8 Backbuffer (wenn deine GPU so schnell ist) braucht height*width*depth Bytes an speicher. Bei 1280x1024 sind das über 4 MB pro Backbuffer.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

EPS

BeitragMi, Nov 15, 2006 20:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Heißt das das Texturen also gar nicht im VidMem abgelegt werden? In dem Fall kann es einem bei wenigstens 512MB RAM (theoretischer Wert) heutzutage ja fast egal sein wieviele Texturen man lädt.
mGUI - Graphical User Interface für Blitz3D...Informationen gibt es hier

Man kann sich öfter als zweimal im Leben halb tot lachen.
 

Dreamora

BeitragMi, Nov 15, 2006 20:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Jain
Zum Zeitpunkt des Rendern muss alles in den VRAM passen, was auf dem Screen ist. (VRAM + AGP Block + Hypermemory falls ATI) Sonst wirst du nen MAV bekommen.

Hinzu kommt, das der Transfer RAM -> VRAM Zeit kostet, welche du beim rendern verlieren wirst, wenn es durchgehend passiert.

Schraub lieber die Texturen auf eine niedrigere Qualität (nicht mit ScaleTexture, da das die Texturgrösse nicht ändert!) so das sie bei schwachen systemen reinpassen. Denn wenn die Grafikkarte so wenig VRAM hat, wird sie sich vermutlich auch nicht über zu grosse Texturen freuen ...
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

EPS

BeitragMi, Nov 15, 2006 21:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Jep, macht schon Sinn was du schreibst. Leider kann ich die Quali nicht runterschrauben, da es sich um ne SpriteEngine und somit auch um Bilder handelt. Aber danke für die Aufklärung, so bin ich zumindestens schlauer was die Geschichte mit dem AvailVidMem angeht.
mGUI - Graphical User Interface für Blitz3D...Informationen gibt es hier

Man kann sich öfter als zweimal im Leben halb tot lachen.

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group