====== 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 [[https://wiki.libsdl.org/FrontPage|le wiki est officiel]] est disponible **en anglais**)
Quelques lien intéressant :
  * **(en)**[[https://wiki.libsdl.org/wiki/index| L'index de toutes les pages de la documentation]]
  * **(en)**[[http://www.sdltutorials.com/tutorials|Quelques tutoriels des différentes bibliothèques]]
  * **(en)**[[https://wiki.libsdl.org/APIByCategory|Les fonctions rangées par Catégorie]]
  * **(en)**[[https://wiki.libsdl.org/SDL_Keycode|Les représentations des touches lorsqu'elle sont pressées]]
Si vous souhaitez utiliser SDL3, [[https://gist.github.com/Amiralgaby/ecba154a09141d82f99622ef4704dea4|un exemple est disponible sur Github]]. Plus besoin de s'occuper de la boucle de notre programme ! Uniquement par déclencheurs
===== 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 
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, c'est ça qui motive disons...
Allez un petit code :
#include 
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)**[[https://wiki.libsdl.org/SDL_Event|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 **[[apt>libsdl2-ttf-dev|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
----
//[[:utilisateurs:Amiralgaby|Amiralgaby]] Le 06/08/2022, 10:48//