| 
			
				|  | JLI Spieleprogrammierung 
 
 |  
 
	
		| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |  
		| Autor | Nachricht |  
		| RayJunx JLI'ler
 
 
 Alter: 44
 Anmeldedatum: 16.01.2006
 Beiträge: 130
 Wohnort: Bayern
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 16.01.2006, 21:34    Titel: Texturen wieder aus dem Ressourcen Manager entfernen |   |  
				| 
 |  
				| Habe die Ehre, habe ein Problem. Verwendete die RessourcenManager Klasse aus dem Buch dieser Seite als Verwalter für die Sprite Ressourcen. Geht auch wunderbar. Nur würde ich gerne während des Programmablaufes Texturen wieder entfernen damit ich Platz für neue auf meiner Grafikkarte habe ( Große fette endgegner animieren die danach nie wieder gebraucht werden
  ) Wie mach ich das? anbei der Codeauszug der RessourcenManager Klasse. Ansich könnte man da jetzt sicher leicht ergänzen welche Klassenfunktion noch fehlt und wie sie im detail aussieht, wenn man sich denn damit auskennen würde. Kann mir jemand helfen?
 
 Gruß, RayJunx
 
 
  	  | CPP: |  	  | #include "ResourceManager.h" #include "global.h"
 
 // Konstruktor - Initialisierungen
 CResourceManager::CResourceManager()
 {
 m_lpD3DDevice = NULL;
 }
 
 // Destruktor - Freigabe der Texturen aus der Map
 CResourceManager::~CResourceManager()
 {
 map<string,LPDIRECT3DTEXTURE9>::iterator it;
 
 for(it = m_MapTextures.begin(); it != m_MapTextures.end();it++)
 {
 (it->second)->Release();
 }
 }
 
 // Initialisierung des Ressourcenmanagers
 void CResourceManager::Init(LPDIRECT3DDEVICE9 lpD3DDevice)
 {
 m_lpD3DDevice = lpD3DDevice;
 }
 
 
 // Textur suchen und ggf. zurückgeben
 LPDIRECT3DTEXTURE9 CResourceManager::GetTexture(LPCSTR lpTextureName)
 {
 // Iterator für die Suche in der Map
 map<string,LPDIRECT3DTEXTURE9>::iterator result;
 
 // Nach dem Namen der Textur suchen
 result = m_MapTextures.find(lpTextureName);
 
 // wenn der Name nicht in der Map vorhanden ist
 // NULL zurückgeben
 if(result == m_MapTextures.end())
 {
 return NULL;
 }
 
 // sonst den Zeiger auf die Textur zurückgeben
 return result->second;
 }
 
 // Textur hinzufügen
 void CResourceManager::AddTexture(LPCSTR lpFileName)
 {
 // testen, ob die Textur bereits vorhanden ist
 LPDIRECT3DTEXTURE9 lpTexture = GetTexture(lpFileName);
 
 // wenn sie nicht vorhanden ist, wird sie wie
 // gewohnt erzeugt
 if(!lpTexture)
 {
 D3DXIMAGE_INFO ImageInfo;
 D3DXGetImageInfoFromFile(lpFileName,&ImageInfo);
 
 D3DXCreateTextureFromFileEx(m_lpD3DDevice,
 lpFileName,
 ImageInfo.Width,
 ImageInfo.Height,
 1,0,
 D3DFMT_UNKNOWN,
 D3DPOOL_MANAGED,
 D3DX_FILTER_NONE,
 D3DX_FILTER_NONE,
 0,0,0,
 &lpTexture);
 
 // und in die Map unter ihrem Namen eingefügt
 m_MapTextures[lpFileName] = lpTexture;
 }
 }
 
 
 | 
 
 EDIT(Kampfhund): code- durch cpp-Tags ersetzt.
 _________________
 Just a Freak
 |  |  
		| Nach oben |  |  
		|  |  
		| Patrick Dark JLI Master
 
  
 
 Anmeldedatum: 25.10.2004
 Beiträge: 1895
 Wohnort: Düren
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 16.01.2006, 21:38    Titel: |   |  
				| 
 |  
				| Du benutzt std::map<T>. Dieser Kontainer hat die Funktion find welche Dir den Iterator auf das gefundene Objekt wiedergibt, ansonsten 0. 
 Dann löschst Du diesen iterator mit erase und setzt mit dem Rückgabewert den euen Iterator. Nicht vergessen vor dem Löschen Release vom COM-Objekt aufzurufen, sonst bekommst Du MemoryLeaks in der Größe von Australien.
 _________________
 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
 [ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
 |  |  
		| Nach oben |  |  
		|  |  
		| PeaceKiller JLI Master
 
  
 Alter: 36
 Anmeldedatum: 28.11.2002
 Beiträge: 970
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 16.01.2006, 21:42    Titel: |   |  
				| 
 |  
				| Du musst nicht zweimal posten damit man dich beachtet   
 
  	  | CPP: |  	  | bool CResourceManager::DeleteTexture(LPCSTR lpTextureName) {
 LPDIRECT3DTEXTURE9 temp = GetTexture(lpTextureName);
 if(!temp)
 return false;
 
 temp->Release();
 
 MapTextures.erase(m_MapTextures.find(lpTextureName));
 
 }
 | 
 
 Zwar etwas unsauber, sollte aber funktionieren.
 _________________
 »If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
 – Robert X. Cringely, InfoWorld magazine
 |  |  
		| Nach oben |  |  
		|  |  
		| RayJunx JLI'ler
 
 
 Alter: 44
 Anmeldedatum: 16.01.2006
 Beiträge: 130
 Wohnort: Bayern
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 16.01.2006, 21:52    Titel: tausend millionen dank |   |  
				| 
 |  
				| sorry für das doppelposten hatte das geantortet und dann mein eigenes topic nicht wiedergefunden
 und dann...das übliche..doppelthältbesser verhalten
  tut leid 
 aber danke für den quellcode eben!
 genau das hab ich gesucht wird gleich morgen eingebaut.
 nur eine frage noch.
 weil eins weiter oben was von COM berücksichtigen die rede war,
 wegen memory leaks. krieg ich die mit dem vorschlag von dir
 nicht? oder  muß ich dann noch was berücksichtigen?
 
 vielen dank nochmal!
 Rayjunx
 _________________
 Just a Freak
 |  |  
		| Nach oben |  |  
		|  |  
		| PeaceKiller JLI Master
 
  
 Alter: 36
 Anmeldedatum: 28.11.2002
 Beiträge: 970
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 16.01.2006, 22:08    Titel: |   |  
				| 
 |  
				| Ja,  gibt das Com-Objekt frei. _________________
 »If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
 – Robert X. Cringely, InfoWorld magazine
 |  |  
		| Nach oben |  |  
		|  |  
		|  |  
  
	| 
 
 | Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten.
 Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
 Du kannst deine Beiträge in diesem Forum nicht löschen.
 Du kannst an Umfragen in diesem Forum nicht mitmachen.
 
 |  
 Powered by phpBB © 2001, 2005 phpBB Group
 Deutsche Übersetzung von phpBB.de
 |