Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Dofter

Treue Seele

  • »Dofter« ist der Autor dieses Themas

Beiträge: 159

Wohnort: im wunderbaren EBERMANNSTADT

Beruf: Schüler^^

  • Private Nachricht senden

1

13.10.2005, 17:25

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

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#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

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#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 :( )

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#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

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#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!

In nem andren Forum hieß es: Teporäre Pointerbenutzung (keine Ahnung was das is, und wo ich des hab)

mfg
Dofter
"Wo kämen wir hin, wenn alle sagten, wo kämen wir hin, und keiner ginge,
um zu sehen, wohin wir kämen, wenn wir gingen"

leo

Frischling

  • Private Nachricht senden

2

13.10.2005, 18:00

Jaja.. Crossposting :P

Ich denke mal, mit Temporärer Pointerbehandlung wird gemeint, dass du in einer deiner Funktionen einen Zeiger initialisierst und dann zurückgibst. Aber nach dem verlassen einer Funktion, werden alle in der Funktion erstellten Variablen wieder gelöscht..

Anonymous

unregistriert

3

13.10.2005, 18:01

Wollte ja was antworten, aber da Crossposting? nö

Anonymous

unregistriert

4

13.10.2005, 19:52

Zitat von »"nix da"«

Wollte ja was antworten, aber da Crossposting? nö


kannst ma gerne imma noch helfen. Ich dachte blos, dass dich des net interessiert und dass ich hier bessere Hilfe bekomm.

Und zu Crossposting:
2x gepostet => 2 fache Chance net Antwort zu bekommen :P

Dofter

Treue Seele

  • »Dofter« ist der Autor dieses Themas

Beiträge: 159

Wohnort: im wunderbaren EBERMANNSTADT

Beruf: Schüler^^

  • Private Nachricht senden

5

13.10.2005, 19:53

War natürlich von mir ^^
"Wo kämen wir hin, wenn alle sagten, wo kämen wir hin, und keiner ginge,
um zu sehen, wohin wir kämen, wenn wir gingen"

Anonymous

unregistriert

6

13.10.2005, 19:56

Weil es (die Antwort) so offensichtlich ist, braucht es länger Zeit erkannt zu werden.

- Patrick, der buddhist :D

Anonymous

unregistriert

7

14.10.2005, 20:47

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// Textur hinzufügen 

void CTextureManager::AddTexture(LPCSTR lpFileName) 
{ 
    // testen, ob die Textur bereits vorhanden ist 

    LPDIRECT3DTEXTURE9 lpTexture; 


    STexture Texture;// <- is hier der Fehler? 


    // 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); 
    } 
}


is das da oben der Fehler. Net dass ich rum schreib und des is falsch. DANKE

Dofter, immer noch Christ :)

8

14.10.2005, 21:33

Zitat


(a+b)²=a²+b² YEAH!

:ohoh:

Dofter... über leg dir das nochmal...
(a+b)² = a² + 2ab + b²
(a-b)² = a² - 2ab + b²
(a-b)(a+b) = a² - b²

nur so als Tipp ;)
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Anonymous

unregistriert

9

14.10.2005, 21:58

Zitat von »"Devil"«

Zitat


(a+b)²=a²+b² YEAH!

:ohoh:

Dofter... über leg dir das nochmal...
(a+b)² = a² + 2ab + b²
(a-b)² = a² - 2ab + b²
(a-b)(a+b) = a² - b²

nur so als Tipp ;)


is scho klar: "IRONIE"

P.S.: hab ne 1 in MAthe. sollte des also wissen ;)

10

14.10.2005, 23:31

hmm ich seid ich in der 3. Klasse bin, denn erst da haben wir Noten bekommen ;)

Aber ist ja auch egal... :-D
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Werbeanzeige