Phase 7 - Text Rendering: - Add BitmapFont with embedded 8x8 CP437 font (ASCII 32-126) - Add TextPass for instanced glyph rendering - Fix SceneCollector::parseText() to copy strings to FrameAllocator Phase 8A - Multi-texture Support: - Add numeric texture ID system in ResourceCache - SpritePass sorts by textureId and batches per texture - Flush batch on texture change for efficient rendering Phase 8B - Tilemap Rendering: - Add TilemapPass for grid-based tile rendering - Support tileData as comma-separated string - Tiles rendered as instanced quads Window Resize: - Handle window resize via process() input - Call bgfx::reset() on size change 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
71 lines
2.2 KiB
C++
71 lines
2.2 KiB
C++
#pragma once
|
|
|
|
#include "../RenderGraph/RenderPass.h"
|
|
#include "../RHI/RHITypes.h"
|
|
#include <vector>
|
|
|
|
namespace grove {
|
|
|
|
class ResourceCache;
|
|
|
|
// ============================================================================
|
|
// Tilemap Pass - Renders 2D tilemaps efficiently
|
|
// ============================================================================
|
|
|
|
class TilemapPass : public RenderPass {
|
|
public:
|
|
/**
|
|
* @brief Construct TilemapPass with required shader
|
|
* @param shader The shader program to use (sprite shader)
|
|
*/
|
|
explicit TilemapPass(rhi::ShaderHandle shader);
|
|
|
|
const char* getName() const override { return "Tilemaps"; }
|
|
uint32_t getSortOrder() const override { return 50; } // Before sprites
|
|
std::vector<const char*> getDependencies() const override { return {"Clear"}; }
|
|
|
|
void setup(rhi::IRHIDevice& device) override;
|
|
void shutdown(rhi::IRHIDevice& device) override;
|
|
void execute(const FramePacket& frame, rhi::IRHIDevice& device, rhi::RHICommandBuffer& cmd) override;
|
|
|
|
/**
|
|
* @brief Set resource cache for texture lookup
|
|
*/
|
|
void setResourceCache(ResourceCache* cache) { m_resourceCache = cache; }
|
|
|
|
/**
|
|
* @brief Set default tileset texture
|
|
*/
|
|
void setDefaultTileset(rhi::TextureHandle texture) { m_defaultTileset = texture; }
|
|
|
|
/**
|
|
* @brief Set tileset dimensions (tiles per row/column in atlas)
|
|
*/
|
|
void setTilesetLayout(uint16_t tilesPerRow, uint16_t tilesPerCol) {
|
|
m_tilesPerRow = tilesPerRow;
|
|
m_tilesPerCol = tilesPerCol;
|
|
}
|
|
|
|
private:
|
|
rhi::ShaderHandle m_shader;
|
|
rhi::BufferHandle m_quadVB;
|
|
rhi::BufferHandle m_quadIB;
|
|
rhi::BufferHandle m_instanceBuffer;
|
|
rhi::UniformHandle m_textureSampler;
|
|
rhi::TextureHandle m_defaultTexture;
|
|
rhi::TextureHandle m_defaultTileset;
|
|
|
|
ResourceCache* m_resourceCache = nullptr;
|
|
|
|
// Tileset layout (for UV calculation)
|
|
uint16_t m_tilesPerRow = 16;
|
|
uint16_t m_tilesPerCol = 16;
|
|
|
|
// Reusable buffer for tile instances
|
|
std::vector<SpriteInstance> m_tileInstances;
|
|
|
|
static constexpr uint32_t MAX_TILES_PER_BATCH = 16384;
|
|
};
|
|
|
|
} // namespace grove
|