Bonjours, je travaille actuellement sur un gestionnaire de ressource, et je cherche a garder mes texture dans un map avec un id. Le problème est le suivant : je ne sais pas quoi garder en mémoire!
Après avoir observé les codes sur internet et dans mes livre, j'en suis venu a conclusion que c'était la variable de type GLuint qu'il faut garder en mémoire, mais en pratique, ca ne marche pas du tout!
Si quelqu'un pourrait m'expliquer comment ca marche exactement quand on load une texture ou si quelqu'un pourrait me donner la solution pour stocker mes textures dans un map, ce serait vraiment aimable
Voici mon code :
Ici je load:
Et ici j'affiche :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 int GRessources::LoadImageFile(string ImgFile) { GLuint texture; int id=0; GLenum texture_format=NULL; GLint nofcolors; SDL_Surface *surface; if ( (surface = SDL_LoadBMP(ImgFile.c_str())) ) { nofcolors=surface->format->BytesPerPixel; if(nofcolors==4) { if(surface->format->Rmask==0x000000ff) texture_format=GL_RGBA; else texture_format=GL_BGRA; } else if(nofcolors==3) //no alpha channel { if(surface->format->Rmask==0x000000ff) texture_format=GL_RGB; else texture_format=GL_BGR; } else { printf("pas truecolor "); } // C'est ici que je comprend plus ou moin ce que je fait! glGenTextures( 1, &texture ); glBindTexture( GL_TEXTURE_2D, texture ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); glTexImage2D( GL_TEXTURE_2D, 0, nofcolors, surface->w, surface->h, 0, texture_format, GL_UNSIGNED_BYTE, surface->pixels ); id = TextureMap.size(); TextureMap[id] = texture;// Mon map de type map<int,Gluint> } else { printf("cannot load image.bmp: %s\n", SDL_GetError()); SDL_Quit(); } if ( surface ) { SDL_FreeSurface( surface ); } return id; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 void GDisplay::DrawMap() { glEnable( GL_TEXTURE_2D ); GLuint texture=NULL; CGame * Game = CGame::GetInstance(); GRessources * Ressources = GRessources::GetInstance(); CWorldMap * WorldMap = Game->GetWorldMap(); SWorldMap CurrentMap = WorldMap->GetCurrentMap(); STile Tile; int TileSize = WorldMap->GetTileSize(); float HalfTile = TileSize * 0.5; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); for(int i = 0; i < CurrentMap.SizeY;i++) { for(int j = 0; j < CurrentMap.SizeX;j++) { Tile = Ressources->GetTile(CurrentMap.TileMap[j][i]); texture = Ressources->GetTexture(Tile.TextureFileID); glBindTexture( GL_TEXTURE_2D, texture ); glLoadIdentity(); glPushMatrix(); glTranslatef(j*TileSize + HalfTile + OffsetX,i*TileSize + HalfTile + OffsetY,0); //glColor4f(Tile.color.X,Tile.color.Y,Tile.color.Z,1); glBegin(GL_QUADS); glTexCoord2i( 0, 0 ); glVertex3f(-HalfTile,HalfTile,0); glTexCoord2i( 1, 0 ); glVertex3f(HalfTile,HalfTile,0); glTexCoord2i( 1, 1 ); glVertex3f(HalfTile,-HalfTile,0); glTexCoord2i( 0, 1 ); glVertex3f(-HalfTile,-HalfTile,0); glEnd(); glPopMatrix(); } } }
Merci d'avance![]()
Partager