Programmation avec la SDL/Initialisation de la SDL

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche
Programmation avec la SDL
Sommaire
L' affichage vidéo
L'essentiel
Approfondissement
La gestion des évènements
Annexes
Modifier ce modèle

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 :

Flags de 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;
}