La SFML possède un binding vers le langage D.
L'objectif de ce binding est de reproduire l'api de la SFML dans un environnement D.
Pour le moment, dans sa version considéré comme stable (la série 1.x), le compilateur ne sait pas manipuler le C++ directement. Ainsi, il a fallu interfacer tous les appels à la SFML dans un langage compréhensible par le compilateur D. La couche d'interfacage utilisé est la CSFML (une interface de la SFML pour le langage C). Le D pouvant s'interfacer facilement avec le C, il suffisait de recréer l'api de la SFML en utilisant les fonctions C fournies par la CSFML.
De fait, la DSFML dépend à la fois de la SFML et de son interface C.
La compilation d'un programme D utilisant la SFML sous windows nécessite donc : Les DLLs de la CSFML (sous windows, par défaut, les différents modules de la CSFML sont liés statiquement avec la version C++, donc une seule bibliothèque dynamique par module est nécessaire).
La première étape consiste à construire les bibliothèques de la SFML (C++). Ouvrez la solution Visual, et en haut à droite dans la liste déroulante du choix des configurations, choisissez la configuration “Release static”. Lancez la construction en cliquant sur “build ⇒ rebuild solution” (ou ctrl + alt + F7). Une fois, la construction terminé, vous devriez avoir dans le dossier lib/vs[2005 ou 2008]/, une série de bibliothèques statiques nommées sfml-[module]-s.lib : Ce sont les bibliothèques statiques dont nous allons avoir besoin pour construire les dll de la CSFML.
Une fois les modules de la SFML construits, il va falloir constuire les dlls de la CSFML. Ouvrez donc visual studio et chargez la solution de la CSFML.
Une fois la solution chargée, assurez vous d'etre dans la configuration de construction “Release DLL” et lancez la construction (“build ⇒ rebuild solutions” ou ctrl + alt + F7).
Quand la construction sera terminée, vous devriez avoir dans le répertoire de la CSFML /lib/vs[2008 ou 2005], une série de DLL (.dll) ainsi que leurs bibliothèques d'import (.lib). Ce sont ces fichiers dont nous allons avoir besoin pour nos programmes D.
En D, sous windows, le linker utilisé (qui s'appelle Optlink) ne sait pas lire le format des binaires générés par Visual. Vous avez deux solutions, soit utiliser les bibliothèques d'import qui sont fournis avec la DSFML (dans le répertoire clib), soit recréer vous même ces bibliothèques d'import.
Pour la deuxième solution, Digital mars met à disposition un outil qui converti les .lib du format Visual vers un format lisible par Optlink : coffimplib (Téléchargeable ici). Son utilisation est simple :
coffimplib inlib[.lib] [outfile[.def|.lib]]
Pour convertir nos bibliothèques, nous allons au préalable en faire une sauvegarde (par exemple renommer tous les csfml-[].lib générés précédemment en bakcsfml-[].lib), puis, par exemple pour convertir le module audio, exécuter dans une console :
coffimplib bakcsfml-audio.lib csfml-audio.lib
Procéder à la même manipulation pour chaque bibliothèques.
Vous avez desormais 5 dlls (une pour chaque module de la SFML) et 5 bibliothèques d'import dans un format compréhensible par le linker.
Le but de cet article n'est pas d'être un tutoriel sur le langage, ainsi cette partie sera très rapide. Pour de plus amples informations, reportez vous au site officiel, à wiki4D ou encore DSource.
dmd
Si vous avez un message d'aide, alors votre environnement est prêt, dans le cas contraire, recommencez les étapes ci dessus.
Pour vérifier que l'environnement est correctement configuré, nous allons compiler un hello world :
import std.stdio; void main() { writefln("Hello world !"); }
Sauvegardez votre fichier (avec l'extension .d).
dmd [nom_du_fichier].d
./[nom_du_fichier].exe
Si vous obtenez
Hello world !
votre environnement de developpement en D est prêt. Dans le cas contraire, reportez vous au sites cités précédemment, pour obtenir de l'aide.
La meilleure solution pour construire la DSFML est d'utiliser le programme DSSS. DSSS est un environnement complet permettant la récupération de bibliothèque, la construction et la gestion de projet D. Téléchargez l'archive (prenez -dmd-win) et décompressez la dans [votre_repertoire]\dmd\ afin que les outils de dsss soit dans le path.
Une fois, que le programme est extrait, ouvrez une console, allez dans le repertoire ou se trouve la DSFML, et enfin dans le répertoire “import”. Tapez dans la console “dsss build -O -release”. Au bout de quelques instants, le programme rendra la main, et si tout s'est déroulé sans erreurs, vous devriez avoir dans le répertoire \lib de la DSFML, 5 bibliothèques dsfml-[].lib.
Ouvrez un nouveau fichier .d et entrez le code suivant :
import dsfml.system.all; // core package, always needed. import dsfml.window.all; // windowing package. void main() { Window app = new Window(VideoMode(800, 600, 32), "Hello world"); app.setFramerateLimit(100); while (app.isOpened()) { Event evt; while(app.getEvent(evt)) { if (evt.Type == Event.EventType.CLOSED) app.close(); } app.display(); } }
Pour le compiler, dans une console, entrez la commande suivante :
dmd [nom_du_fichier].d dsfml-system.lib dsfml.window.lib csfml-system.lib csfml-window.lib "-I[path_du_repertoire_import_de_la_DSFML]" "-L+[path_du_repertoire_clib\win32\]" "-L+[path_du_repertoire_lib\]"
Une fois compilé, n'oubliez pas de copiez à coté les dlls de la SFML que vous utilisez (ici csfml-system.dll et csfml-window.dll). En l'exécutant, vous obtiendrez une fenêtre vide, qui ne gère qu'une seule chose : sa fermeture.
Pour clore ce tutoriel, je vous invite vivement à utiliser DSSS pour gérer vos projets. Votre projet grandissant, il deviendra impensable d'utiliser une ligne de commande pour 10+ fichiers et des arguments et autres bibliothèques. Pour reprendre le code ci dessus, créer un fichier dans le meme répertoire que votre fichier et appelez le dsss.conf (le nom est strict). Dans ce fichier, copiez le texte suivant :
[nom_de_votre_fichier.d] buildflags += -Ipath_du_repertoire_import_de_la_DSFML buildflags += -Spath_du_repertoire_clib\win32\
Sauvegardez le fichier, retournez dans la ligne de commande et tapez simplement :
dsss build
Et voila ! DSSS va scanner l'ensemble de vos imports (ici ceux de la DSFML) et reconstruire l'intégralité de votre programme. Concernant les bibliothèques C, DSFML a été pensé pour une utilisation avec DSSS, de fait, des que vous importez un package (par exemple dsfml.system.all), les bibliothèques d'import adéquates seront automatiquement passées au linker.