4.2 KiB
4.2 KiB
type, title, description, tags, status, generated
| type | title | description | tags | status | generated | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Plan | Implementation Plan for wsg_lib Engine Consolidation and Finalization | Implementation plan defining priority steps to finalize the current architecture, making the API intuitive for standard users while maintaining power for advanced users |
|
stable |
|
Plan d'Implémentation : Consolidation et Finalisation du Moteur wsg_lib
Ce plan définit les étapes prioritaires pour finaliser l'architecture actuelle. L'objectif est de rendre l'API intuitive pour l'utilisateur standard tout en conservant la puissance de contrôle pour l'utilisateur avancé.
Phase 1 : Finalisation et Nettoyage de l'Existant (Priorité Absolue)
Cette phase vise à supprimer la dette technique et à unifier les accès.
Uniformisation des Modules
- Vérifier que tous les traits (
AppHandler) et structures (App,Context) sont explicitement marquéspubdans leurs fichiers sources. - Ré-exporter l'API dans
lib.rspour permettre des imports simplifiés (ex :use wsg_lib::{App, AppHandler}). - Nettoyer les accès internes pour que l'utilisateur n'ait pas à importer les modules système (
core,pipeline) sauf besoin spécifique.
Abstraction de la Boucle (App::run)
- Déplacer la gestion de
winit::event_loopet desFrameà l'intérieur de la méthoderun()deApp. - Garantir que le trait
AppHandlerreçoit une référence àApppermettant d'appelerapp.rendererouapp.scene. - Supprimer toute gestion de
FrameouEventLoopmanuelle des exemples utilisateurs (simple.rs).
Correction du Builder et Initialisation
- Standardiser la création de
Appvia unAppBuilderrobuste. - Gérer les
dev-dependenciesdanslib/Cargo.toml(notammentpollsteravec la featuremacro) pour permettre la compilation des exemples sans polluer les dépendances finales de la librairie.
Phase 2 : Structure de Rendu et Scène
Une fois la plomberie encapsulée, nous devons rendre l'assemblage des objets cohérent.
Intégration de la Scene
- Formaliser la structure
Scene: un conteneur qui liste les Entities. - Associer le
PipelineCacheà la Scene pour que le rendu des matériaux soit automatique. - Implémenter la logique
app.render(scene): cette méthode doit parcourir la scène, récupérer les matériaux, gérer les pipelines via le cache, et soumettre les draw calls.
Gestion des Matériaux et Shaders
- S'assurer que chaque Mesh possède une référence vers un Material.
- Implémenter le comportement par défaut : si aucun matériau n'est assigné, le moteur injecte automatiquement le
basic_shader.
Phase 3 : Documentation et Interface (API "User-Friendly")
Refonte des Exemples
simple.rsdoit devenir le modèle : 15 lignes de code, pas de manipulation WGPU explicite.manual.rsdoit rester disponible en tant que tutoriel pour ceux qui veulent contourner l'abstraction App.
Nettoyage du Code Interne
- Vérifier les durées de vie (lifetimes) et les Arc pour s'assurer qu'aucune fuite mémoire ou accès concurrentiel invalide ne survient lors des changements de frame.
Phase 4 : Nouvelles Fonctionnalités (Planification Future)
Une fois les phases 1 à 3 validées, nous pourrons introduire :
- Système de Lumières : Ajout de buffers d'uniformes dans le PipelineCache.
- Textures : Intégration d'un module de chargement d'images et de BindGroups.
- Caméras : Gestion des matrices de projection/vue dans la Scene.
Check-list de Vérification pour le LLM d'Assistance
- Est-ce que
simple.rscompile sans importerwinitouwgpu? - Est-ce que
App::rungère bien le cycle update → render → present ? - Les modules sont-ils bien exposés via
lib.rs? pollsterest-il uniquement en dev-dependencies ?
Ce plan garantit que les fondations sont saines. Une fois la Scene rendue automatiquement par app.render(), l'ajout de toute nouvelle fonctionnalité (lumières, textures) deviendra une simple question d'ajout de données dans la structure de scène, sans modification de la boucle de rendu.