Aller au contenu

Programmation avec la SDL/Initialisation de la SDL

Un livre de Wikilivres.
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;
}