Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Dofter Junior JLI'ler
Alter: 34 Anmeldedatum: 13.03.2005 Beiträge: 99 Wohnort: Ebermannstadt Medaillen: Keine
|
Verfasst am: 12.10.2005, 18:21 Titel: Nur eine Textur? |
|
|
So, mal wieder ne Frage.
Ich bin dabei nen TexturManager für ne dll zu Schreiben.
Compelieren: OK!
Ausführen: OK!
Doch ich kann pro Instanz nur EINE Textur speichern. Ich hab keine Ahnung wieso...
Hier Mal aweng Code:
1. TexturManager.h
CPP: | #ifndef _TEXTUREMANAGER_
#define _TEXTUREMANAGER_
#include "MMBEG.h"
class MMBEG_API CTextureManager
{
public:
CTextureManager();
virtual ~CTextureManager();
// Initialisierung des Texturemanagers
BOOL Init(LPDIRECT3DDEVICE9 lpD3DDevice);
// mit dieser Methode werden Texturen hinzugefügt
void AddTexture(LPCSTR lpFileName, int r, int g, int b);
void AddTexture(LPCSTR lpFileName);
// diese Methode gibt einen Zeiger auf die Textur lpTextureName zurück
STexture GetTexture(LPCSTR lpTextureName);
protected:
// Zeiger auf das Direct3D-Device
LPDIRECT3DDEVICE9 m_lpD3DDevice;
};
#endif
|
2.TexturManager.cpp
CPP: | #include "MMBEG.h"
// diese Map speichert den Namen und den Zeiger auf die Textur
CTextureMap TextureMap;
// Konstruktor - Initialisierungen
CTextureManager::CTextureManager()
{
m_lpD3DDevice = NULL;
}
// Destruktor - Freigabe der Texturen aus der TextMap
CTextureManager::~CTextureManager()
{
TextureMap.DeleteList();
}
// Initialisierung des Textmanagers
BOOL CTextureManager::Init(LPDIRECT3DDEVICE9 lpD3DDevice)
{
m_lpD3DDevice = lpD3DDevice;
return TRUE;
}
// Textur suchen und ggf. zurückgeben
STexture CTextureManager::GetTexture(LPCSTR lpTextureName)
{
// die Textur zurückgeben
return TextureMap.GetTexture(lpTextureName);
}
// Textur hinzufügen
void CTextureManager::AddTexture(LPCSTR lpFileName, int r, int g, int b)
{
// testen, ob die Textur bereits vorhanden ist
LPDIRECT3DTEXTURE9 lpTexture;
STexture Texture;
// wenn sie nicht vorhanden ist, wird sie wie
// gewohnt erzeugt
if(GetTexture(lpFileName).m_Texture == NULL)
{
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,
D3DCOLOR_XRGB(r, g, b),0,0,
&lpTexture);
Texture.m_TextureName = lpFileName;
Texture.m_Texture = lpTexture;
Texture.m_Width = ImageInfo.Width;
Texture.m_Height = ImageInfo.Height;
// und in die Map unter ihrem Namen eingefügt
TextureMap.NewTexture(Texture);
}
}
// Textur hinzufügen
void CTextureManager::AddTexture(LPCSTR lpFileName)
{
// testen, ob die Textur bereits vorhanden ist
LPDIRECT3DTEXTURE9 lpTexture;
STexture Texture;
// wenn sie nicht vorhanden ist, wird sie wie
// gewohnt erzeugt
if(GetTexture(lpFileName).m_Texture == NULL)
{
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,
NULL,0,0,
&lpTexture);
Texture.m_TextureName = lpFileName;
Texture.m_Texture = lpTexture;
Texture.m_Width = ImageInfo.Width;
Texture.m_Height = ImageInfo.Height;
// und in die Map unter ihrem Namen eingefügt
TextureMap.NewTexture(Texture);
}
}
|
3. TexturMap.h (Da ja keine STL benutz werden darf )
CPP: | #ifndef _TEXTUREMAP_
#define _TEXTUREMAP_
#include "MMBEG.h"
struct MMBEG_API STexture
{
LPCSTR m_TextureName;
LPDIRECT3DTEXTURE9 m_Texture;
// Breite und Höhe
int m_Width;
int m_Height;
};
class MMBEG_API CTextureMap
{
public:
BOOL NewTexture(STexture NewText);
BOOL DeleteList(void);
CTextureMap* GetByName(LPCSTR Name);
BOOL SetData(LPCSTR Name, LPDIRECT3DTEXTURE9 Texture, int Width, int Height);
STexture GetTexture(LPCSTR Name);
CTextureMap* GetNachfolger() const {return m_Nachfolger;}
CTextureMap* GetVorgaenger() const {return m_Vorgaenger;}
void SetNachfolger(CTextureMap* Texture) {m_Nachfolger = Texture;}
void SetVorgaenger(CTextureMap* Texture) {m_Vorgaenger = Texture;}
LPCSTR m_TextureName;
STexture m_STexture;
private:
CTextureMap* Last(void);
CTextureMap* m_Vorgaenger;
CTextureMap* m_Nachfolger;
};
#endif
|
4. TextureMap.cpp
CPP: | #include "MMBEG.h"
CTextureMap TextureMapHead;
BOOL CTextureMap::NewTexture(STexture Texture)
{
CTextureMap* Segment = new CTextureMap;
Segment->SetNachfolger(NULL);
Segment->SetVorgaenger(Last());
Last()->SetNachfolger(Segment);
Segment->m_STexture.m_TextureName = Texture.m_TextureName;
Segment->m_STexture.m_Texture = Texture.m_Texture;
Segment->m_STexture.m_Width = Texture.m_Width;
Segment->m_STexture.m_Height = Texture.m_Height;
return TRUE;
}
CTextureMap* CTextureMap::GetByName(LPCSTR Name)
{
CTextureMap* p = &TextureMapHead;
while (p != Last())
{
p = p->GetNachfolger();
if (p->m_STexture.m_TextureName == Name)
{
return p;
}
}
return NULL;
}
BOOL CTextureMap::SetData(LPCSTR Name,LPDIRECT3DTEXTURE9 Texture, int Width, int Height)
{
GetByName(Name)->m_STexture.m_TextureName = Name;
GetByName(Name)->m_STexture.m_Texture = Texture;
GetByName(Name)->m_STexture.m_Width = Width;
GetByName(Name)->m_STexture.m_Height = Height;
return TRUE;
}
BOOL CTextureMap::DeleteList(void)
{
while(NULL != TextureMapHead.GetNachfolger())
{
CTextureMap* p = Last();
p->GetVorgaenger()->SetNachfolger(NULL);
p->SetNachfolger(NULL);
p->SetVorgaenger(NULL);
// m_Texture freigeben
p->m_STexture.m_Texture->Release();
delete p;
p = NULL;
}
return TRUE;
}
STexture CTextureMap::GetTexture(LPCSTR Name)
{
CTextureMap* p = GetByName(Name);
if (p == NULL)
{
STexture Texture;
Texture.m_Texture = NULL;
return Texture;
}
return p->m_STexture;
}
CTextureMap* CTextureMap::Last(void)
{
CTextureMap* p = &TextureMapHead;
while(NULL != p->GetNachfolger())
{
p=p->GetNachfolger();
}
return p;
}
|
Scho mal danke fürs überlegen im Vorraus!
mfg
Dofter |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
|
Dofter Junior JLI'ler
Alter: 34 Anmeldedatum: 13.03.2005 Beiträge: 99 Wohnort: Ebermannstadt Medaillen: Keine
|
Verfasst am: 12.10.2005, 18:29 Titel: |
|
|
Bei der STL gib's doch immer so meldungen. Glaub wegen den Templates.
Na ja...
Was meinst du mit 'Temporäre Pointerbenutzung'? |
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 12.10.2005, 18:32 Titel: |
|
|
Was für Meldungen denn? oO |
|
Nach oben |
|
|
Dofter Junior JLI'ler
Alter: 34 Anmeldedatum: 13.03.2005 Beiträge: 99 Wohnort: Ebermannstadt Medaillen: Keine
|
Verfasst am: 12.10.2005, 18:37 Titel: |
|
|
Zitat: |
e:\my folders\my projekts\mmbeg\texturemanager.h(4 : warning C4251: 'm_MapTextures' : class 'std::map<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct IDirect3DTexture9 *,struct std::less<class std::b
asic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct IDirect3DTexture9 *> >' benoetigt eine DLL-Schnittstelle, die von Clients von class 'CTextureManager' verwendet wird
|
DIE |
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 12.10.2005, 18:42 Titel: |
|
|
MSDN hat Folgendes geschrieben: | 'identifier' : class 'type' needs to have dll-interface to be used by clients of class 'type2'
A base class or structure must be declared with the __declspec(dllexport) keyword for a function in a derived class to be exported. |
Alles klar? |
|
Nach oben |
|
|
Dofter Junior JLI'ler
Alter: 34 Anmeldedatum: 13.03.2005 Beiträge: 99 Wohnort: Ebermannstadt Medaillen: Keine
|
Verfasst am: 12.10.2005, 18:43 Titel: |
|
|
is mir scho klar. doch wo hin damit |
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
|
Nach oben |
|
|
Dofter Junior JLI'ler
Alter: 34 Anmeldedatum: 13.03.2005 Beiträge: 99 Wohnort: Ebermannstadt Medaillen: Keine
|
Verfasst am: 12.10.2005, 18:54 Titel: |
|
|
ok. Was soll mir des jetzt helfen. Mir wers recht wenn mir einer sagt, wo ich eine 'Temporäre Pointerbenutzung' habe. Danke! |
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 12.10.2005, 19:04 Titel: |
|
|
Dofter hat Folgendes geschrieben: | ok. Was soll mir des jetzt helfen. |
Dofter hat Folgendes geschrieben: | Mir wers recht wenn mir einer sagt, wo ich eine 'Temporäre Pointerbenutzung' habe. Danke! |
Kein Problem, hab doch gerne versucht dir zu helfen, war doch nicht der Rede wert...
Wenn wir einmal dabei sind, ich hätte gerne 'ne Fußmassage, Apettit auf 'nen Chickenburger hab ich auch, also her damit und wäre schön, wenn jemand mal den Köder bei Nachbars ruhig stellen könnte. Danke! |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 13.10.2005, 16:29 Titel: |
|
|
Flamer!
Nicht bös gemeint, aber so haben wir hier wenigstens etwas zu tun um unser Ego zu stärken _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
abc_d JLI Master Trainee
Alter: 34 Anmeldedatum: 27.01.2003 Beiträge: 615
Medaillen: Keine
|
Verfasst am: 13.10.2005, 16:42 Titel: |
|
|
Irgendjemand redet ihm ein das crossposting böse ist, und dann schreibt er das zu jedem crossposting dazu, er kommt nicht auf die Idee dem Verfasser ein PM zu schicken. Nein, er denkt seine Regel ist Gesetz und versucht sie durchzusetzen.
IMHO lächerlich.
Naja, liegt in der Natur des Elchs _________________ http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.
Never touch a running System - der Systemling |
|
Nach oben |
|
|
|