🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
103 lines
3.2 KiB
Markdown
103 lines
3.2 KiB
Markdown
# GroveEngine - Session Successor Prompt
|
|
|
|
## Contexte Rapide
|
|
|
|
GroveEngine est un moteur de jeu C++17 avec hot-reload de modules. On développe le module **BgfxRenderer** pour le rendu 2D.
|
|
|
|
## État Actuel (27 Nov 2025)
|
|
|
|
### Phases Complétées ✅
|
|
|
|
**Phase 1-4** - Squelette, RHI, RenderGraph, ShaderManager
|
|
- Tout fonctionne, voir commits précédents
|
|
|
|
**Phase 5** - Pipeline IIO → Rendu ✅ (PARTIEL)
|
|
- `test_23_bgfx_sprites_visual.cpp` : test complet SDL2 + IIO + Module
|
|
- Pipeline vérifié fonctionnel :
|
|
- Module charge avec Vulkan (~500 FPS)
|
|
- IIO route les messages (sprites, camera, clear)
|
|
- SceneCollector collecte et crée FramePacket
|
|
- RenderGraph exécute les passes
|
|
- **MAIS** : Les sprites ne s'affichent PAS visuellement
|
|
|
|
### Problème à Résoudre
|
|
|
|
Le shader actuel (`vs_color`/`fs_color` de bgfx drawstress) est un shader position+couleur simple. Il ne supporte pas l'instancing nécessaire pour les sprites.
|
|
|
|
**Ce qui manque :**
|
|
1. Un shader sprite avec instancing qui lit les données d'instance (position, scale, rotation, color, UV)
|
|
2. Le vertex layout correct pour le quad (pos.xy, uv.xy)
|
|
3. L'instance layout correct pour SpriteInstance
|
|
|
|
### Fichiers Clés
|
|
|
|
```
|
|
modules/BgfxRenderer/
|
|
├── Shaders/
|
|
│ ├── ShaderManager.cpp # Charge les shaders embedded
|
|
│ ├── vs_color.bin.h # Shader actuel (PAS d'instancing)
|
|
│ └── fs_color.bin.h
|
|
├── Passes/
|
|
│ └── SpritePass.cpp # Execute avec instance buffer
|
|
├── Frame/
|
|
│ └── FramePacket.h # SpriteInstance struct
|
|
└── RHI/
|
|
└── BgfxDevice.cpp # createBuffer avec VertexLayout
|
|
```
|
|
|
|
### Structure SpriteInstance (à matcher dans le shader)
|
|
|
|
```cpp
|
|
struct SpriteInstance {
|
|
float x, y; // Position
|
|
float scaleX, scaleY; // Scale
|
|
float rotation; // Rotation en radians
|
|
float u0, v0, u1, v1; // UV coords
|
|
uint32_t color; // ABGR
|
|
uint16_t textureId; // ID texture
|
|
uint16_t layer; // Layer de tri
|
|
};
|
|
```
|
|
|
|
## Prochaine Étape : Shader Sprite Instancing
|
|
|
|
### Option A : Shader BGFX natif (.sc)
|
|
|
|
Créer `vs_sprite.sc` et `fs_sprite.sc` avec :
|
|
- Vertex input : position (vec2), uv (vec2)
|
|
- Instance input : transform, color, uvRect
|
|
- Compiler avec shaderc pour toutes les plateformes
|
|
|
|
### Option B : Simplifier temporairement
|
|
|
|
Dessiner chaque sprite comme un quad individuel sans instancing :
|
|
- Plus lent mais fonctionne avec le shader actuel
|
|
- Modifier SpritePass pour soumettre un draw par sprite
|
|
|
|
### Build & Test
|
|
|
|
```bash
|
|
# Build
|
|
cmake -DGROVE_BUILD_BGFX_RENDERER=ON -B build-bgfx
|
|
cmake --build build-bgfx -j4
|
|
|
|
# Tests
|
|
./build-bgfx/tests/test_21_bgfx_triangle # Triangle coloré ✅
|
|
./build-bgfx/tests/test_23_bgfx_sprites_visual # Pipeline OK, sprites invisibles
|
|
|
|
# Tous les tests
|
|
cd build-bgfx && ctest --output-on-failure
|
|
```
|
|
|
|
## Notes Importantes
|
|
|
|
- **Cross-Platform** : Linux + Windows (MinGW)
|
|
- **WSL2** : Vulkan fonctionne, pas OpenGL
|
|
- **Shaders embedded** : Pré-compilés dans .bin.h, pas de shaderc runtime
|
|
- **100% tests passent** : 20/20
|
|
|
|
## Questions pour la prochaine session
|
|
|
|
1. Option A ou B pour les sprites ?
|
|
2. Priorité : voir quelque chose à l'écran vs architecture propre ?
|