Débuter avec SDL
Un article de GuruMed.
Sommaire |
Installation et premiers pas avec SDL
Par Corto
Cette bibliothèque a désormais conquis un grand nombre de développeurs et a acquis une bonne maturité sur notre système puisque nous sommes représentés sur le site officiel. Cet article s'attachera à présenter la SDL et à installer de quoi programmer avec. D'autres suivront pour parfaire nos connaissances.
Présentation
La SDL (pour Simple DirectMedia Layer) est donc une librairie multimédia simple à mettre en oeuvre et destinée à fonctionner sur de nombreux systèmes d'exploitation, s'affranchissant ainsi de leur API. Le but était de faciliter le portage de jeux Windows vers Linux. Ainsi, son concepteur Sam Lantinga (il n'est plus seul aujourd'hui...) s'est mis à développer des fonctions bas-niveau (permettant un accès aisé aux couches matérielles) regroupées en différentes catégories. En effet, cette bibliothèque fournit toutes les primitives nécessaires pour accéder au matériel vidéo et audio, aux périphériques standards (joystick, lecteur de CDROM), aux événements système (actions de la souris, du clavier, ...) ainsi qu'aux timers.
Tous ces domaines sont exploités avec un degré d'abstraction appréciable, même si on subit une perte de performances (c'est d'ailleurs pourquoi le portage de SDL ne supporte pas l'AGA). Cette dernière est toutefois limitée puisque dans le domaine de la video, la SDL exploite les capacités des cartes graphiques et supporte OpenGL. Les résultats dépendent bien sûr de l'implémentation suivant les OS supportés (une demie douzaine officielle à ce jour). Cette bibliothèque multimedia est une aubaine pour l'Amiga et nous vous encourageons à tenter l'aventure et à adapter un maximum d'outils et de jeux, même modestes.
Avis aux développeurs
Il existe une "sdl.library" mais la plupart du temps, c'est encore la lib statique qui est utilisée : le code est donc inclu dans l'exécutable, les utilisateurs n'ayant dans ce cas rien à installer. Quant aux développeurs, il faut qu'ils commencent par télécharger l'archive de la version 1.2.5 sur le site de Gabriele Greco qui maintient la version Amiga. Je vous recommande vivement de lire toute la page (oui, jusqu'au bout), elle contient des informations qui seront très utiles par la suite. On entre le petit monde SDL. Pour poursuivre, vous aurez besoin d'une carte graphique (avec CyberGfx ou Picasso96, les deux fonctionnent désormais) et d'un compilateur C (GCC, VBCC ou SAS/C). Nous effectuerons les tests avec GCC.
L'archive contient beaucoup de documentation en HTML, les includes, les libs (pour MorphOS qui est supporté), des exemples dont un jeu (SDLroids) et un readme pour installer cette version Amiga.
Avant de poursuivre, signalons qu'une autre implémentation de la SDL existe, sortie dans une version plutôt complète, en cette fin octobre. Il s'agit de WarpSDL qui ne se base pas du tout sur les sources de la version originale. Elle respecte tout à fait l'API SDL mais son implémentation spécialement Amiga permet de meilleures performances (et gère l'AGA !!). On ne dispose pas encore de SDK pour pouvoir développer avec mais quelques programmes ont été adaptés comme ScummVM qui fonctionne bien sur mon 060 en AGA.
Si le readme le dit ...
Le texte détaille la marche à suivre pour chacun des compilateurs (VBCC a toutefois été oublié). Je me suis attaché au cas n°3, à savoir celui concernant GCC 68k. Vous pouvez suivre les indications mais elles ne m'ont pas complètement satisfait, en particulier les copies de fichiers dans "GG:lib" et "GG:include" (dans le cas de la bibliothèque partagée). Ca fonctionnera mais ces répertoires sont destiné à recevoir des libs et includes internes à GCC, alors que notre "libSDL.a" est une lib additionnelle mais propre à GCC et que nos includes sont indépendantes du compilateur (comme s'il s'agissait d'includes système). Attention donc si vous utilisez plusieurs compilateurs et que vous tenez à faire les choses proprement.
Pour ma part, j'ai préféré copier la lib "libSDL.a" dans "GG:m68k-amigaos/lib" et le répertoire d'includes "SDL" dans "GG:os-include". Si vous souhaitez utiliser la bibliothèque partagée (library), il faudra aussi s'occuper de l'inline et de sdl-config.
Lorsque vous recompilerez des programmes, vous devrez veillez à vérifier que l'include de la SDL répond bien à l'écriture <SDL/SDL.h> et non <SDL.h>. Comme il est dit sur le site (nous y revoila), la librairie est prévue pour effectuer des sorties de debug. Si vous ne souhaitez pas les voir apparaître, il faudra inclure dans votre code la ligne suivante pour ne pas être ennuyé à l'édition de liens : void kprintf(char *a, ...){}
Ca par exemple !
Le répertoire "examples" contient des sources simples et les exécutables correspondants, ainsi qu'un fichier makefile pour tout recompiler (ce qui peut d'ailleurs être assez long avec GCC sur un processeur modeste ...). Ces exemples (tout comme SDLroids) font appel à la "sdl.library" qui doit être placée dans le traditionnel répertoire "libs:".
Pour utiliser la lib statique, récupérez quelques exemples sur www.libsdl.org, dans la partie "démos". Je vous conseille pour l'instant : fire, water et plasma. Ca suffira pour illustrer la compilation de programmes écrits sur d'autres plates-formes. En se plaçant tour à tour dans chacun de leur répertoire après décompression, on ne s'occupe plus des fichiers de configuration et des makefile. Compilons ces exemples simples en ligne de commandes, avec fire pour commencer :
gcc -c fire.c gcc -o fire fire.o -lSDL -ldebug
Idem pour l'exemple plasma. Dans le cas où il y a plusieurs fichiers, pour water, il suffit d'étendre le principe pour compiler tous les fichiers C et de lier ensuite les fichiers O générés :
gcc -c water water.c fps.c fixsin.c gcc -o water water.o fps.o fixsin.o -lSDL -ldebug
Vous venez d'effectuer le "portage" de 3 démos en quelques minutes ! A vous maintenant de poursuivre, d'étudier d'autres exemples, de les modifier et enfin de créer. Une mailing-list est là pour vous épauler : les références sont dans le readme. On peut réaliser des choses simples très rapidement mais la SDL permet d'arriver aussi à des réalisations très abouties comme ScummVM (le moteur de jeux Lucas Art), xRick (clône de Rick Dangerous), TuxPuck, ... Suivez aussi l'actualité sur AmigaImpact, on y fait souvent référence aux nouvelles adaptations de SixK.
