[!WARNING] This translation may be outdated. The English source has been updated more recently than this page. If you notice inaccuracies, please consider contributing an update.
Suckless-OGL¶
Suckless-OGL est un moteur de rendu 3D minimaliste écrit en C. Fidèle à la philosophie "suckless", il privilégie une base de code compacte, une gestion rigoureuse des ressources et l'absence de dépendances inutiles. Il implémente un pipeline moderne basé sur le profil core OpenGL 4.4.
🚀 Fonctionnalités¶
- Minimalisme : Architecture légère axée sur la performance et la lisibilité.
- Rendu moderne : Support des Skyboxes, IcoSphères, textures et éclairage Phong.
- Shaders dynamiques : Chargement et compilation des fichiers GLSL (vertex/fragment).
- Optimisation des shaders : Compilation statique (Release) ou dynamique (Debug) pour équilibrer flexibilité et performance. Voir la documentation.
- Masquage par le stencil buffer : Optimisation du post-traitement pour différencier le skybox des objets. Voir la documentation.
- Mode performance : Optimisation adaptative (GameMode/Natif) pour une stabilité maximale du framerate. Voir la documentation.
- Environnement isolé : Support natif de
distroboxpour garantir un environnement de build reproductible. - Qualité et tests : Suite de tests unitaires, couverture de code, analyse statique et mocking autonome.
- Overlay clavier interactif : Interface Cyberpunk moderne avec mise à l'échelle adaptative et référence des paramètres visuels.
- Pipeline de post-traitement : Stack avancée incluant Auto-Exposition, Bloom, Debug Bloom et histogrammes de debug.
🛠️ Compilation et utilisation¶
Le projet utilise un wrapper Makefile qui pilote CMake pour simplifier les interactions.
Pour une alternative moderne, voir la documentation Justfile.
Flags de compilation et environnement¶
Le build est configuré avec les paramètres suivants :
- Optimisation :
-Wall -Wextra -O2pour un code propre et performant. - Standard POSIX :
-D_POSIX_C_SOURCE=199309Lpour le support declock_gettime. - Analyse statique : Intégration de
clang-tidyavec filtres stricts sur les en-têtes. - Conteneurisation : Utilisation par défaut de
distroboxavec l'imageclang-devpour isoler les dépendances.
Commandes principales¶
| Commande | Action |
|---|---|
make all |
Compile le projet (génère GLAD et le binaire app). |
make debug |
Compile en mode DEBUG (shaders dynamiques, idéal pour le développement). |
make release |
Compile en mode RELEASE (shaders optimisés statiquement). |
make run |
Lance la version DEBUG. |
make run-release |
Lance la version RELEASE. |
make test |
Exécute la suite de tests unitaires via ctest. |
make test-apitrace |
Vérification légère de performance automatisée. |
make test-integration-apitrace |
Scénario d'intégration complet de l'application automatisé. |
make format |
Applique le formatage clang-format sur src, include et tests. |
make lint |
Lance l'analyse statique clang-tidy sur les fichiers source. |
make coverage |
Génère un rapport HTML complet via llvm-cov dans build-coverage/. |
🤖 Workflow CI/CD (GitHub Actions)¶
Le pipeline est structuré pour optimiser le build tout en garantissant une qualité maximale. Il gère les tests, l'assurance qualité, la documentation et les releases automatisées.
> Lire la documentation complète du pipeline CI/CD
Résumé rapide¶
- Tests et couverture : Compilation instrumentée et exécution des tests sous Xvfb.
- Lint et formatage : Application du style (
clang-format) et analyse statique (clang-tidy). - Releases automatisées :
- Nightly : Construite chaque nuit à 01:00 UTC et à chaque push sur master.
- Stable : Déclenchée par les tags de version (
v*).
📁 Structure du projet¶
src/etinclude/: Cœur du moteur (Log, App, Shader, Texture, Icosphere).shaders/: Sources GLSL (Phong, Background/Skybox).assets/: Ressources HDR et textures.tests/: Tests unitaires (Icosphere, Shader, Skybox, Texture, Log).docs/: Documentation technique approfondie.
