Programmation avec la SDL/Initialisation de la SDL
Enfin, nous allons pouvoir commencer à coder avec la SDL.
Dans ce chapitre, nous verrons comment initialiser la SDL, opération nécessaire si l'on veut pouvoir l'utiliser.
Un premier code
[modifier | modifier le wikicode]Voici la structure de base pour coder avec la SDL :
#include <SDL2/SDL.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
return 0;
}
Comme on peut le voir, ce code ne diffère presque pas du code de base du C. En fait, on y ajoute seulement l'inclusion de la SDL 2.0 :
#include <SDL2/SDL.h>
Initialisation de la SDL
[modifier | modifier le wikicode]Afin de pouvoir coder avec la SDL, nous devons initialiser celle-ci. Pour cela, nous allons utiliser la fonction SDL_Init. En voici son prototype :
int SDL_Init(Uint32 flags);
La fonction SDL_Init renvoie 0 si l'initialisation a réussi et -1 en cas d'erreur.
La SDL se divise en plusieurs sous-systèmes. Pour initialiser un ou plusieurs sous-systèmes, on utilisera la syntaxe suivante :
SDL_Init(SOUS_SYSTEME);//Pour un seul sous-système
SDL_Init(SOUS_SYSTEME_1 | SOUS_SYSTEME2 | SOUS_SYSTEME_3 | ... );//Pour plusieurs sous-systèmes
Voici les différents flags que l'on peut passer en paramètre de la fonction SDL_Init :
Description | |
---|---|
SDL_INIT_TIMER | Le sous-système Timer, pour la gestion du temps. |
SDL_INIT_AUDIO | Le sous-système Audio. |
SDL_INIT_VIDEO | Le sous-système Vidéo, pour l'affichage graphique. |
SDL_INIT_HAPTIC | Le sous-système Haptic. |
SDL_INIT_JOYSTICK | Le sous-système Joystick. |
SDL_INIT_EVERYTHING | Initialise tous les sous-systèmes. |
SDL_INIT_NOPARACHUTE | Empêche la SDL de gérer les signaux fatals. |
Pour l'instant, nous n'utiliserons que le sous-système Vidéo. Le code sera donc :
SDL_Init(SDL_INIT_VIDEO);
Cette fonction ne peut être utilisée qu'une fois. Si vous voulez initialiser un ou plusieurs sous-systèmes après avoir utilisé SDL_Init, utilisez SDL_InitSubSystem.
On remarquera que le code ci-dessus est équivalent à celui-ci :
SDL_VideoInit(NULL);
Initialiser un ou plusieurs sous-systèmes après la première initialisation
[modifier | modifier le wikicode]Il se peut que vous ayez besoin d'initialiser un sous-système après avoir initialisé au tout début la SDL. Pour cela, vous pouvez utiliser la fonction SDL_InitSubSystem. Celle-ci a exactement la même syntaxe que SDL_Init. Voici son prototype:
int SDL_InitSubSystem(Uint32 flags);
Gestion des erreurs
[modifier | modifier le wikicode]Nous avons vu que la fonction SDL_Init renvoyait -1 en cas d'erreur. Cependant, ce simple -1 ne nous renseigne pas sur la nature même de l'erreur. C'est pourquoi dans la SDL il existe une fonction plus poussée pour récupérer les erreurs : SDL_GetError. Elle renvoie la dernière erreur qui s'est produite au sein de la SDL. Voici son prototype :
char* SDL_GetError(void);
La manière la plus simple de l'utiliser dans le cas d'une erreur de SDL_Init est la suivante :
if(SDL_Init(SDL_INIT_VIDEO) < 0)
{
printf("Erreur d'initialisation de la SDL : %s",SDL_GetError());//on affiche l'erreur
return EXIT_FAILURE;//on sort du programme pour éviter de plus gros problèmes
}
Quitter la SDL
[modifier | modifier le wikicode]Il ne nous reste plus qu'à savoir comment quitter la SDL. Pour cela, rien de plus simple : utilisons SDL_Quit. Voici le code pour quitter la SDL :
SDL_Quit();
Si vous avez utilisé SDL_VideoInit, utilisez plutôt
SDL_VideoQuit();
Quitter un ou plusieurs sous-systèmes
[modifier | modifier le wikicode]Il existe un équivalent de SDL_Quit pour quitter le ou les sous-systèmes que l'on désire. Cet équivalent est SDL_QuitSubSystem et a la même syntaxe que SDL_Init. Voici son prototype :
int SDL_QuitSubSystem(Uint32 flags);
Un second code amélioré
[modifier | modifier le wikicode]Avec ce que nous venons d'apprendre, nous allons pouvoir écrire un second code, qui va servir de base à tous les programmes que vous coderez dans la première et la seconde partie :
#include <SDL2/SDL.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
if(SDL_Init(SDL_INIT_VIDEO) < 0)//initialisation de la SDL
{
printf("Erreur d'initialisation de la SDL : %s",SDL_GetError());//on affiche l'erreur
return EXIT_FAILURE;//on sort du programme pour éviter de plus gros problèmes
}
SDL_Quit();//on quitte la SDL
return 0;
}