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.