{{tag>Focal Bionic programmation }}
----
====== SDL : Simple DirectMedia Layer ======
La [[http://www.libsdl.org/|SDL]] //(Simple DirectMedia Layer)// est une [[wpfr>bibliothèque logicielle]] permettant de développer des programmes gérant le son, la vidéo, le clavier, la souris et le lecteur CD.
Elle a notamment été utilisée pour le portage du jeu [[wpfr>Civilization (série de jeux vidéo)|Civilization II]] sous Linux et le jeu [[wpfr>Doom]] sous BeOS.
Cette page traite des deux versions de la SDL.
La bibliothèque est compatible nativement avec le langage C++ et possède des //bindings// pour d’autres langages – la liste complète est disponible sur la page officielle des [[http://www.libsdl.org/languages.php|liaisons avec les langages pour SDL]].
Elle possède plusieurs bibliothèques annexes gérant chacune des éléments additionnels : images, polices, réseau, sons, etc.
La version 3 de SDL (SDL3) est en cours de développement, son principal but est de fournir une totale compatibilité avec le compositeur de fenêtre [[wayland]].
===== Installation =====
Si vous commencez un projet, préférez la version stable (SDL2) ou en la version en cours de développement (SDL3) 8-)
==== Première version de SDL ====
Pour installer les fichiers de développement, installez le paquet [[apt>libsdl1.2-dev]].
Pour la version 1 stable [[:tutoriel:comment_installer_un_paquet|Installez le paquet]] **[[apt>libsdl1.2debian]]**
==== Pour une utilisation simple de SL2 ====
La **[[apt>libsdl2-2.0-0]]** permet de gérer plusieurs fenêtres et est celle couramment utilisée
(voir plus bas pour une utilisation simple des librairies complémentaires)
==== Installation complète de SDL2 ====
Utiliser la commande suivante pour installer SDL2 avec toutes ces libraires:
sudo apt install libsdl2-2.0-0 libsdl2-gfx-1.0-0 libsdl2-image-2.0-0 libsdl2-mixer-2.0-0 libsdl2-net-2.0-0 libsdl2-ttf-2.0-0
==== Installer la version SDL2 pour les développeurs ====
[[:tutoriel:comment_installer_un_paquet|Installez le paquet]] **[[apt>libsdl2-dev]]**.
==== Version en cours de développement - compilation/installation de SDL3 ====
La version 3 de SDL (qui est actuellement en développement) est disponible sur le GitHub du projet [[https://github.com/libsdl-org/SDL|SDL (GitHub)]]. Elle est très simple à compiler.
Clonez le dépôt git du projet et lancez la commande décrite dans le fichier **INSTALL.txt**
cmake -S . -B build && cmake --build build && cmake --install build
Ensuite pourrez l'installer et l'utiliser avec les fichiers d'entête '''' par exemple.
===== Bibliothèques complémentaires =====
Vous pouvez trouver une liste complète des librairies annexes avec cette commande :
sudo apt search libsdl
----
Le tableau ci-dessous contient des liens pour télécharger les paquets des librairies annexes de la SDL1 :
^ Nom ^ Utilité ^ installation stable SDL1 ^ installation dev SDL1 ^
|mixer| gestion de l'audio | **[[apt>libsdl-mixer1.2|libsdl-mixer1.2]]**| **[[apt>libsdl-mixer1.2-dev|libsdl-mixer1.2-dev]]** |
|ttf| écrire sur la fenêtre| **[[apt>libsdl-ttf1.2|libsdl-ttf1.2]]**| **[[apt>libsdl-ttf1.2-dev|libsdl-ttf1.2-dev]]** |
|image| gestion d'image | **[[apt>libsdl-image1.2|libsdl-image1.2]]**| **[[apt>libsdl-image1.2-dev|libsdl-image1.2-dev]]** |
|net| gestion du réseau| **[[apt>libsdl-net1.2|libsdl-net1.2]]**| **[[apt>libsdl-net1.2-dev|libsdl-net1.2-dev]]** |
|gfx| dessin/effet graphique | **[[apt>libsdl-gfx1.2-5|libsdl-gfx1.2-5]]** | **[[apt>libsdl-gfx1.2-dev|libsdl-gfx1.2-dev]]** |
|sound| format des fichiers sonores| **[[apt>libsdl-sound1.2|libsdl-sound1.2]]** | **[[apt>libsdl-sound-dev]]** |
----
Celui-ci pour les bibliothèques annexes de SDL2
Toutes bibliothèques SDL2 sont classifiées ainsi : __libsdl2-**nom**-2.0-0__ pour les versions stable et __libsdl2-**nom**-dev__ pour celles en développement. Grâce à cette indexage vous pouvez les installer facilement depuis un terminal.
^ Nom ^ Utilité ^ installation stable SDL2 ^ installation dev SDL2 ^
|mixer| gestion de l'audio | **[[apt>libsdl2-mixer-2.0-0|libsdl2-mixer-2.0-0]]**| **[[apt>libsdl2-mixer-dev|libsdl2-mixer-dev]]** |
|ttf| écrire sur la fenêtre| **[[apt>libsdl2-ttf-2.0-0|libsdl2-ttf2.0-0]]**| **[[apt>libsdl2-ttf-dev|libsdl2-ttf-dev]]** |
|image| gestion d'image | **[[apt>libsdl2-image-2.0-0|libsdl2-image-2.0-0]]**| **[[apt>libsdl2-image-dev|libsdl2-image-dev]]** |
|net| gestion du réseau| **[[apt>libsdl2-net-2.0-0|libsdl2-net-2.0-0]]**| **[[apt>libsdl2-net-dev|libsdl2-net-dev]]** |
|gfx| dessin/effet graphique | **[[apt>libsdl2-gfx-1.0-0|libsdl2-gfx-1.0-0]]** | **[[apt>libsdl2-gfx-dev|libsdl2-gfx-dev]]** |
==== SDL_mixer (Audio) ====
Cette librairie annexe permet la gestion de l'**audio** [[https://www.libsdl.org/projects/SDL_mixer/ | site officiel]] de cette librairie
==== SDL_ttf (Écriture dans fenêtre graphique)====
Cette librairie est utile pour écrire dans une fenêtre, elle s'appuie sur freetype2 (donc il faut freetype2).
[[https://www.libsdl.org/projects/SDL_ttf/ | site officiel]]
Vous aurez besoin de polices d'écriture.
Voici des sites où vous pouvez trouver vos polices libres : [[https://fonts.google.com/ | Google Fonts]] , [[https://www.fontsquirrel.com/ | FontSquirrel.com]] , [[https://fontain.org/ | Fontain.org]]
==== SDL_image (gestion des images) ====
Cette librairie permet de charger des images, d'analyser un fichier pour connaître son format d'image.
[[https://www.libsdl.org/projects/SDL_image/ | site officiel]]
==== SDL_net (gestion des paquets/trames) ====
Cette librairie permet de former des sockets et des paquets pour les protocoles TCP et UDP [[https://www.libsdl.org/projects/SDL_net/ | site officiel]]
===== Compiler un programme en C/SDL avec GCC ou g++=====
Vous devez avoir installé la version développeur pour compiler vos programmes. **dans votre code vous devez avoir inclus SDL.h.**
Si vous utilisez SDL1 au lieu de SDL2, alors utilisez **sdl-config** au lieu de **sdl2-config**
Placez-vous dans le répertoire où sont enregistrées vos sources. L'installation de SDL fourni un petit script sdl-config qui, appelé avec les paramètres --cflags ou --libs, renseigne correctement le compilateur. tapez alors :
gcc -o executable fichier1.c fichier2.c fichier3.c ... $(sdl2-config --cflags --libs)
gcc peut etre remplacé par g++ si vous programmez en C++.
Pour compiler plusieurs fichiers séparément puis les linker, utilisez :
gcc -c -Wall -Wextra main.c $(sdl2-config --cflags)
gcc -o executable main.o fichier1.o $(sdl2-config --libs)
Pour exécuter :
./executable
===== Compiler vos programmes SDL avec des librairies annexes =====
Les links doivent être placés après ''-lSDL_main'' et ''-lSDL'' pour **SDL1** ou après ''-lSDL2_main'' et ''-lSDL2'' si vous utilisez **SDL2**, sauf si vous utilisez sdl-config bien évidemment
Toutes les librairies se link en respectant ce modèle : ''-lSDL_**type**'' pour SDL1 et ''-lSDL2_**type**'' pour SDL2
Par exemple :
gcc -o prog fichier1.c fichier2.c $(sdl-config --cflags --libs) -lSDL_mixer # Pour SDL1 avec SDL2_mixer
gcc -o prog fichier1.c fichier2.c $(sdl2-config --cflags --libs) -lSDL2_ttf # Pour SDL2 avec SDL2_ttf
===== Pour aller plus loin =====
Si vous savez déjà programmer en C/C++ et que vous voulez apprendre à utiliser la SDL pour vos programmes, il y a de très bons tutoriels :
* [[utilisateurs:amiralgaby:comment_s_adapter_a_la_sdl|Premier programme avec la bibliothèque SDL]]
* [[https://zestedesavoir.com/tutoriels/1014/utiliser-la-sdl-en-langage-c/|Zeste de savoir]]
* [[https://loka.developpez.com/tutoriel/sdl/|Développez.com]]
* [[https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c/17117-installation-de-la-sdl|OpenClassrooms]]
----
//Contributeurs : [[:utilisateurs:lost-in-the-shell]], [[:utilisateurs:sully]], [[:utilisateurs:amiralgaby]].//