eepp est un framework de développement de jeux et d'applications multiplateforme open source fortement axé sur le développement d'interfaces utilisateur graphiques riches.
Prise en charge officielle de Linux, Windows, macOS, Android et iOS.
Exporte vers HTML5 en utilisant emscripten avec quelques limitations mineures.
Fonctionne également sur BSD et Haiku.
Widgets de base pour gérer les objets application/jeu en tant que nœuds, avec tous les événements d'interaction d'entrée de base (clics, pression sur une touche, survol de la souris, focus, etc.).
Système d'interface utilisateur complet, prise en charge de l'animation, mise à l'échelle, rotation, découpage, événements, messages, etc.
Prise en charge des thèmes et des skins/décorations.
Prise en charge de la densité de pixels (mise à l'échelle des éléments de l'interface utilisateur définie par la densité de pixels de l'écran).
Tous les widgets de base sont implémentés (bouton, zone de texte, zone de liste déroulante, zone de saisie, menu, zone de liste, barres de défilement, etc.).
Dessinez le support d’invalidation. Il peut être utilisé pour créer de vraies applications, avec une faible utilisation des ressources (redessine uniquement lorsque cela est nécessaire).
Système de mise en page similaire aux mises en page Android ( LinearLayout, RelativeLayout, GridLayout ).
Fonctionnalités avancées telles que la sélection de texte, le copier-coller et les raccourcis clavier.
Charger et styliser des mises en page à partir de fichiers XML
Styliser avec des feuilles de style en cascade
Rendus pour OpenGL 2 (pipeline fixe), OpenGL 3 (pipeline programmable), OpenGL ES 2, OpenGL ES 1 et OpenGL Core Profile.
Batch Renderer (tout le rendu est automatiquement regroupé par le moteur).
Prise en charge des polices (polices TrueType, BMFont et XNA).
Prise en charge du tampon de trame.
Prise en charge des shaders (avec shaders de pipeline fixes automatiques vers convertisseur programmable).
Prise en charge des objets tampon de sommet.
Système de particules.
Console extensible.
Sprites animés.
Prise en charge de l'Atlas des textures (création et mise à jour automatiques de l'atlas des textures, éditeur inclus).
Masques d'écrêtage (pochoir, ciseaux, avions)
Prise en charge des bitmaps redimensionnables Nine Patch.
Dessinables primitifs.
De nombreux formats d'image pris en charge (y compris SVG rastérisé), prise en charge des textures compressées (téléchargement direct sur le GPU lorsque cela est possible).
Module basé sur le backend, cela signifie que vous pouvez facilement créer un backend pour la gestion des fenêtres/entrées.
Prend actuellement en charge SDL 2 comme backend.
Prise en charge du presse-papiers.
Curseurs matériels.
Gestionnaire d'affichage
Prise en charge des manettes.
Fournit tous les éléments de base pour la prise en charge multithread complète de la bibliothèque, la prise en charge des formats de fichiers pour l'emballage, les horloges, le gestionnaire de ressources, le traducteur et bien plus encore.
Classe Virtual File System (abstraction des fournisseurs d'actifs dans un seul système de fichiers virtuel, abstraction des fichiers zip et du système de fichiers local en un seul pour un chargement transparent des ressources, similaire à PhysicsFS).
Gestionnaire de mémoire personnalisable. Utilisé par défaut en mode débogage pour suivre les fuites de mémoire.
Prise en charge UTF8, UTF-16, UTF-32, Ansi, Wide Char.
Classe de chaîne utilisant les caractères UTF-32 en interne.
Macros de débogage
Fonctions et modèles à usage général (vecteur, quad, polygone, etc.).
Classes d'interpolation avec assouplissement.
Certains utilitaires mathématiques mineurs incluent la mise en œuvre du générateur de nombres aléatoires Mersenne Twister, le bruit Perlin et bien plus encore.
Requêtes Web avec client HTTP, avec support TLS (fourni par mbedtls ou openssl).
Requêtes HTTP asynchrones.
Transferts de fichiers avec client FTP et client FTPS (FTP avec TLS explicite).
Sockets TCP et UDP.
Prise en charge du codage de contenu HTTP et du codage de transfert.
Prise en charge du proxy HTTP.
Prise en charge des réponses HTTP compressées.
Également prise en charge de la reprise/continuation du téléchargement HTTP et des redirections de suivi automatiques.
Système basé sur des nœuds pour une gestion facile des scènes.
Contrôle total des événements de nœud (clics, survol de la souris, focus, etc.).
Système d'événements.
Système de messages de nœuds.
Actions programmables pour les nœuds (fondu, rotation, déplacement, mise à l'échelle, etc.).
Cartes en mosaïque avec lumières dynamiques logicielles.
Éditeur de cartes complet.
Éditeur d'interface utilisateur très simple. Chargez des mises en page à partir d'un fichier XML et voyez les modifications apportées en temps réel.
Éditeur d'atlas de textures. Un outil très simple pour permettre au développeur de créer et d'éditer des atlas de textures.
Éditeur de cartes : un éditeur de cartes avancé mais simple pour le moteur de jeu. Il lui manque plusieurs fonctionnalités puisque je n'ai pas eu le temps de travailler dessus, cet outil particulier mourra probablement au profit du support des cartes TMX dans un futur proche (mais je ne suis pas fan des cartes TMX, donc il n'y a pas de décision pour l'instant).
La documentation se trouve ici. Je travaille actuellement à l'améliorer. Environ 50 % du projet est actuellement documenté et nécessite donc encore beaucoup de travail. Veuillez consulter les exemples de code situés dans src/examples
et vous pouvez également consulter le test ( src/test
) et les outils ( src/tools
).
Je m'efforce d'améliorer la documentation sur le module d'interface utilisateur, car il s'agit actuellement du module le plus important et le plus complexe, mais il manque de documentation appropriée. Si vous avez des questions, vous pouvez me contacter à tout moment.
Le référentiel utilise des sous-modules git, vous devrez donc cloner le référentiel et ses sous-modules. Pour y parvenir facilement, vous pouvez simplement cloner avec :
git clone --recurse-submodules https://github.com/SpartanJ/eepp.git
ecode est un éditeur de code inspiré de Lite. Il utilise le dernier thème CSS pur basé sur le thème sombre Plasma par défaut : Breeze Dark.
Éditeur qui affiche en temps réel les modifications sur n'importe quelle mise en page et CSS pour aider à accélérer le développement des interfaces utilisateur. La capture d'écran affiche certains des widgets par défaut disponibles dans eepp.
Petit outil, utilisé pour créer et éditer des atlas de textures.
Éditeur de cartes 2D utilisant le thème skin par défaut (utilisant un atlas de texture unique avec des images à 9 patchs).
Cela devrait sembler très familier à tout développeur Android. Il s'agit d'une fenêtre avec les widgets les plus basiques dans un affichage linéaire vertical.
< window layout_width = " 300dp " layout_height = " 300dp " window-flags = " default|maximize|shadow " >
< LinearLayout id = " testlayout " orientation = " vertical " layout_width = " match_parent " layout_height = " match_parent " layout_margin = " 8dp " >
< TextView text = " Hello World! " gravity = " center " layout_gravity = " center_horizontal " layout_width = " match_parent " layout_height = " wrap_content " backgroundColor = " black " />
< PushButton text = " OK! " textSize = " 16dp " icon = " ok " gravity = " center " layout_gravity = " center_horizontal " layout_width = " match_parent " layout_height = " wrap_content " />
< Image src = " thecircle " layout_width = " match_parent " layout_height = " 32dp " flags = " clip " />
< Sprite src = " gn " />
< TextInput text = " test " layout_width = " match_parent " layout_height = " wrap_content " />
< DropDownList layout_width = " match_parent " layout_height = " wrap_content " selectedIndex = " 0 " >
< item >Test Item</ item >
< item >@string/test_item</ item >
</ DropDownList >
< ListBox layout_width = " match_parent " layout_height = " match_parent " layout_weight = " 1 " >
< item >Hello!</ item >
< item >World!</ item >
</ ListBox >
</ LinearLayout >
</ window >
L'introduction de l'interface utilisateur peut être trouvée ici .
À quoi ça ressemble avec du vrai code ?
UITextView::New ()->setText( " Text on test 1 " )
->setCharacterSize( 12 )
->setLayoutMargin( Rect ( 10 , 10 , 10 , 10 ) )
->setLayoutSizePolicy( SizePolicy::MatchParent, SizePolicy::WrapContent )
->setParent( layout );
Le style des éléments peut être effectué avec une implémentation personnalisée de feuilles de style en cascade, les règles CSS2 les plus courantes sont disponibles, ainsi que plusieurs règles CSS3 (quelques exemples : animations, transitions, propriétés personnalisées, requêtes multimédias, règle @font-face at, élément :root) . Voici un petit exemple de ce à quoi ressemble le CSS :
@font-face {
font-family : "OpenSans Regular" ;
src : url ( "https://raw.githubusercontent.com/SpartanJ/eepp/develop/bin/assets/fonts/OpenSans-Regular.ttf" );
}
@import url ( "assets/layouts/imported.css" ) screen and ( min-width : 800 px );
: root {
--font-color : black;
--background-input-color : rgba ( 255 , 255 , 255 , 0.7 );
--border-color : black;
--border-width : 1 dp ;
}
. screen TextView {
color : var ( --font-color );
}
. form {
background-image : @drawable /back;
background-repeat : no-repeat;
background-size : cover;
}
. form . form_inputs {
background-color : var ( --non-existent , var ( --background-input-color ));
margin-left : 100 dp ;
margin-right : 100 dp ;
padding-top : 72 dp ;
padding-left : 57 dp ;
padding-right : 57 dp ;
padding-bottom : 115 dp ;
}
. screen TextView . input ,
. screen TextInput . input {
font-family : AkzidenzGroteskBQ-Cnd;
layout-width : match_parent;
layout-height : 80 dp ;
border-color : var ( --border-color );
border-width : var ( --border-width );
color : var ( --font-color );
padding-left : 40 dp ;
padding-right : 40 dp ;
margin-bottom : 32 dp ;
skin : none;
hint-font-family : AkzidenzGroteskBQ-Cnd;
hint-font-size : 46 dp ;
hint-color : # 818285 ;
background-color : # FFFFFF00 ;
transition : all 0.125 s ;
}
. screen TextInput . input : focus {
background-color : # FFFFFF66 ;
border-color : # 796500 ;
}
. screen TextInput . input : hover {
background-color : # FFFFFF66 ;
}
@media screen and ( max-width : 1024 px ) {
. form . form_inputs {
background-color : red;
}
}
La spécification CSS complète peut être trouvée dans la documentation : ici.
Vous pouvez également vérifier à quoi ressemble un thème CSS pur dans eepp : ici.
Étant donné qu'eepp prend en charge emscripten, vous pouvez jeter un coup d'œil rapide sur certains des exemples, démos et outils actuellement fournis par la bibliothèque. Veuillez noter que vous trouverez certaines différences basées sur les limitations actuelles d'emscripten (pas d'accès au système de fichiers, pas de curseurs personnalisés, etc.) et que les démos ne sont pas optimisées en termes de taille et sont plus grandes qu'elles ne le devraient. être. Remarque : Veuillez utiliser un navigateur moderne avec une bonne prise en charge de WebGL et WASM (Chrome/ium 70+ ou Firefox 80+).
ecode - Éditeur de code
Éditeur d'interface utilisateur
Interface utilisateur Bonjour tout le monde
Éditeur d'atlas de textures
Éditeur de cartes
Exemple de polices
Démo du module Physique
Exemple de sprites
Test complet
7GUIs est connu sous le nom de « référence de programmation GUI » et est utilisé pour comparer différentes bibliothèques GUI et explorer chaque approche de bibliothèque en matière de programmation GUI. Les 7 tâches proposées dans 7GUIs ont été implémentées pour eepp. Les tâches sont très bien représentatives de ce qui peut être réalisé avec l'interface graphique d'eepp et sont également très utiles pour démontrer comment implémenter différentes tâches avec la bibliothèque.
Les 7GUI sont composées des tâches suivantes :
Compteur : Démo et implémentation du code.
Convertisseur de température : Démo et implémentation du code.
Flight Booker : Démo et implémentation du code.
Timer : Démo et implémentation du code.
CRUD : Démo et implémentation du code.
Circle Drawer : Démo et implémentation du code.
Cellules : Démo et implémentation du code.
La bibliothèque n'a qu'une seule dépendance externe. Vous n'aurez besoin que de la bibliothèque SDL2 avec les en-têtes installés. Premake5 ou premake4 est également nécessaire pour générer les Makefiles ou les fichiers de projet afin de construire la bibliothèque. Je suppose que vous savez ce que vous faites et ignorez les bases.
Remarque : eepp utilise mojoAL par défaut en remplacement d'OpenAL. OpenAL est disponible en option en tant que backend audio. Si vous souhaitez l'utiliser, vous avez la possibilité de l'activer. Pour l'activer et désactiver le remplacement instantané de mojoAL, vous devez ajouter le paramètre --without-mojoal
à tout appel premake
( ex: premake5 --without-mojoal gmake2
).
Dans un système Ubuntu, cela ressemblerait à quelque chose comme (vous aurez également besoin de gcc mais il sera installé de toute façon) :
sudo apt-get install premake5 libsdl2-2.0-0 libsdl2-dev libopenal1 libopenal-dev
Clonez le dépôt et exécutez-le sur le répertoire racine du dépôt :
premake5 gmake2
ou si premake4 est installé, vous pouvez exécuter :
premake4 gmake
Ensuite, construisez simplement la bibliothèque :
make -C make/linux
C'est ça. Cela construira l’ensemble du projet.
Vous avez deux options : créer avec Visual Studio ou avec MinGW. Pour pouvoir construire le projet avec l'une de ces options, vous devrez d'abord générer les fichiers de projet avec premake4 ou premake5. Ensuite, vous devrez ajouter le fichier binaire à l'un des chemins exécutables définis dans PATH
(ou en ajouter un, ou l'utiliser à partir d'un chemin local). Téléchargez des fichiers Visual Studio ou MinGW selon vos besoins.
Vous devrez utiliser premake5 et exécuter :
premake5.exe --windows-vc-build vs2022
Ensuite, les fichiers du projet devraient être trouvés dans make/windows/
. Une solution complète et tout le projet sera disponible. Après avoir tout installé, vous pourrez créer la solution Visual Studio comme n'importe quel autre projet.
L'utilisation de l'argument de ligne de commande --windows-vc-build
téléchargera automatiquement la dépendance SDL2 et ajoutera les chemins au processus de construction pour établir un lien avec celui-ci sans qu'il soit nécessaire de télécharger manuellement une dépendance externe.
Ensuite, créez simplement la solution dans Visual Studio ou exécutez MSBuild
manuellement dans une console :
"%MSBUILD_PATH%MSBuild.exe" .makewindowseepp.sln -m
Où %MSBUILD_PATH%
est le chemin MSBuild.exe Visual Studio, par exemple pour VS2022 Community Edition, le chemin est généralement :
C:Program FilesMicrosoft Visual Studio2022CommunityMSBuildCurrentBin
Les versions Windows MinGW sont produites et testées avec la distribution w64devkit. MSYS n'est actuellement pas officiellement pris en charge en raison de certains problèmes rencontrés lors du processus de construction (mais il est possible de construire avec quelques étapes supplémentaires).
Si vous utilisez w64devkit, vous devrez le télécharger et l'extraire, nous supposerons qu'il est extrait dans C:w64devkit
.
Exécutez C:w64devkitw64devkit.exe
en tant qu'administrateur ( right click
-> Run as administrator
).
Accédez ensuite au répertoire du référentiel cloné eepp
et exécutez :
premake5.exe --windows-mingw-build gmake2
--windows-mingw-build
téléchargera et liera automatiquement les dépendances externes (SDL2).
Ensuite, construisez simplement le projet situé dans make/windows/
avec mingw32-make.exe
ou tout équivalent :
mingw32-make.exe -C make\windows config=release_x86_64
Pour créer une exécution de build de débogage :
mingw32-make.exe -C make\windows config=debug_x86_64
Et puis assurez-vous de copier le fichier SDL2.dll
situé dans src/thirdparty/SDL2-2.XX.X/x86_64-w64-mingw32/bin/SDL2.dll
dans bin
. Si, pour une raison quelconque, eepp.dll
(ou eepp-debug.dll
) n'a pas été copié automatiquement, vous pouvez les copier de libs/windows/x86_64/
vers bin
.
Vous aurez besoin des binaires pré-construits et des bibliothèques de développement de SDL2, OpenAL est inclus avec le système d'exploitation. Installez le framework SDL2 et vous devriez pouvoir créer le projet.
Vous avez deux options pour construire le projet : avec XCode ou avec Makefiles . Pour construire avec l'une des deux options, vous devrez d'abord créer les fichiers de projet avec premake4 ou premake5.
Générez le projet :
premake5 --use-frameworks gmake2
Et construisez-le :
make -C make/macosx
Vous pouvez utiliser le projects/osx/make.sh
, qui génère les Makefiles et construit le projet.
Courir:
premake5 --use-frameworks xcode4
Et ouvrez le projet XCode généré dans make/macosx/
ou construisez simplement à partir de la ligne de commande avec :
xcodebuild -project make/macosx/project-name.xcodeproj
Il y a un projet Gradle projects/android-project/
. Il construira la bibliothèque avec toutes les dépendances incluses. Utilisez l'exemple de projet comme base pour votre projet. Notez qu'il existe un fichier projet eepp.mk
qui construit la bibliothèque. Ce fichier peut être utilisé dans vos projets.
Le projet fournit deux fichiers pour construire la bibliothèque et les démos. Vous pouvez utiliser n’importe lequel d’entre eux en fonction de vos besoins. Les fichiers se trouvent dans projects/ios
:
Ce script peut être utilisé pour générer les projets xcode et la solution de tous les projets inclus dans eepp (démos, outils, bibliothèque partagée, bibliothèque statique, etc.). Il téléchargera et construira également la bibliothèque statique fat SDL2 afin de pouvoir référencer la bibliothèque au projet. Après avoir construit les projets, vous devrez malheureusement apporter quelques modifications mineures à tous les projets que vous ne souhaitez pas créer ou tester, car le projet généré manque de configurations mineures. Après avoir exécuté ce script, vous devrez ouvrir la solution située dans make/ios/eepp.xcworkspace
. Pour créer les bibliothèques statiques, vous ne rencontrerez aucun problème (cela fonctionnera immédiatement). Mais pour tester certains exemples, il est nécessaire de :
Sélectionnez (cliquez sur le nom du projet) le projet que vous souhaitez tester, par exemple eepp-empty-window
. Vous verrez plusieurs onglets/options, allez dans Build Settings et localisez l'option Info.plist file, double-cliquez pour éditer et écrivez : Info.plist
. Cela indiquera de lire ce fichier qui se trouve dans le même répertoire que le projet. Allez dans l'onglet Général et complétez le Bundle Identifier avec un nom d'identifiant du bundle d'applications qui sera généré, pour cet exemple vous pouvez utiliser quelque chose comme : eepp-empty-window
. Cela vous permettra de créer et d’exécuter le projet.
Cette démo eepp-empty-window
n'utilise aucun actif/ressource, mais d'autres démos devront charger des actifs, et ces actifs doivent être ajoutés au projet afin d'être disponibles pour l'ensemble d'applications. Par exemple, le projet eepp-ui-hello-world
vous demandera d'ajouter le dossier assets
dans le projet. Ce que vous devez faire est : sélectionnez le projet et accédez à l'onglet Phases de construction , dans Copier les ressources des bundles , cliquez sur l'icône plus (+), puis allez dans Ajouter autre... et localisez et sélectionnez le dossier bin/assets/
et Finition . Cela devrait suffire.
Ce script peut être utilisé pour construire le SDL2 et l'eepp sous la forme de deux grosses bibliothèques statiques contenant les architectures arm64 et x86_64 (arm64 pour iPhone/iPad et x86_64 pour les simulateurs). Pour générer une version, passez config=release
comme paramètre du script ( sh compile-all.sh config=release
). Les fichiers construits seront situés dans libs/ios/
, comme libSDL2.a
et libeepp.a
(ou libeepp-debug.a
pour la version de débogage). Ces deux fichiers peuvent être intégrés dans votre projet.
Vous devrez d’abord télécharger et installer emscripten. Ensuite, il y a un script pour construire le projet emscripten projects/emscripten/make.sh
. Avant d'exécuter ce script, n'oubliez pas de définir l'environnement emsdk, il devrait ressembler à : source /path/to/emsdk/emsdk_env.sh
. Cela devrait suffire sous GNU/Linux ou macOS (testé uniquement sur GNU/Linux).
Tous les binaires se trouvent dans le répertoire bin
après leur construction. Les binaires nécessitent deux fichiers : la bibliothèque eepp et la bibliothèque SDL2. La bibliothèque eepp sera située dans libs/{OS}/
. Le script de construction tentera de créer un lien symbolique entre la bibliothèque eepp et bin
. Si cela échoue, il devra être copié ou créé un lien symbolique manuellement. Concernant la bibliothèque SDL2, elle n'est pas fournie dans le référentiel, donc pour exécuter les démos, vous devrez télécharger la version et l'architecture correctes du système d'exploitation de la bibliothèque SDL2.
La librairie est en développement depuis plusieurs années, elle a subi de nombreux changements depuis ses débuts, j'apporte toutes les modifications que je juge nécessaires pour l'améliorer, l'API n'est donc pas encore totalement stable (mais proche de l'être). Il est utilisé dans plusieurs applications orientées vers des campagnes publicitaires principalement développées pour les appareils Android et les PC Windows.
Personnellement, je n'ai jamais eu le temps de l'utiliser pour développer un jeu complexe avec la bibliothèque (plusieurs projets frustrés), mais j'ai réalisé plusieurs jeux orientés UI pour des clients.
Le projet actuel se concentre sur le module UI. Et je vais continuer à travailler en me concentrant là-dessus.
Le plan est de fournir une boîte à outils d'interface utilisateur alternative entièrement accélérée matériellement, similaire à la boîte à outils Android mais plus simple (comme facile à utiliser) et également orientée vers les applications de bureau.
Les modules Audio et Réseau étaient basés sur les modules SFML avec plusieurs différences importantes mentionnées ci-dessus.
J'aime utiliser ce qui est bien fait et correspond à mes besoins, mais comme j'ai mon point de vue personnel sur la façon d'implémenter certaines choses, je préfère prendre le code pour en avoir le contrôle total.
De nombreuses idées ont également été/sont tirées d'autres projets. Certains auxquels je peux penser : cocos2d-x , raylib , Android SDK , libGDX , Godot , XNA , LÖVE et bien d'autres projets.
Si tout cela vous semble intéressant pour une raison folle, contactez-moi et dites-moi si je peux vous aider à accéder à la bibliothèque, et peut-être que si vous le souhaitez, vous pourrez y contribuer à l'avenir. Ce projet a besoin de contributeurs plus que toute autre chose.
L'état actuel de la bibliothèque est correct. En termes de fonctionnalités, il devrait être dans une position similaire à celle des moteurs de jeux 2D les plus utilisés. Mais il manque bien sûr le support+la communauté que vous pouvez obtenir de Godot ou de cocos2d-x pour n'en citer que quelques-uns.
L'idée principale de cette bibliothèque est de se concentrer sur une meilleure approche générale pour développer des applications et des jeux fortement basés sur l'interface utilisateur que les autres options, avec un code et une implémentation plus propres.
La principale raison pour laquelle j'ai développé la bibliothèque est pour m'amuser et apprendre de nouvelles technologies. J'aime passer du temps à travailler sur la bibliothèque, mais je sais qu'il n'y a probablement aucune raison réelle de développer quelque chose comme ça avec l'immense nombre d'alternatives similaires.
Concernant la qualité du code : ce projet a démarré il y a très longtemps et a subi de nombreuses modifications au fil du temps. Une bonne partie de la base de code utilise encore d'anciennes pratiques C++ (par exemple : pointeurs bruts, propre implémentation de thread, mutex, etc.). Certaines de ces choses peuvent être « modernisées », mais d’autres n’ont pas beaucoup de sens ou les réviser prendrait trop de temps pour justifier l’effort. Je travaille sur la "modernisation" de certaines parties du code, et le nouveau code a généralement tendance à paraître plus moderne.
Continuez à améliorer le système d'interface utilisateur, en ajoutant de nouveaux widgets et mises en page et en améliorant la prise en charge CSS.
Simplifiez et améliorez la prise en charge du skinning/thème des widgets de l'interface utilisateur.
Améliorer/créer la documentation pour le module UI.
Ajoutez plus d'exemples et quelques outils.
Ajoutez la prise en charge des scripts, mais j'aimerais d'abord stabiliser la bibliothèque, mais j'y arrive.
Ajoutez la prise en charge des animations squelettiques 2D (probablement Spine2D, cela ne devrait pas demander beaucoup de travail à implémenter).
Je déprécierai probablement le module Maps, car je concentrerai mes efforts sur le système d'interface utilisateur.
Sean Barrett pour stb_image et toutes les bibliothèques stb.
Sam Latinga pour Simple DirectMedia Layer.
Jonathan Dummer pour la bibliothèque d'images Simple OpenGL.
Laurent Gomila pour SFML
Yuri Kobets pour Litehtml
Michael RP Ragazzon pour RmlUI
rxi pour lite
Andreas Kling pour SerenityOS
Ryan C. Gordon pour mojoAL
David Reid pour dr_libs
Lion (Lieff) pour minimp3 et plus
Lewis Van Winkle pour PlusCallback
Dieter Baron et Thomas Klausner pour libzip
Jean-loup Gailly et Mark Adler pour zlib
Milan Ikits et Marcelo Magallon pour GLEW
Mikko Mononen pour nanosvg
Scott Lembcke pour Chipmunk2D
Christophe Riccio pour glm
Rich Geldreich pour imageresampler et jpeg-compressor
Arsène Kapoulkine pour pugixml
Jason Perkins pour le prémake
Martín Lucas Golini ( moi ) et tous les nombreux contributeurs de SOIL2 et efsw
La communauté open source Xiph pour libogg et libvorbis
La communauté ARMmbed pour mbed TLS
kcat pour openal-soft
Le projet FreeType
Et bien plus de monde !
Licence MIT