Texturensalat (DirectX)
-
Guten Morgen,
Wieder mal ein Problem. Und wie immer seltsam wie ein Kieselstein,
der gerade ein Huhn rupft und es mit Speck beschmiert.
Es geht um das Laden von Texturen. Ich habe einen Textur-Manager,
in diesem sind eine STL-map mit Texturen und eine Funktion,
um die Textur zu bekommen (wenn vorhanden aus der map), beides
statisch. Das Ganze dient als Cache.#include "TextureManager.h" map<LPCTSTR, LPDIRECT3DTEXTURE9> TextureManager::textures; LPDIRECT3DTEXTURE9 TextureManager::GetTexture(LPCTSTR texturePath, LPDIRECT3DDEVICE9 renderDevice) { // Prüfen, ob Textur vorhanden if(TextureManager::textures.find(texturePath) == TextureManager::textures.end()) { // Textur laden D3DXCreateTextureFromFileEx(renderDevice, texturePath, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, 0, D3DFMT_A1R5G5B5, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, 0xFF000000, 0, 0, &textures[texturePath]); } // Textur zurückgeben return TextureManager::textures[texturePath]; }Nun... Ich starte das Spiel direkt in VS -> Die Cursor- und Charakter-Texturen werden falsch geladen. Stattdessen sehe ich 2 andere Texturen.
Also, seltsame Punkte:
1. Wenn ich das Spiel dann direkt im Release-Ordner starte, funktioniert es wunderbar.2. Wenn ich das ganze Spiel dann in einen anderen Ordner kopiere, werden wieder die falschen Texturen angezeigt.
3. Wenn ich die Textur-Lade-Reihenfolge ändere (Cursor zu Beginn laden),
funktionierts auch wunderbar.Hat das was mit meinem TexturManager zu tun?
Übersehe ich schon wieder was in c++? -.-Ach ja:
Der Ordner der Applikation wird zur Laufzeit ermittelt.
Daher bin ich so verwirrt, es sind ja alle Dateien da, auch
in einem anderen Ordner. Der ermittelte Ordner ist immer korrekt.Wenn ich feste Pfade angebe, funktionierts auch nicht.
-
Die Map vergleicht hier nicht die Strings sondern lediglich deren Adressen.
-
Oh... Herzlichen Dank, läuft. -.-
C# -> C++ kann so *hust* sein.
-
Du könntest der map noch nen Vergleicher mitgeben, als drittes Template-Argument. Oder du nutzt std::string
