I. Introduction

La bibliothèque de jeux SDL 2 a été présentée par Ryan « icculus » Gordon à l'occasion des Steam Dev Days. Ryan est développeur freelance depuis quinze ans ; il s'est spécialisé dans le portage de jeux vidéo sur systèmes Unix et cela pour de nombreuses grandes entreprises (Valve, Crytek, Loki, Google, Dice, EA Games, Epic Games…). Il fait aussi partie de l'équipe de développeurs de la SDL.

I-A. SDL 2

La Simple DirectMedia Library (SDL) est une bibliothèque se voulant être une réponse open source à la bibliothèque de jeux de Microsoft : DirectX. Pour cela, la SDL est une bibliothèque multiplateforme, puissante, rapide et facile à utiliser. Cela fait plus de quinze ans qu'elle existe et elle est utilisée dans de nombreux jeux vidéo et elle possède donc de très nombreux utilisateurs.

I-A-1. Historique

Le projet a été initié par Sam Lantinga avec Executor. Ces outils étaient utilisés par Loki Software, une entreprise en charge de faire des portages de grands jeux commerciaux sur Linux (Quake 3, Neverwinter Nights…). Maintenant, la SDL est un standard dans les projets multiplateformes.

I-A-2. Fonctionnalités

La bibliothèque supporte les systèmes d'exploitation modernes et de nombreux périphériques. C'est un framework portable pour les jeux. Elle est complètement développée en C et il existe de nombreux supports dans les autres langages. Elle simplifie les choses compliquées telles que l'ouverture de fenêtres, la gestion des événements, les contextes de rendu. La licence utilisée est la zlib (une licence plus simple et plus ouverte que la LGPL).

Parmi les plateformes supportées, on peut citer :

  • Linux ;
  • Mac OS X ;
  • Windows ;
  • Unix ;
  • Android ;
  • iOS ;
  • Haiku ;
  • Raspberry Pi.

Par rapport à la première version de la bibliothèque, les supports de Amiga et de la Dreamcast ont été abandonnés en même temps que d'autres plateformes tout aussi ésotériques.

La SDL gère les soucis de compatibilité 64 bits et les problèmes de boutisme.

II. Les modules (sous-systèmes) de la SDL 2

Ryan Gordon a succinctement exposé les différents sous-modules de la bibliothèque. Voici les principaux.

II-A. Vidéo

Depuis la version 2 de la bibliothèque, il est possible de gérer plusieurs fenêtres et plusieurs écrans. La bibliothèque permet de faire un rendu purement logiciel ou de passer par OpenGL, Direct3D, ou OpenGL ES. La gestion des contextes OpenGL est simplifiée. Finalement, le module permet de créer des boîtes de messages (et cela de façon portable) ou encore, de gérer les événements du système d'exploitation.

Le module vidéo expose les concepts de fenêtres, les surfaces (CPU), les textures (GPU) et OpenGL.

II-B. Rendu

Ce module, pour le rendu, permet d'afficher facilement des éléments 2D accélérés par le GPU tels que les sprites, les opérations sur les couleurs, la transparence, les primitives, le redimensionnement. Si vous avez besoin de plus de fonctionnalités, vous pouvez toujours utiliser OpenGL.

II-C. Événements

Tous les événements nécessaires pour créer un jeu sont disponibles :

  • événements du système d'exploitation (souris, clavier, fenêtre) ;
  • mode en coordonnées relatives pour la souris ;
  • gestion du toucher ;
  • gestes ;
  • joysticks et contrôleur de jeux (tout périphérique est assimilé à une manette de Xbox 360) ;
  • chronomètres.

II-D. Joysticks

Le module des joysticks permet d'accéder à vos manettes, de connaître le nombre de boutons, d'axes et de chapeaux présents. La bibliothèque détecte aussi les connexions et déconnexions des périphériques.

II-E. Contrôleur de jeux

Avec le module de contrôleur de jeux, tout périphérique sera assimilé à une manette de Xbox 360. La configuration des boutons est automatique pour les contrôleurs de jeux connus dans la base de données. Le mode Steam « Big Picture » est supporté et les utilisateurs peuvent ainsi configurer leurs contrôleurs. Même si ce module est moins flexible, il fonctionne très bien.

II-F. Haptic

Sous le nom de Haptic, il faut penser au retour de force. Le Haptic supporte les manettes ainsi que les souris.

II-G. Audio

Le module audio est de très bas niveau (peut-être trop). Il permet de gérer plusieurs périphériques, leur connexion et déconnexion, le son mono, stéréo, le 5.1 et différentes précisions de sons. Pour jouer un son, il faut fournir des données PCM dans un callback (appelé dans un thread séparé).

Vous pouvez ne pas vouloir l'utiliser, dans ce cas, il vous est conseillé d'utiliser SDL_Mixer ou OpenAL.

II-H. Threads

Le module de threads propose les fonctionnalités habituelles de manière totalement portable : threads, mutexes, sémaphores, conditions, variables atomiques.

Un thread peut être nommé et la SDL se débrouillera pour faire apparaître son nom lors du débogage.

II-I. Et plus encore

Sous Windows, la SDL ne repose pas du tout sur la bibliothèque C et vous n'aurez donc aucun souci de compatibilité à l'exécution. De plus, la SDL peut vous indiquer où vous devez enregistrer vos sauvegardes, ou encore, où vous devriez installer le jeu.

II-J. Dans le futur

Dans les prochaines versions de la SDL, le support de plusieurs souris sera ajouté, ainsi que la capture audio et vidéo, la gestion du son 7.1, Wayland, Mir, libdrc, le support de WinRT et du Windows Store, un module de compatibilité avec la SDL 1.2…

III. Vidéo


Cliquez pour lire la vidéo


IV. Commenter

Vous pouvez commenter et donner vos avis dans la discussion associée sur le forum.