Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : SDL/OpenGL problème rappel de SDL_SetVideoMode [ Linux / OpenGL ] (Timidouveg)

mercredi 26 décembre 2007 à 00:33:01 | SDL/OpenGL problème rappel de SDL_SetVideoMode

Timidouveg

Bonjour :)
J'ai rencontré un problème avec OpenGL et SDL, que j'ai réglé en bricolant une sorte de mémoire. Mais, le problème me paraissant abhérant, je ne suis pas sûr d'être passé à côté d'une solution plus simple et moins gourmande.
Voici le problème :
J'ai amorcé OpenGL avec SDL, et je charge mes textures en passant par des SDL_surfaces. Avant tout cela, j'initialise le SDL_SetVideoMode bien comme il faut de cette façon :
ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_OPENGL | SDL_DOUBLEBUF); (j'ai été droit au but ici, car dans mon code tout est fait en orianté objet, donc bien rangé dans un objet Ecran héritant de Image...)
Ensuite j'initialise OpenGL comme il faut aussi, et le programme tourne bien.
Je charge mes textures via des méthodes d'Image et à l'affichage, tout ce passe bien. Quand je fais mes manipulations, aucun problèmes.
Parcontre, dés que je réinitilise SDL_SetVideoMode pour par exemple passer en mode NOFRAME, ou encore retailler ma fenêtre, passer en FULLSCREEN... OpenGL ne suit plus. J'ai compris que les textures étaient effacés de OpenGL. Ainsi, mes polygones étaient blancs, ou si j'avais chargé d'autres textures après la modification de la fenêtre, il se servait de ceux-là.
Savez-vous pourquoi OpenGL perd la mémoire des textures après avoir réutilisé SDL_SetVideoMode ? Y a t-il une option a régler dans OpenGL pour éviter cela, ou est-ce incurable ?

Pour le moment, comme dit au début, j'ai résolu le problème en mémorisant via un Vector<SDL_Surface*> qui pointe sur les SDL_Surface contenu dans mes Images à leur création pour les recharger dans OpenGL après l'appelle de SDL_SetVideoMode. Résultat, OpenGL retrouve la mémoire, mais cela ne risque-t-il pas d'être lent quand il y aura une centaine de textures à recharger ?
L'ennui aussi est que je suis obligé de mémoriser en VRAM  ou en RAM quand plus de place, des SDL_Surfaces contenant la même chose que ce que j'ai donné à OpenGL. Je le fais de toute façon pour des modifs éventuelles, mais tout mes programmes ne necessiteraient pas forcément cela.

mercredi 26 décembre 2007 à 00:49:29 | Re : SDL/OpenGL problème rappel de SDL_SetVideoMode

luhtor

Ca ressemble à un changement de contexte. En deux mot, SDL fait de la &"&ù$é", et te recrer un nouveau contexte OpenGL, c'est à dire que tout la mémoire vidéo allouée en mode fenetré n'est plus accessible lorsque tu passes en fullscreen. Donc si SDL n'a rien pour gérer ca, t'as plus qu'à faire en sorte qu'on puisse pas changer de mode d'affichage.

"Ca ressemble", ce n'est pas forcément le problème meme si c'est la seule chose qui me vienne en tete.

mercredi 26 décembre 2007 à 01:17:35 | Re : SDL/OpenGL problème rappel de SDL_SetVideoMode

Timidouveg

Si c'est ça, est-ce que ça veut dire que le contexte OpenGL précédent existe toujours en mémoire et prendrait de la place ? Car dans ce cas ce serait pire que ce que je pensais O_O

mercredi 26 décembre 2007 à 01:28:11 | Re : SDL/OpenGL problème rappel de SDL_SetVideoMode

luhtor

J'ai jamais utilisé la SDL, donc je sais pas comment elle fonctionne.

Bon j'ai trouvé ca sur un forum: http://www.developpez.net/forums/archive/index.php/t-199996.html
"j'ai rajouter un appel à ResizeWindow lors du changement de fenêtre parce que normalement il faut réinitialiser TOUT le contexte OpenGL lors d'un appel à SDL_SetVideoMode
en fait, tu as rajouté ResizeViewport() après le passage en plein écran pour réinitialiser le contexte OpenGL"

Ca te dit quelque chose la fonction ResizeViewport ?

mercredi 26 décembre 2007 à 14:31:02 | Re : SDL/OpenGL problème rappel de SDL_SetVideoMode

Timidouveg

Le ResizeViewport de cette discussion était une méthode écrit par l'auteur du sujet. Dedans, il a mis le glViewport(...), glIdentity()... pour que le cadrage OpenGL soit dimensionné correctement après changement des dimensions de la fenêtre.
Dans mon code, je fais systématiquement, pour le moment car c'est inutile, une mise à jour du glViewport donc quoi qu'il arrive le cadrage suit les changements. Le problème n'affecte que les textures apparement, qui sont bien remis à 0 puisque le contexte OpenGL est réinitialisé.
J'ai d'ailleurs regardé le code de l'auteur de cette discussion et il n'utilisait pas de textures. Je crains qu'il constate le même problème quand il les utilisera
Parcontre, je ne sais pas si ça le fait sous Linux, ne l'ayant pas chez-moi (j'ose pas partitionner mon disque).
Oui désolé, je sais que je suis dans un partie Linux, mais je ne trouvais pas de partie OpenGL sous windows sur le forum, et je voulais être sûr de trouver des personnes utilisant OpenGL et SDL. Est-ce que d'ailleurs ce problème est unique à Windows ? Je me pose la question.



Cette discussion est classé dans : problème, opengl, sdl, textures, setvideomode


Répondre à ce message

Sujets en rapport avec ce message

OpenGl:Prob de textures PPM [ par Florian29 ] Salut!Voilà j'ai un problème avec les images ppm pour mes programmes openGl. J'ai développé des programme à la fac qui utilisent des textures ppm. Che SDL semble ne pas fonctionner ? [ par neodelphi ] Bonjour tout le monde ! Voila mon problème : je suis en train d'essayer de faire de l'openGl avec la sdl sous un système linux. Après avoir suivi un t problème police openGl [ par vodkapomme43 ] Bonjour,J'utilise le code suivant pour créer une police avec OPenGL:GLvoid BuildFont(GLvoid)        // Build Our Bitmap Font{ HFONT font; J'ai besoins d'aide please ! [ par mondrone ] #include #include SDL_Surface *screen = NULL; void demarre_opengl(); void creer_fenetre_opengl(); void init_opengl(); void stop_opengl(); void tou SDL/Glut Direct3D/OpenGL ... [ par mondrone ] Je pense que certaines personnes ont deja du poser cette question, et si c'est le cas merci de m'indiquer le post en question car je ne l'ai pas trouv OpenGL: problemes des textures [ par dletozeun ] bonjour,dans mon projet actuel sous devcpp j'affiche un objet 3D avec opengl en utilisant  GL_TRIANGLE_STRIP pour optimiser la vitesse d'affichage.... opengl multitexturing [ par dletozeun ] bonjour, J'ai reussi a mettre en place le multitexturing avec opengl, j'obtiens un melange homogene entre  textures sur un polygone mais le probleme Tutoriaux Complet SDL OpenGL C++ [ par Fireflect ] Bonjours, Je recherche des bons tutoriaux sur le mélange OpenGL SDL C++ sans glut ou quoi que ce soit d'autre avec des sources bien optimisées (simpl Problème OpenGL (GL_POINT) [ par olivier_job ] Bonjour,   J'utilise VC++ 7.0, avec wxWindows. Le problème est le suivant. Sur mon ordinateur, les GL_POINTS apparaissent comme des cercles, alors q transparences en openGL [ par vangeurmasker ] J'ai un probleme dans un projet en OpenGL. J'utilise le canal alpha de mes textures pour gérér les transparences. Mais le probleme est qu'aucune textu


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,608 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.