Premier programme avec la bibliothèque SDL

Vous souhaitez utiliser la fameuse bibliothèque sdl et elle ne vous paraît pas très claire d'utilisation ?
Parfait ^_^ cette page est la pour vous permettre de vous adapter à la SDL.

Cette page n'est pas là pour réaliser un wiki de la SDL (d'ailleurs le wiki est officiel est disponible en anglais)

Quelques lien intéressant :

Si vous souhaitez utiliser SDL3, un exemple est disponible sur Github. Plus besoin de s'occuper de la boucle de notre programme ! Uniquement par déclencheurs

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"

Et maintenons codons en C !

C'était tout ? oui ! pour le moment :-| ça va se corser, c'est ça qui motive disons… Allez un petit code :

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

Avec ce code vous devriez comprendre comment faire une fenêtre et comment se passe les événements. Pour être plus clair je vais vous expliquer le concept : Chaque fois que vous passer dans SDL_PollEvent vous prenez l'event un tête de file des événements et vous allez réalisé des algorithme selon son type, sa 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

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"

Codons en C !

ici un lien vers un repo où il y a le code

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

  • utilisateurs/amiralgaby/comment_s_adapter_a_la_sdl.txt
  • Dernière modification: Le 07/07/2024, 19:08
  • par Amiralgaby