Bonjour, j'ai créé une petite appli opengl, je la lance sur mon macbook : pas de problème, puis je l'envoie à un pote qui la teste sur son propre macbook, toujours pas de problème, (je lui envoie les libraries qu'il faut utiliser aussi) puis il la teste sur son imac.. et là ça ne marche plus, je la retest sur mon ibook et ça ne marche pas non plus.
Initialisation OpenGL/SDL :=>
if( SDL_Init(SDL_INIT_VIDEO) < 0)
{
std::cerr << "Echec SDL_Init : " << SDL_GetError() << std::endl;
return (EXIT_FAILURE);
}
/* assurons nous que le mode "double buffer" est bien demande*/
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
// activation de l'affichage SDL en mode fenetre ou plein ecran....
SDL_Surface* pScreen = SDL_SetVideoMode(largeur, hauteur, 32, SDL_OPENGL );// | SDL_GL_DOUBLEBUFFER | SDL_FULLSCREEN=> pour une appli plein écran
SDL_ShowCursor(SDL_DISABLE);
/* verification de l'activation de l'affichage*/
if( !pScreen )
{
std::cerr << "Echec de creation de la fenetre en " << largeur << "x" << hauteur << SDL_GetError() << std::endl;
return (EXIT_FAILURE);
}
/*recuperation de l'etat du parametre "double buffer"*/
int nValue;
if( SDL_GL_GetAttribute(SDL_GL_DOUBLEBUFFER, &nValue) < 0)
{
std::cerr << "Echec de recuperation du parametre SDL_GL_DOUBLEBUFFER : " << SDL_GetError() << std::endl;
return (EXIT_FAILURE);
}
/*autoriser la répétition de touche*/
SDL_EnableKeyRepeat(10, 10);
// assurons nous que le mode "double buffer" est bien actif
if(nValue != 1)
{
std::cerr << "Erreur : SDL_GL_DOUBLEBUFFER inactif" << std::endl;
return (EXIT_FAILURE);
}
Affichage:=>
int i=0;//i pour parcourir le tableau d'image
if(init())
return (EXIT_FAILURE);
GLuint *logos = new GLuint[3];
logos[0]=loadTexture("Media/login/logo1.jpg",false);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_TEXTURE_2D);
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );//on supprime le buffer
glBindTexture(GL_TEXTURE_2D, logos[i]);//affichage logo
glBegin(GL_QUADS);
glTexCoord2d(0,1); glVertex2d(-1,1);
glTexCoord2d(0,0); glVertex2d(-1,-1);
glTexCoord2d(1,0); glVertex2d(1,-1);
glTexCoord2d(1,1); glVertex2d(1,1);
glEnd();
glFlush();
SDL_GL_SwapBuffers();
À la place des images, j'obtient un fond blanc...
Merci de votre aide !
il faut savoir si cette fonction s'est bien passée ou non.
cette fonction doit appeler gluBuildMipmap ou glTexture. Il faut savoir si ça s'est bien passé.
Pour cela, tu as gluErrorString et glError a tester
et, effectivement j'obtiens une erreur.
Ce qui me gêne, c'est que l'application arrive à charger l'image lorsqu'elle est exécuté à partir de deux macbooks mais ni un imac ni un ibook n'i arrive.
a+
merci,
Voila les erreurs et leurs explications sur cette page. Tu as une valeur non supportée par le driver de carte de ton imac (peut etre un vieux ?)
Ce qu'il faudrait, c'est voir le code de la fontion loadTexture, qui est une fonction donnée par une personne sur ce site, de voir quelle fonction opengl, a l'intérieur, genere cette erreur, et essayer de modifier les parametres pour voir. (un parametre surement non supporté par le vieux driver)
Puis, idéalement, il faudrait modifier la fonction loadTexture, faire le test d'erreur dedans, et si ça échoue, tenter de générer une texture d'une autre maniere, plus modeste pour le driver.
Ce que tu peux faire pour voir, c'est utiliser les fonctions OpenGL qui permettent d'obtenir la version installée, et il y a aussi, je crois, d'autres fonctions d'OpenGL qui permettent d'énumérer les fonctionnalités actives/inactives.
exemple :
imagine que ton driver ne supporte par le mipmapping, il faudrait, en cas d'échec, initialiser la texture avec un glTexture
Bon vous allez dire que je suis compliqué.......
Donc j'ai mis un petit test, pour vérifier si l'image se charge bien de cette manière sinon je la charge d'une autre manière.
je teste cette méthode sur mon ibook et effectivement ça marche comme il faut.
Je l'envoie ensuite à mon ami qui la teste sur son imac, et là ! l'imac ne renvoie aucune erreur mais affiche son fond blanc. donc je refais un teste en désactivant le mipmapping qui effectivement est à l'origine du problème, et là ça marche... J'ai l'impression qu'il n'est pas capable de charger l'image avec le mipmapping mais qu'il ne s'en "rend pas compte" ( l'imac )
Le mipmapping a été rajouté plus tard, donc les vielles cartes graphiques ne savent pas le faire.
Pas contre, pour des raisons de compatibilité, que ça ne plante pas, le pilote sait reconnaitre la fonction, mais il renvoie une erreur, ou ne fait rien.
Un bon programme teste les codes de retour, ou alors si le pilote sait le faire, et, si ce n'est pas le cas, fait d'une autre façon.
et pour pouvoir charger l'image, je passe par le mipmapping.
merci,
SDL/OpenGL ne fonctionne pas sur tous mes ordis......
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html