Textur aus Speicher entfernen
Übersicht

![]() |
EPSBetreff: Textur aus Speicher entfernen |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
![]() |
EPS |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also bei mir verändert sich der Rückgabewert während des Programmes, das ich geschrieben habe, nie. | ||
![]() |
EPS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dann ist es bei dir noch komischer als bei mir ![]() |
||
mGUI - Graphical User Interface für Blitz3D...Informationen gibt es hier
Man kann sich öfter als zweimal im Leben halb tot lachen. |
![]() |
BlitzcoderNewsposter |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group