Premier programme avec la bibliothèque SDL

Vous souhaitez utiliser la fameuse bibliothèque sdl et elle ne vous parait pas très claire d'utilisation ?
Parfait ^_^ cette page est là pour vous donner les bases et vous aider à compiler votre application.

Quelques lien intéressant :

Inclure la bibliothèque dans vos projets pour l'utiliser ?

Partons du principe que vous l'avez installée via un gestionnaire de paquet, c'est toujours plus simple sous GNU/Linux 8-)

Il faut simplement mettre un macro signifiant que vous l'incluez dans le fichier .c :

#include <SDL2/SDL.h>

vous pouvez aussi utiliser

#include "SDL.h"

Notre premier programme

Et maintenons codons en C !

C'était tout ? oui ! pour le moment :-| ça va se corser

main.c
#include <SDL2/SDL.h>
 
int main(int argc, char *argv[]) {
    SDL_bool done;
    SDL_Window *window;
    SDL_Event event;                        // On declare la structure d'event
 
    SDL_Init(SDL_INIT_VIDEO);               // Initialisation de la SDL2
 
    window = SDL_CreateWindow(  // Créer la fenêtre
        "SDL première fenêtre pour comprendre",
        SDL_WINDOWPOS_CENTERED,
        SDL_WINDOWPOS_CENTERED,
        640,
        480,
        SDL_WINDOW_OPENGL
    );
 
    // Check si la fenêtre à pu être crée
    if (window == NULL) {
        SDL_Log("La fenêtre n'a pas pu être créer %s", SDL_GetError());
        SDL_Quit();
        return 1;
    }
 
    done = SDL_FALSE;
    while (!done) {                         // Boucle du programme
        while (!done && SDL_PollEvent(&event)) {
            switch (event.type) {
                case (SDL_QUIT): {          // Dans le cas de fermeture de fenêtre
                    done = SDL_TRUE;
                    break;
                }
 
               case (SDL_KEYDOWN): {
               		SDL_Log("L'utilisateur vient juste de presser la touche %s", SDL_GetKeyName(event.key.keysym.sym));
               }
            }
        }
        SDL_Delay(1); // Repose votre OS durant quelques millisecondes (je déconseille de mettre > 10 car inutile)
    }
 
    SDL_DestroyWindow(window);        // On ferme la fenêtre visuellement et on la détruit en mémoire
 
    SDL_Quit();                       // Nettoyage des allocations mémoire
    return 0;
}
Si vous souhaitez utiliser SDL3, il est possible de n'utiliser que des déclencheurs : Plus besoin de s'occuper de la boucle de notre programme ! un exemple est disponible sur Github

Avec ce code vous devriez comprendre comment faire une fenêtre et comment se passe les évènements. Pour être plus clair : Chaque fois que l'application appelle SDL_PollEvent, le premier évènement qui attend d'être traité et récupéré et l'application peut le manipuler (faire des conditions, avoir un comportement selon le type ou une valeur).

(en)la liste des events sur le wiki officiel

Un Event peut avoir comme type :

  • key pour les touches de clavier
  • motion pour les mouvements de souris
  • button pour les click de souris
  • (plein d'autre voir la doc au-dessus)

Si l'Event est de type key alors vous pouvez avoir :

  • sont type : appuyé SDL_KEYDOWN ou relâché SDL_KEYUP
  • sont keysym : c'est à dire sa valeur

Si l'Event est de type mouse alors vous pouvez avoir :

  • FIXME

Si l'Event est de type button alors vours pouvez avoir :

  • FIXME

Il y a beaucoup d'autre type d'Event voir la doc au-dessus

Compilez !

Nous utilisons SDL2 donc il faut faire :

gcc -o prog -Wall main.c `sdl2-config --cflags --libs`

Executez !

Et voilà ! votre exécutable prêt à être exécuté via

./prog

Notre second programme

Ici on va écrire dans la fenêtre :-)

Inclure une librairie annexe

Ça va être un peu spécial puisque nous aurons besoin de sdl2-ttf. On doit bien évidemment inclure SDL_tff.h pour utiliser les fonctions de cette librairie.

#include "SDL_ttf.h"

Compilez !

Nous utilisons SDL2 et SDL2_tff donc il faut faire :

gcc -o window window.c -Wall `sdl2-config --cflags --libs` -lSDL2_ttf

Exécutons !

./window

Amiralgaby Le 06/08/2022, 10:48