GroveEngine/CLAUDE_NEXT_SESSION.md
StillHammer 1e4f1d9fa4 docs: Update session successor prompt for Phase 5.5 (sprite shader)
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 13:45:31 +08:00

3.2 KiB

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)

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

# 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 ?