reseau social

Mise en bouche SDL

Un article de ToutProgrammer.com.

SDL est un framework multi-plateforme (pour Linux, Windows, MacOS, ...) permettant la réalisation d'applications multimédia. Cet article propose une courte présentation des différents composants de SDL.

Sommaire

[modifier] Introduction

Cela fait déjà un petit moment que l'envie me titille de parler de la conception de jeux sous GNU/Linux et notamment des différentes bibliothèques utilisables à cet effet.

Et là, force est de constater que le moment est particulièrement bien choisi et cela pour deux raisons:

  • premièrement, il vient d'y avoir un article sur ClanLib, l'autre bibliothèque en vogue.
  • deuxièmement, car d'ici deux jours va sortir un jeu que j'ai développé avec SDL et qui vous permettra d'apprécier (en tout cas, j'espère) ce qu'on peut faire avec cette bibliothèque.

Tout d'abord, replaçons-nous dans le contexte...

SDL (Simple Directmedia Layer) est une bibliothèque pour le développement d'applications multimédia multi-plateformes. Placée sous licence LGPL, elle a été utilisée pour le développement de nombreuses applications, aussi bien libres que commerciales.

Son auteur Sam Lantinga est chef programmeur chez Loki Entertainment Software (société dévouée au portage de grands jeux sur Linux), où SDL est d'ailleurs, l'un des principaux outils de développement.

Notons au passage que Loki, a porté Civilization: Call To Power ou encore Myth II sous Linux.

Je vais maintenant essayer de définir les grandes parties de SDL, mais il ne s'agit là que d'une brève introduction et vous trouverez à la fin de l'article quelques liens si vous voulez approfondir la chose...

SDL peut être "coupé" en 4 parties:

  • vidéo,
  • événements,
  • audio,
  • divers.

[modifier] La gestion vidéo

  • passage en n'importe quel mode vidéo (8bpp ou plus) avec support logiciel si le mode vidéo n'est pas supporté par le matériel,
  • possibilité d'écrire dans un framebuffer,
  • créer des surfaces avec des couleurs ou un alpha blending choisi,
  • les surfaces allouées sont automatiquement converties au format désiré en optimisant l'allocation,
  • l'accélération matérielle est utilisée si elle est supportée par le matériel.

Tout cela est bien pratique et permet d'obtenir un niveau d'abstraction très intéressant mais on s'étonnera quand même du choix des fichiers *.bmp comme fichier image par défaut qui est d'ailleurs le seul format de fichier supporté à la base...

[modifier] La gestion des événements

  • changement de visibilité de la fenêtre,
  • entrées clavier,
  • entrées souris,
  • entrées joystick,
  • événements personnalisés,
  • requête utilisateur de fin d'exécution.

Toutes les interactions habituelles sont donc possibles.

De plus, l'accès à la file d'événements est possible dans tous les sens (création d'événements, consultation, etc...).

À noter aussi que chaque événement peut être activé ou désactivé à volonté par un simple appel à SDL_EventState().

Il est également possible de mettre en place un filtre (une fonction) fourni par l'utilisateur avec SDL_SetFilterEvent(), appelé par SDL avant de placer l'événement dans la file.

[modifier] La gestion du son

  • gestion 8 ou 16 bits de l'audio, mono ou stéréo, avec des conversions si le format n'est pas supporté par le matériel,
  • l'audio a son propre thread démarré à l'initialisation de l'application.

Tout comme dans le cas de la vidéo, un seul format de fichier est chargeable par défaut, les *.wav (pas cool...)

[modifier] Divers: Threads, CD-ROM, Timers

  • API complète de gestion du lecteur de CD-ROMs (lecture des pistes, détections des lecteurs CD-ROM installés, accès aux fichiers de données sur le CDROM),
  • API simple de création de Threads,
  • synchronisation simple grâce aux sémaphores binaires,
  • récupérez le temps écoulé en millisecondes,
  • attendre un nombre déterminé de millisecondes,
  • définir un simple timer de 10ms de résolution.

Donc, voilà pour ce qui est d'un premier tour d'horizon de SDL et de ses fonctionnalités...

A noter quand même que utilisée seule, cette bibliothèque souffre de quelques limitations (format d'image bmp uniquement, fichier son en wav etc...).

Heureusement depuis ses débuts, de nombreux contributeurs (y compris l'auteur lui-même) ont apportés leur soutien à ce projet et de nombreuses modules ont vus le jour.

Voilà juste un échantillon des plus utilisés :

  • SDL_image: bibliothèque pour charger différents formats d'image (BMP, PNM, XPM, PCX, GIF, JPEG, PNG, TGA.)
  • SDL_mixer: bibliothèque pour le son (plusieurs canaux sons 16bits stéréo en simultanée avec MOD, MIDI, Ogg et MP3 gérés)
  • SDL_net: bibliothèque pour gestion réseau (TCP, UDP).
  • SDL_console: affichage d'une console à la Quake.
  • SDL_ttf: bibliothèque pour l'utilisation des polices de caractères TrueType.
  • ...

Grâce à toutes ces contributions, de nombreux utilisateurs et un Sam Lantinga des plus actifs, l'utilisation de cette bibliothèque est vraiment agréable et permet de faire des jeux très aboutis sans se prendre la tête avec des problèmes de matériel ou autres.

De plus en plus de personnes commencent à s'intéresser au développement de jeux grâce à cela, et l'on peut déjà constater que des jeux vraiment très intéressants commencent à apparaître sur GNU/Linux, pourvu que ça dure...

Pour ceux que cela intéresse à poursuivre l'exploration de la bibliothèque, vous trouverez ci-dessous quelques liens sur des sites intéressants...

http://www.libsdl.org/: la page d'accueil de SDL

http://www.megastep.org/SDL/: programmer des jeux sous Linux avec SDL.

http://www.towbowltactics.com/: le site de mon jeu, TowBowl Tactics.

[modifier] Historique de l'article

Cet article, réalisé par Toweld, a été publié pour la première fois le 28 novembre 2001 sur le site LinuxFrench.net sous licence Creative Commons License Non Commerciale.