JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=27df359fff8e077d315429d15f4b6729Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Nur eine Textur?

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
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

BeitragVerfasst am: 12.10.2005, 18:21    Titel: Nur eine Textur? Antworten mit Zitat

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 Mad )
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
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 12.10.2005, 18:25    Titel: Antworten mit Zitat

Wieso keine STL?

Begründung: Temporäre Pointerbenutzung Wink
_________________
'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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Dofter
Junior JLI'ler


Alter: 34
Anmeldedatum: 13.03.2005
Beiträge: 99
Wohnort: Ebermannstadt
Medaillen: Keine

BeitragVerfasst am: 12.10.2005, 18:29    Titel: Antworten mit Zitat

Bei der STL gib's doch immer so meldungen. Glaub wegen den Templates.
Na ja...

Was meinst du mit 'Temporäre Pointerbenutzung'?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 12.10.2005, 18:32    Titel: Antworten mit Zitat

Was für Meldungen denn? oO
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
Dofter
Junior JLI'ler


Alter: 34
Anmeldedatum: 13.03.2005
Beiträge: 99
Wohnort: Ebermannstadt
Medaillen: Keine

BeitragVerfasst am: 12.10.2005, 18:37    Titel: Antworten mit Zitat

Zitat:

e:\my folders\my projekts\mmbeg\texturemanager.h(4Cool : 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 Twisted Evil
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 12.10.2005, 18:42    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
Dofter
Junior JLI'ler


Alter: 34
Anmeldedatum: 13.03.2005
Beiträge: 99
Wohnort: Ebermannstadt
Medaillen: Keine

BeitragVerfasst am: 12.10.2005, 18:43    Titel: Antworten mit Zitat

is mir scho klar. doch wo hin damit thinking
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 12.10.2005, 18:49    Titel: Antworten mit Zitat

Schau dir mal das an:
http://pluto.homelinux.org/vorlesungen/systemschnittstellen/script/win/dll.php
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
Dofter
Junior JLI'ler


Alter: 34
Anmeldedatum: 13.03.2005
Beiträge: 99
Wohnort: Ebermannstadt
Medaillen: Keine

BeitragVerfasst am: 12.10.2005, 18:54    Titel: Antworten mit Zitat

ok. Was soll mir des jetzt helfen. Mir wers recht wenn mir einer sagt, wo ich eine 'Temporäre Pointerbenutzung' habe. Danke!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 12.10.2005, 19:04    Titel: Antworten mit Zitat

Dofter hat Folgendes geschrieben:
ok. Was soll mir des jetzt helfen.

Rolling Eyes

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! Laughing Rolling Eyes
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 13.10.2005, 16:02    Titel: Antworten mit Zitat

Crossposting!
_________________
'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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 13.10.2005, 16:29    Titel: Antworten mit Zitat

Flamer!




Nicht bös gemeint, aber so haben wir hier wenigstens etwas zu tun um unser Ego zu stärken Wink
_________________
"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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
abc_d
JLI Master Trainee


Alter: 34
Anmeldedatum: 27.01.2003
Beiträge: 615

Medaillen: Keine

BeitragVerfasst am: 13.10.2005, 16:42    Titel: Antworten mit Zitat

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 Wink
_________________
http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.

Never touch a running System - der Systemling
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
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

Impressum