- rlsw est un moteur de rendu logiciel de style OpenGL 1.1 qui fournit un backend alternatif pour exécuter raylib dans des environnements sans GPU
- Il prend en charge divers modes de rendu (points, lignes, triangles, quads), ainsi que le clipping, les textures, et des tampons couleur/profondeur multiples
- Les textures peuvent utiliser tous les formats non compressés pris en charge par raylib, avec un contrôle précis des réglages de filtrage et de wrapping
- Les fonctionnalités 3D clés comme la pile de matrices, le test de profondeur, le blend et la culling de faces sont intégrées ; la compatibilité est maximisée grâce à des bindings OpenGL
- Avec une taille inférieure à 5000 lignes, le projet se distingue des autres rendus logiciels par sa simplicité et son intégration, avec une priorité sur la légèreté plutôt que sur les performances
rlsw : aperçu du moteur de rendu OpenGL logiciel raylib
Introduction
- rlsw est un moteur de rendu logiciel de style OpenGL 1.1 qui implémente en software l’ensemble des fonctions fournies par
rlgl.h dans raylib
- Il est conçu comme un backend de remplacement direct pour exécuter raylib même sur des appareils qui n’ont tout bonnement pas de GPU
Fonctionnalités principales
- Le rendu s’effectue dans un framebuffer interne personnalisé avec prise en charge de plusieurs modes couleur/profondeur (RGB 8, 16, 24 bits, depth 8/16/24 bits)
- Modes de rendu pris en charge : points, lignes, triangles, quads
- Les réglages de rendu détaillés peuvent être personnalisés, notamment l’épaisseur des points, la largeur des lignes et le mode polygonal
- Tous les modes de rendu prennent en charge le clipping
- Gestion des textures : tous les formats non compressés supportés par raylib
- Contrôle de la minification/magnification
- Filtrage point/bi-linéaire
- Application fine du mode wrap par coordonnées S/T
- Support direct des vertex arrays, avec dessin direct de primitives
- Pile de matrices (Push/Pop) prise en charge
- Autres fonctions : getter de style OpenGL, redimensionnement du framebuffer, correction de perspective, scissor clipping, test de profondeur, blend, culling de faces
Utilisation et personnalisation
- Il suit une structure header+source unique, et la génération du code d’implémentation peut se faire via
#define RLSW_IMPLEMENTATION
- Avant la compilation, plusieurs constantes de configuration fine permettent une personnalisation utilisateur
- ex. Ajustement du nombre/taille max du framebuffer ou des textures
Structure et types
- Définition de plusieurs enums et types compatibles OpenGL, ainsi que de structures internes dédiées (
sw_vertex_t, sw_texture_t, etc.)
- La majorité des appels OpenGL peuvent être remappés vers des fonctions
rlsw pour substitution
- Gestion d’état interne robuste pour les matrices, les états et la gestion des textures
Licence et usages
- Sous licence MIT, utilisation commerciale ou non commerciale et création d’œuvres dérivées autorisées
- Le projet privilégie la légèreté et le remplacement entièrement logiciel plutôt que la performance, avec un avantage pour l’intégration et le déploiement rapides
Résumé détaillé
Structure du header et explications
- rlsw remplace presque intégralement en software les fonctions OpenGL 1.1
- Ce header (
rlsw.h) définit
- les types de valeur, les enum et struct personnalisés
- la substitution des commandes OpenGL par des fonctions internes rlsw via des macros
- la déclaration de l’API (initialisation, copie/obtention de framebuffer, draw, clear, soumission de vertex/texture, etc.)
Fonctions phares
- Prise en charge interne de plusieurs stacks de matrices (réservées à Projection/ModelView/Texture)
- Gestion de l’état de rendu : manipulation de bits d’état pour Scissor, activation de texture ou Depth Test
- Fonctions de compatibilité OpenGL : getter variés, copie d’état, gestion d’erreurs
- Gestion des textures : formats non compressés, modes filter/wrap, copie mémoire, etc.
- Par défaut, la plupart des formes 2D/3D (point, ligne, triangle, quad) ainsi que la gestion de la couleur et de la profondeur sont prises en charge
Paramètres configurables
- Résolution et nombre de framebuffers/textures, largeur des bits des tampons couleur/profondeur, profondeur de la pile de matrices, nombre maximal de textures, etc.
- Possibilité d’ajuster des options avancées côté utilisateur comme
SW_MAX_CLIPPED_POLYGON_VERTICES
Éléments clés des structures internes
- sw_context_t : regroupe l’ensemble des états et buffers de tout le contexte
- Gestion unifiée en interne du vertex buffer, du tableau de textures, du framebuffer, des drapeaux d’état, etc.
Atouts et cas d’usage
- Optimisé pour les appareils sans GPU, les environnements embarqués, la portabilité OS, les tests et l’automatisation du développement
- Exécution possible d’applications basées sur raylib en pur software, même sans OpenGL
- La structure légère le rend très adapté aux nouveaux prototypes ou développements, ainsi qu’au support d’environnements non standards
Licence et contributeurs
- Redistribution souple sous licence MIT
- Revu par Le Juez Victor et Ramon Santamaria (2025–2026)
Conclusion
- rlsw est un moteur de rendu purement logiciel pour raylib presque totalement compatible avec OpenGL
- Avec un seul fichier, une faible empreinte, une extensibilité élevée et la prise en charge complète des formats de texture raylib, il offre à la fois une faible barrière d’entrée et une bonne intégration par rapport aux autres solutions de graphisme software
- Sa valeur est particulièrement élevée pour les projets orientés graphisme bas niveau et portabilité
1 commentaires
Avis Hacker News
gl.hqu’on pouvait transmettre des champs supplémentaires au GPU via des fonctions d’extension), j’utilise SFML comme framework graphique et c’est probablement basé sur OpenGL 1.x, et comme exemple récent, le jeu Metropolis 1998 montre bien ce que cette approche peut permettre de faire