Coder en SDL

image code source

Petite recommandation

Nous vous conseillons tout d'abord de ne pas faire de copier/coller des codes que nous allons vous donner, pour la simple et bonne raison que vous n'apprendrez rien de cette manière et oublierez la majorité des commandes.

Mon premier code

Lorsque vous avez créé votre premier projet, un code assez long et sans doute incompréhensible a dû apparaître. Celui-ci permet simplement un affichage que vous pouvez bien entendu tester, mais nous vous proposons de commencer par le commencement et de prendre un code très simple :

#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>

int main(int argc, char * argv[]) {
return(0);
}
Pas trop dépaysé ?
Si vous le désirez, vous pouvez supprimer le .bmp et garder les include donnés à la création de votre projet. Cependant le code ci-dessus doit vous paraître plus clair. En incluant SDL/SDL.h vous avez toutes les fonctions et tous les headers nécessaires au bon fonctionnement de la SDL, et il y en a beaucoup.
Bon il faut avouer que pour le moment, notre programme ne sert à rien, alors passons au chapitre suivant pour apprendre les bases du code SDL.

Charger et stopper la SDL

Comme un grand nombre de librairies, la SDL doit être initialisée. En effet, pour fonctionner correctement, elle doit charger en mémoire des données. La mémoire devra être libérée dynamiquement ! Si vous ne le faites pas, alors le programme va prendre plus de place que nécessaire et utiliser de la mémoire vive ne pouvant être récupérée qu'en redémarrant votre ordinateur !
Les deux premières fonctions à connaître sont SDL_Init et SDL_Quit.

SDL_Init :
Cette commande charge la SDL en mémoire en prenant un paramètre. Il existe plusieurs constantes que vous pouvez utiliser pour choisir la partie de la SDL que vous souhaitez utiliser dans votre programme. Elles sont données ci-dessous :

Constante Description
SDL_INIT_VIDEO Charge le système d'affichage (video).
C'est la partie que nous chargerons le plus souvent.
SDL_INIT_AUDIO Charge le système de son.
Vous permettra par exemple de jouer de la musique.
SDL_INIT_CDROM Charge le système de CD_ROM.
Vous permettra de manipuler votre lecteur de CD-ROM.
SDL_INIT_JOYSTICK Charge le système de gestion du joystick.
SDL_INIT_TIMER Charge le système du timer.
Cela vous permet de gérer le temps dans votre programme (très pratique).
SDL_INIT_EVERYTHING Charge tous les systèmes listés ci-dessus.

Nous n'utiliserons qu'une seule d'entre elles pour notre moteur 3D : SDL_INIT_VIDEO. En effet, le moteur 3D gère l'affichage dans un jeu et non le reste. La fonction SDL_INIT_AUDIO vous intéressera peut-être mais ne sera pas traitée dans ce tutoriel. Nous vous laissons l'apprendre par vous-même sur le Site du Zéro.
Toutes ces constantes sont en réalité des nombres, mais grâce aux noms ci-dessus, pas besoin de les connaître, donc pour charger l'affichage :
SDL_Init(SDL_INIT_VIDEO);
Si plus tard vous avez besoin de charger plusieurs constantes, ne prenez la SDL_INIT_EVERYTHING que si vous les utilisez toutes, sinon vous allez surcharger votre ordinateur pour rien. Pour charger plusieurs constantes, utilisez le symbole " | " entre chacune, par exemple :
//Chargement de la vidéo et de l'audio.
SDL_Init (SDL_INITT_VIDEO | SDL_INIT_Audio);
Vous pouvez bien sûr en combiner autant que vous voulez par cette méthode.

SDL_Quit :
Cette fonction est bien plus simple d'utilisation, une ligne à mettre quelques soient les constantes ayant été initialisées :
SDL_Quit();
Grâce à cette commande, vous quitterez proprement votre programme.

Mon programme qui initialise puis quitte :

Si vous avez codé en même temps que vous avez lu, votre programme devrait ressembler à ça désormais :
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>

int main(int argc, char * argv[]) {

SDL_Init(SDL_INIT_VIDEO); // Chargement du système de video.

       /*
       Contenu de votre programme
       */


SDL_Quit(); // Libérer la mémoire de la SDL.

return(0);
}
Mis à part une console vous confirmant l'arrêt du programme comme d'habitude, rien ne s'affichera, et c'est normal.

Les erreurs de la SDL :
La fonction SDL_Init renvoie une valeur :
-1 s'il y a une erreur
-0 si tout va bien
La fonction renvoyant la dernière erreur de la SDL est la suivante : SDL_GetError(). On pourra la récupérer dans le fichier standard d'erreur.

Pour que notre programme ait une allure plus professionnelle, vous pouvez changer les valeurs retournées dans les exit ou les return. En effet, quelque soit le système d'exploitation, ces deux constantes renverrons toujours une valeur correcte :
EXIT_FAILURE : Valeur à renvoyer en cas d'échec du programme
EXIT_SUCCESS : Valeur à renvoyer en cas de réussite du programme

Voici normalement votre programme avec la gestion des erreurs :
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>

int main(int argc, char * argv[]) {

if (SDL_Init (SDL_INIT_VIDEO) == -1) { // Vérification du bon démarrage
fprintf (stderr, "Erreur d'initialisation de la SDL : %s \n", SDL_Geterror()); // Ecriture de l'erreur
exit (EXIT_FAILURE); // On quitte le programme
}
SDL_Quit();

return EXIT_SUCCESS;
}

Créer un site gratuit avec e-monsite - Signaler un contenu illicite sur ce site