IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

Conserver les texture OpenGL


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2011
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 8
    Par défaut Conserver les texture OpenGL
    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:
    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;
    }
    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
     
    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

  2. #2
    Membre averti
    Inscrit en
    Février 2011
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 8
    Par défaut
    Rebonjours, j'ai trouvé ma réponse, pour ceux qui veulent savoir, c'est bien des gluint qu'il faut garder en mémoire, et la raison pourquoi cela ne fonctionnai pas, c'est que je n'avais pas encore d'instance de ma fenêtre SDL quand j'essayais de loader des textures, il ne me retournait pas d'id pour stocker la texture.

    maintenant ca marche nickel !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. OpenGL et les textures
    Par ZeroDono dans le forum OpenGL
    Réponses: 8
    Dernier message: 18/12/2011, 20h15
  2. Réponses: 10
    Dernier message: 03/02/2011, 17h18
  3. [OpenGL/C++] Opérations sur les Textures
    Par Bob.Killer dans le forum OpenGL
    Réponses: 6
    Dernier message: 10/08/2005, 10h27
  4. Conserver les retours à la ligne
    Par arwen dans le forum ASP
    Réponses: 2
    Dernier message: 04/12/2003, 12h50
  5. Afficher une image sans passer par les textures
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/05/2003, 19h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo