Je suis en train de programmer un moteur 2D gérant son, déplacement et évênements avec la SDL.
Ma carte graphique est excellente, donc pas de soucis niveau puissance, cependant je souhaite pouvoir m'adapter à des ordinateurs plus anciens donc je me dois de proposer des formats différents d'images (8, 16 24 ou 32 bits) ainsi que certaines fonctions d'accélération proposée par la SDL.
Voici donc mon problème :
- Quand je teste sur mon PC, le seul mode que je peux utiliser est le mode 24bits. Si j'essaie 32 ou 16, j'ai des bugs d'affichage notamment sur les transparences et les effaçages d'images (c'est très net avec les animations), sachant que la SDL me propose évidemment le mode 32bits.
J'utilise des formats bitmaps actuellement de taille différentes mais grâce à la fonction
SDL_DisplayFormat(SDL_Surface* s)
où s est la surface dont il faut modifier le format (donc convertir en 24bits)
Tout s'affiche parfaitement, les sélections sont ok, drag and drop aussi, scrolling ok etc...
Pour l'affichage, j'utilise la SDL_BlitSurface() classique, quand je veux effacer une image, je réaffiche la portion de fond-d'écran par dessus.
Quand je change de fond-d'écran ou qu'il y a un scrolling, alors j'affiche une image noire puis le nouveau fond-d'écran.
J'ai remarqué que tout semble mieux fonctionner quand il y a scrolling pour les mode 16 et 32 bits (lol).
Autre fonction utilisée, la
SDL_MapRGB(format_img,r,g,b)
pour la transparence (colorkey) où r,g,b vont de 0 à 255 et format_img le format de l'image concernée.
J'avais des soupçons car utiliser ce système r,g,b en mode 16 bits [par exemple), ça colle pas, pourtant j'ai lu que la SDL faisait les conversions si nécessaires alors je crois sur parole
Je voudrai donc savoir :
- Pourquoi ça ne marche qu'en 24bits ? Est-ce un format spécial comparé au 16 ou 32bits? J'ai oublié quelque chose? SDL_MapRGB me joue des tours et je ne sais pas l'utiliser correctement ??
Merci et bonnes fêtes
Partager