Accueil > Forum > > > > Tableaux dynamiques GLuint [sous windows]
Tableaux dynamiques GLuint [sous windows]
mardi 6 avril 2010 à 09:03:23 |
Tableaux dynamiques GLuint [sous windows]

Djoss666
|
Bonjour à tous.
Je cherche à charger le nom des textures que je récupère dans un fichier, dans un tableau dynamique GLUint, afin de ne pas avoir à recharger la texture à chaque frame, pour accélérer mon programme. Voila une partie de mon code:
initialisation
Code C/C++ :
int main(int argc, char *argv[])
{
SDL_Event event;
const Uint32 time_per_frame = 1000/FPS;
unsigned int width = LARGEUR_FENETRE;
unsigned int height = HAUTEUR_FENETRE;
Uint32 last_time,current_time,elapsed_time; //for time animation
Uint32 start_time,stop_time; //for frame limit
SDL_Init(SDL_INIT_VIDEO);
atexit(stop);
SDL_WM_SetCaption("SDL GL Application", NULL);
SDL_SetVideoMode(width, height, 32, SDL_OPENGL);
initFullScreen(&width,&height);
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
gluPerspective(70,(double)width/height,0.001,1000);
glEnable (GL_DEPTH_TEST);
glEnable (GL_TEXTURE_2D);
load();
fonction load:
Code C/C++ :
void load()
{
ofstream fichier8("doco.txt", ios::out | ios::trunc);
int j, teka=0, pointagep, pointaget;
int nbrPoints=0, nbrTex=0;
ifstream fichier2("doc/liste1.jaj", ios::in);
ifstream fichier3("doc/liste2.jaj", ios::in);
fichier2>>nbobjets;
glGenTextures(nbobjets,&identifiant);
nbrfacesp = new int [nbobjets];
for(j=0;j<nbobjets;j++)
{
pointagep=nbrPoints;
pointaget=nbrTex;
nomsobjets.push_back("");
nomstextures.push_back("");
fichier2>>nomsobjets[j];
fichier3>>nomstextures[j];
loadTexture(nomstextures[j].c_str(),identifiant+j);
texture.push_back(identifiant + j);
nbrfacesp[j]=0;
ifstream fichier(nomsobjets[j].c_str(), ios::in);
if(fichier)
{
char caractere;
while( !fichier.eof() )
{
fichier.get(caractere);
fichier8<<caractere<<endl;
switch(caractere)
{
case 'v' :
fichier.get(caractere);
if(caractere==' ')
{
point1.push_back(1);
point2.push_back(1);
point3.push_back(1);
fichier >> point1[nbrPoints]>> point2[nbrPoints]>> point3[nbrPoints];
fichier8 << point1[nbrPoints]<< point2[nbrPoints]<< point3[nbrPoints]<<endl;
nbrPoints++;
}
else if(caractere=='t')
{
tex1.push_back(1);
tex2.push_back(1);
fichier >> tex1[nbrTex]>> tex2[nbrTex];
fichier8 << tex1[nbrTex]<< tex2[nbrTex]<<endl;
nbrTex++;
}
break;
case 'f' :
texFace1.push_back(1); // (*)
texFace2.push_back(1);
texFace3.push_back(1);
face1.push_back(1);
face2.push_back(1);
face3.push_back(1);
teka=0;
fichier>>teka;
fichier8<<teka<<endl;
face1[nbrFaces]= teka + pointagep;
fichier.get(caractere);
fichier >> teka;
fichier8<<teka<<endl;
texFace1[nbrFaces] = teka + pointaget;
fichier>>teka;
fichier8<<teka<<endl;
face2[nbrFaces] = teka + pointagep;
fichier.get(caractere);
fichier >> teka;
fichier8<<teka<<endl;
texFace2[nbrFaces] = teka + pointaget;
fichier>>teka;
fichier8<<teka<<endl;
face3[nbrFaces] = teka + pointagep;
fichier.get(caractere);
fichier >> teka;
fichier8<<teka<<endl;
texFace3[nbrFaces] = teka + pointaget;
nbrFaces++;
nbrfacesp[j]++;
break;
default:
while(caractere!='n' && !fichier.eof() )
fichier.get(caractere);
break;
}
}
}
else
cerr << "Impossible d'ouvrir le fichier !" << endl;
fichier.close();
}
fichier2.close();
fichier3.close();
}
fonction loadtexture:
Code C/C++ :
void loadTexture(const char * filename,GLuint k)
{
GLuint glID;
SDL_Surface * picture_surface = NULL;
SDL_Surface *gl_surface = NULL;
SDL_Surface * gl_fliped_surface = NULL;
Uint32 rmask, gmask, bmask, amask;
picture_surface = IMG_Load(filename);
if (picture_surface == NULL)
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
rmask = 0xff000000;
gmask = 0x00ff0000;
bmask = 0x0000ff00;
amask = 0x000000ff;
#else
rmask = 0x000000ff;
gmask = 0x0000ff00;
bmask = 0x00ff0000;
amask = 0xff000000;
#endif
SDL_PixelFormat format = *(picture_surface->format);
format.BitsPerPixel = 32;
format.BytesPerPixel = 4;
format.Rmask = rmask;
format.Gmask = gmask;
format.Bmask = bmask;
format.Amask = amask;
gl_surface = SDL_ConvertSurface(picture_surface,&format,SDL_SWSURFACE);
gl_fliped_surface = flipSurface(gl_surface);
glBindTexture(GL_TEXTURE_2D, k);
gluBuild2DMipmaps(GL_TEXTURE_2D, 4, gl_fliped_surface->w,
gl_fliped_surface->h, GL_RGBA,GL_UNSIGNED_BYTE,
gl_fliped_surface->pixels);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,
GL_LINEAR_MIPMAP_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, 4, gl_fliped_surface->w,
gl_fliped_surface->h, 0, GL_RGBA,GL_UNSIGNED_BYTE,
gl_fliped_surface->pixels);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
SDL_FreeSurface(gl_fliped_surface);
SDL_FreeSurface(gl_surface);
SDL_FreeSurface(picture_surface);
}
fonction dessiner:
Code C/C++ :
int i = 0,k=0, bim;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW); //Crée une matrice
glLoadIdentity(); //Iniatlise la matriceGLuint texture;
camera->look();
glBindTexture(GL_TEXTURE_2D, texture[0]);
glEnd();
for(int j=0; j<nbrFaces; j++)
{
if(k==nbrfacesp[i])
{
i++;
glBindTexture(GL_TEXTURE_2D, texture[i]);
glEnd();
k=0;
}
k++;
glBegin(GL_TRIANGLES);
glTexCoord2f(tex1[ texFace1[j]-1],tex2[ texFace1[j]-1]); glVertex3f(point1[ face1[j]-1], point2[ face1[j]-1], point3[ face1[j]-1]);
glTexCoord2f(tex1[ texFace2[j]-1],tex2[ texFace2[j]-1]); glVertex3f(point1[ face2[j]-1], point2[ face2[j]-1], point3[ face2[j]-1]);
glTexCoord2f(tex1[ texFace3[j]-1],tex2[ texFace3[j]-1]); glVertex3f(point1[ face3[j]-1], point2[ face3[j]-1], point3[ face3[j]-1]);
glEnd();
}
glFlush();
SDL_GL_SwapBuffers();
}
Alors le programme se lance mais la fenêtre se ferme aussitôt qu'elle s'ouvre. Et grace au "fichier8", j'ai pu trouver que le programme plantait au "(*)" indiqué au deuxième passage dans la boucle ! Or ca ne plantait pas lorsque j'utilisais un simple GLuint au lieu d'un tableau.
Pourriez-vous m'aider à resoudre ce problème S'il vous plait. Merci d'avance :)
|
|
Cette discussion est classée dans : sdl, gl, texture, surface, fichier8
Répondre à ce message
Sujets en rapport avec ce message
TEXTURE SDL_IMAGE JPEG [ par Batman60 ]
salutquelqu'un peut me dire ce qui cloche dans mon bout de code utilisé pour charger une texture jpeg j'utilise la lib SDL_IMAGE pour celaest-ce que c
Probleme d'alpha avec SDL_ttf [ par vladisback ]
Je suis entrain de m'arracher les cheuveux avec SDL_ttf, j'essai simplement d'afficher du texte de n'importe quelle couleur opaque sur un fond transpa
bitmap avec SDL_image? [ par Batman60 ]
Bonjour Comment afficher des bitmaps correctement(bonnes couleurs,et image non inversée) avec ce code (SDL_ima
Problème d'affichage de texture [ par Turok ]
Bonjour,Alors voila le problème est simple, voici un code que j'utilise pour afficher une simple image 2d en utilisant OpenGl et SDL, mais celui ci ne
Texture avec OpenGl [ par Zakata ]
Bonjour,Voila j'ai un petit soucis avec les textures et OpenGl. J'ai dans l'espoir de réussir à mettre une image de fond sur une fenetre OpenGl. J'ai
Problème de placage de texture [ par unrealgun ]
Bonjour,Je suis en train de développer uGUI en C++ sous linux avec SDL et OpenGL.Voila mon probleme : je charge une image PNG transparente avec SDL_Im
[opengl] texture avec une couleur transparente [ par lafouine1986 ]
Bonjour à toutes et tous,voilà je me permets de vous demander de l'aide car je suis comme bloqué...Je désire créer un opengl un arbre de type imposteu
{SDL} Copier et redimensionner une SDL_Surface [ par ndubien ]
Bonjour,Mon problème:SDL_Surface *img1 = SDL_LoadBMP( "image.bmp" );SDL_Surface *img2;Je souhaiterais que i
capture d'écran et plaquage sur un quad [ par Fr33z ]
Bonjour à tous. Après avoir bien cherché sur internet divers tutoriaux, aides, et manuels, je n'ai toujours pas compris comment a partir d'un écran,
[OpenGL] rotation [ par F0ra ]
Bonjour,J'ai un problème pour réaliser une rotation en OpenGL au centre du rectangle.J'ai esayé avec glRotatef(ang,0.0,0.0,1.0); le problème l'origni
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|