Simple and Fast Multimedia Library

SFML est une interface de programmation destinée à construire des jeux vidéo ou des programmes interactifs. Elle est écrite en C++, mais également disponible dans divers langages comme C, D, Python, Ruby, OCaml ou Microsoft .NET. Elle a entre autres pour but de proposer une alternative orientée objet à la SDL.

Simple and Fast Multimedia Library

Informations
Développé par

Laurent Gomila

Marco Antognini (portage Mac OS X)
Dernière version 2.5.1 ()[1]
Dépôt github.com/SFML/SFML
Écrit en C++
Système d'exploitation Multiplateforme
Environnement Mac OS X, Windows, GNU/Linux
Langues Multilingue
Type Bibliothèque logicielle
Licence Licence zlib/png
Site web www.sfml-dev.org

Elle a également la particularité de fournir un graphisme 2D accéléré en utilisant OpenGL en interne, qui permet à l'utilisateur de s'affranchir de la gestion d'une pseudo-3D.

Composée de nombreux modules, elle peut être utilisée en tant que système de fenêtrage minimal pour s'interfacer avec OpenGL, ou en tant que bibliothèque multimédia riche en fonctionnalités pour construire des jeux vidéo ou des programmes interactifs.

Modules

SFML possède actuellement cinq modules distincts spécialisés. Ces différents modules sont tous utilisables séparément (sauf le module graphique qui dépend aussi du module de fenêtrage) mais dépendent tous du module système.

Module système

Le module système gère principalement le temps (horloge...). Il propose aussi un système de thread permettant d'exécuter en parallèle plusieurs séquences d'instructions, par exemple pour améliorer les performances ou créer un gestion efficace du réseau. Néanmoins les développeurs conseillent l'utilisation de la classe std::thread présente au sein de la bibliothèque standard depuis la norme C++11[2].

Module de fenêtrage

Le module de fenêtrage gère la création des fenêtres et leurs caractéristiques (taille, plein-écran, anticrénelage, synchronisation verticale, framerate...). Il gère aussi les interactions avec l'utilisateur grâce à un système d'événements (clavier, souris, joystick...). Enfin il peut servir à utiliser SFML comme interface avec OpenGL, qui n'est pas suffisant à lui seul pour créer un programme complet et nécessite entre autres un système de fenêtrage et d'interactions avec l'utilisateur.

Module graphique

Le module graphique permet de dessiner tout objet qui sera visible dans la fenêtre (rectangles, disques, polygones, textes... mais aussi formes plus complexes grâce aux tableaux de points) et d'y appliquer une texture. Ces objets peuvent être transformés (translation, rotation, homothétie). Il gère aussi la caméra 2D et permet l'exécution de shaders écrits en GLSL.

Module audio

Le module audio permet de jouer des sons et des musiques, aux formats WAV, OGG/Vorbis ou FLAC (pour des raisons de licence le format MP3 n'est pas supporté[3]). Il gère aussi des effets simples comme le volume, la hauteur, la spatialisation ou la lecture en boucle.

Module réseau

Le module réseau permet d'utiliser de manière portable les sockets, avec le protocole TCP (connecté) ou le protocole UDP (non connecté) et propose un système de paquets pour sérialiser aisément des données. Il permet aussi de communiquer avec un serveur HTTP et de transférer des fichiers avec le protocole FTP.

Hello World

Ce qui suit est un programme simple permettant d'avoir un aperçu rapide de la SFML 2.0. Ce code se contente d'ouvrir une fenêtre et d'y afficher le texte « Hello World » sur une image affichée en arrière-plan.

#include <SFML/Graphics.hpp>
int main()
{
    // Crée la fenêtre principale avec comme titre "Hello World"
    sf::RenderWindow window(sf::VideoMode(800, 600), "Hello World");

    // Charge un sprite à afficher
    sf::Texture texture;
    if (!texture.loadFromFile("background.jpg"))
    {
        return EXIT_FAILURE;
    }
    sf::Sprite sprite(texture);

    // Crée un texte
    sf::Font font;
    if (!font.loadFromFile("arial.ttf"))
    {
        return EXIT_FAILURE;
    }
    sf::Text text("Hello World", font, 18);

    // Boucle principale
    while (window.isOpen())
    {
        // Gestion des événements
        sf::Event event;
        while (window.pollEvent(event))
        {
            // Fermeture de la fenêtre
            if (event.type == sf::Event::Closed)
            {
                window.close();
            }
        }
        
        window.clear(); // Efface l'écran
        window.draw(sprite); // Affiche le sprite
        window.draw(text); // Affiche le texte
        window.display();  // Met à jour la fenêtre
    }
    return EXIT_SUCCESS;
}

Langages supportés

Le numéro indiqué donne la version à laquelle la bibliothèque est disponible.

Liaisons officiels

Liaisons externes

Historique des versions

Logo de la version 1.6.
Logo depuis la version 2.0.
  • 1.0 ()
    • 1.1 ()
    • 1.2 ()
    • 1.3 ()
    • 1.4 ()
    • 1.5 ()
    • 1.6 () : il s'agit principalement de corrections de bogues, l'équipe travaillant principalement sur la version 2.0 de la bibliothèque.
  • 2.0 () : Refonte complète de la bibliothèque.
    • 2.1 () : Correction de bugs [4].
    • 2.2 ()
    • 2.3 ()
      • 2.3.1 ()
      • 2.3.2 ()
    • 2.4.1 ()
    • 2.4.2 ()
    • 2.5 ()

Références

Voir aussi

Articles connexes

Liens externes

  • Portail de l’informatique
  • Portail des logiciels libres
  • Portail de la programmation informatique
Cet article est issu de Wikipedia. Le texte est sous licence Creative Commons - Attribution - Partage dans les Mêmes. Des conditions supplémentaires peuvent s'appliquer aux fichiers multimédias.