From 9618a647a27598e7d3d0a1c5fa7210bd8d1d2a40 Mon Sep 17 00:00:00 2001 From: StillHammer Date: Fri, 28 Nov 2025 17:15:45 +0800 Subject: [PATCH] feat(BgfxRenderer): Fix multi-texture batching and add particle effects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix texture state management in BgfxDevice: defer setTexture until submit() - Add transient instance buffer support for multi-batch rendering - Add ParticlePass with fire, smoke and sparkle particle systems - Load multiple textures from config (texture1..texture10) - Visual test now demonstrates multi-texture sprites and multi-particle effects 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- assets/textures/5oxaxt1vo2f91.jpg | Bin 0 -> 150143 bytes modules/BgfxRenderer/BgfxRendererModule.cpp | 28 ++- modules/BgfxRenderer/CMakeLists.txt | 1 + modules/BgfxRenderer/Passes/ParticlePass.cpp | 208 ++++++++++++++++++ modules/BgfxRenderer/Passes/ParticlePass.h | 63 ++++++ modules/BgfxRenderer/Passes/SpritePass.cpp | 103 +++++---- modules/BgfxRenderer/RHI/BgfxDevice.cpp | 81 ++++++- modules/BgfxRenderer/RHI/RHICommandBuffer.cpp | 9 + modules/BgfxRenderer/RHI/RHICommandBuffer.h | 3 + modules/BgfxRenderer/RHI/RHIDevice.h | 5 + modules/BgfxRenderer/RHI/RHITypes.h | 13 ++ tests/visual/test_23_bgfx_sprites_visual.cpp | 147 ++++++++++++- 12 files changed, 599 insertions(+), 62 deletions(-) create mode 100644 assets/textures/5oxaxt1vo2f91.jpg create mode 100644 modules/BgfxRenderer/Passes/ParticlePass.cpp create mode 100644 modules/BgfxRenderer/Passes/ParticlePass.h diff --git a/assets/textures/5oxaxt1vo2f91.jpg b/assets/textures/5oxaxt1vo2f91.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8e745eb44422131fdce95edc7d2f4c6f3ab8f841 GIT binary patch literal 150143 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�BDpS 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 @@ -106,6 +107,12 @@ void BgfxRendererModule::setConfiguration(const IDataNode& config, IIO* io, ITas m_renderGraph->addPass(std::make_unique(spriteShader)); m_logger->info("Added TextPass"); + // Create ParticlePass (uses sprite shader, renders after sprites with additive blending) + auto particlePass = std::make_unique(spriteShader); + particlePass->setResourceCache(m_resourceCache.get()); + m_renderGraph->addPass(std::move(particlePass)); + m_logger->info("Added ParticlePass"); + m_renderGraph->addPass(std::make_unique(debugShader)); m_logger->info("Added DebugPass"); m_renderGraph->setup(*m_device); @@ -129,15 +136,30 @@ void BgfxRendererModule::setConfiguration(const IDataNode& config, IIO* io, ITas // Load default texture if specified in config std::string defaultTexturePath = config.getString("defaultTexture", ""); if (!defaultTexturePath.empty()) { - rhi::TextureHandle tex = m_resourceCache->loadTexture(*m_device, defaultTexturePath); - if (tex.isValid()) { + uint16_t texId = m_resourceCache->loadTextureWithId(*m_device, defaultTexturePath); + if (texId > 0) { + rhi::TextureHandle tex = m_resourceCache->getTextureById(texId); m_spritePass->setTexture(tex); - m_logger->info("Loaded default texture: {}", defaultTexturePath); + m_logger->info("Loaded default texture: {} (id={})", defaultTexturePath, texId); } else { m_logger->warn("Failed to load default texture: {}", defaultTexturePath); } } + // Load additional textures (texture1, texture2, etc.) + for (int i = 1; i <= 10; ++i) { + std::string key = "texture" + std::to_string(i); + std::string path = config.getString(key, ""); + if (!path.empty()) { + uint16_t texId = m_resourceCache->loadTextureWithId(*m_device, path); + if (texId > 0) { + m_logger->info("Loaded texture: {} (id={})", path, texId); + } else { + m_logger->warn("Failed to load texture: {}", path); + } + } + } + m_logger->info("BgfxRenderer initialized successfully"); } diff --git a/modules/BgfxRenderer/CMakeLists.txt b/modules/BgfxRenderer/CMakeLists.txt index 0512d53..b33ae4a 100644 --- a/modules/BgfxRenderer/CMakeLists.txt +++ b/modules/BgfxRenderer/CMakeLists.txt @@ -52,6 +52,7 @@ add_library(BgfxRenderer SHARED Passes/TilemapPass.cpp Passes/SpritePass.cpp Passes/TextPass.cpp + Passes/ParticlePass.cpp Passes/DebugPass.cpp # Text diff --git a/modules/BgfxRenderer/Passes/ParticlePass.cpp b/modules/BgfxRenderer/Passes/ParticlePass.cpp new file mode 100644 index 0000000..7dd79b5 --- /dev/null +++ b/modules/BgfxRenderer/Passes/ParticlePass.cpp @@ -0,0 +1,208 @@ +#include "ParticlePass.h" +#include "../RHI/RHIDevice.h" +#include "../Resources/ResourceCache.h" +#include + +namespace grove { + +ParticlePass::ParticlePass(rhi::ShaderHandle shader) + : m_shader(shader) +{ + m_particleInstances.reserve(MAX_PARTICLES_PER_BATCH); +} + +void ParticlePass::setup(rhi::IRHIDevice& device) { + // Create quad vertex buffer (unit quad centered at origin for particles) + float quadVertices[] = { + // pos.x, pos.y, pos.z, r, g, b, a + -0.5f, -0.5f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, // bottom-left + 0.5f, -0.5f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, // bottom-right + 0.5f, 0.5f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, // top-right + -0.5f, 0.5f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, // top-left + }; + + rhi::BufferDesc vbDesc; + vbDesc.type = rhi::BufferDesc::Vertex; + vbDesc.size = sizeof(quadVertices); + vbDesc.data = quadVertices; + vbDesc.dynamic = false; + vbDesc.layout = rhi::BufferDesc::PosColor; + m_quadVB = device.createBuffer(vbDesc); + + // Create index buffer + uint16_t quadIndices[] = { + 0, 1, 2, + 0, 2, 3 + }; + + rhi::BufferDesc ibDesc; + ibDesc.type = rhi::BufferDesc::Index; + ibDesc.size = sizeof(quadIndices); + ibDesc.data = quadIndices; + ibDesc.dynamic = false; + m_quadIB = device.createBuffer(ibDesc); + + // Fallback dynamic instance buffer (only used if transient allocation fails) + rhi::BufferDesc instDesc; + instDesc.type = rhi::BufferDesc::Instance; + instDesc.size = MAX_PARTICLES_PER_BATCH * sizeof(SpriteInstance); + instDesc.data = nullptr; + instDesc.dynamic = true; + m_instanceBuffer = device.createBuffer(instDesc); + + // Create texture sampler uniform + m_textureSampler = device.createUniform("s_texColor", 1); + + // Create default white texture for untextured particles + uint32_t whitePixel = 0xFFFFFFFF; + rhi::TextureDesc texDesc; + texDesc.width = 1; + texDesc.height = 1; + texDesc.format = rhi::TextureDesc::RGBA8; + texDesc.data = &whitePixel; + texDesc.dataSize = sizeof(whitePixel); + m_defaultTexture = device.createTexture(texDesc); +} + +void ParticlePass::shutdown(rhi::IRHIDevice& device) { + device.destroy(m_quadVB); + device.destroy(m_quadIB); + device.destroy(m_instanceBuffer); + device.destroy(m_textureSampler); + device.destroy(m_defaultTexture); +} + +void ParticlePass::execute(const FramePacket& frame, rhi::IRHIDevice& device, rhi::RHICommandBuffer& cmd) { + if (frame.particleCount == 0) { + return; + } + + // Set render state for particles + rhi::RenderState state; + state.blend = m_additiveBlending ? rhi::BlendMode::Additive : rhi::BlendMode::Alpha; + state.cull = rhi::CullMode::None; + state.depthTest = false; + state.depthWrite = false; + cmd.setState(state); + + m_particleInstances.clear(); + + // Current texture for batching + uint16_t currentTextureId = UINT16_MAX; + rhi::TextureHandle currentTexture = m_defaultTexture; + + for (size_t i = 0; i < frame.particleCount; ++i) { + const ParticleInstance& particle = frame.particles[i]; + + // Skip dead particles + if (particle.life <= 0.0f) { + continue; + } + + // Check if texture changed - flush batch + if (particle.textureId != currentTextureId && !m_particleInstances.empty()) { + flushBatch(device, cmd, currentTexture, static_cast(m_particleInstances.size())); + m_particleInstances.clear(); + } + + // Update current texture if needed + if (particle.textureId != currentTextureId) { + currentTextureId = particle.textureId; + if (particle.textureId > 0 && m_resourceCache) { + currentTexture = m_resourceCache->getTextureById(particle.textureId); + } + if (!currentTexture.isValid()) { + currentTexture = m_defaultTexture; + } + } + + // Convert ParticleInstance to GPU-aligned SpriteInstance + SpriteInstance inst; + + // Position (particle position is center) + inst.x = particle.x; + inst.y = particle.y; + + // Scale by particle size + inst.scaleX = particle.size; + inst.scaleY = particle.size; + + // No rotation (could add spin later) + inst.rotation = 0.0f; + + // Full UV (use entire texture) + inst.u0 = 0.0f; + inst.v0 = 0.0f; + inst.u1 = 1.0f; + inst.v1 = 1.0f; + + // Texture ID + inst.textureId = static_cast(particle.textureId); + + // Layer (particles render at high layer by default) + inst.layer = 200.0f; + + // Padding/reserved + inst.padding0 = 0.0f; + inst.reserved[0] = 0.0f; + inst.reserved[1] = 0.0f; + inst.reserved[2] = 0.0f; + inst.reserved[3] = 0.0f; + + // Color with life-based alpha fade + uint32_t color = particle.color; + inst.r = static_cast((color >> 24) & 0xFF) / 255.0f; + inst.g = static_cast((color >> 16) & 0xFF) / 255.0f; + inst.b = static_cast((color >> 8) & 0xFF) / 255.0f; + // Alpha fades with life + float baseAlpha = static_cast(color & 0xFF) / 255.0f; + inst.a = baseAlpha * particle.life; + + m_particleInstances.push_back(inst); + + // Flush if batch is full + if (m_particleInstances.size() >= MAX_PARTICLES_PER_BATCH) { + flushBatch(device, cmd, currentTexture, static_cast(m_particleInstances.size())); + m_particleInstances.clear(); + } + } + + // Flush remaining particles + if (!m_particleInstances.empty()) { + flushBatch(device, cmd, currentTexture, static_cast(m_particleInstances.size())); + } +} + +void ParticlePass::flushBatch(rhi::IRHIDevice& device, rhi::RHICommandBuffer& cmd, + rhi::TextureHandle texture, uint32_t count) { + if (count == 0) return; + + // Try to use transient buffer for multi-batch support + rhi::TransientInstanceBuffer transientBuffer = device.allocTransientInstanceBuffer(count); + + if (transientBuffer.isValid()) { + // Copy particle data to transient buffer + std::memcpy(transientBuffer.data, m_particleInstances.data(), count * sizeof(SpriteInstance)); + + // Set buffers + cmd.setVertexBuffer(m_quadVB); + cmd.setIndexBuffer(m_quadIB); + cmd.setTransientInstanceBuffer(transientBuffer, 0, count); + cmd.setTexture(0, texture, m_textureSampler); + cmd.drawInstanced(6, count); + cmd.submit(0, m_shader, 0); + } else { + // Fallback to dynamic buffer (single batch per frame limitation) + device.updateBuffer(m_instanceBuffer, m_particleInstances.data(), + count * sizeof(SpriteInstance)); + + cmd.setVertexBuffer(m_quadVB); + cmd.setIndexBuffer(m_quadIB); + cmd.setInstanceBuffer(m_instanceBuffer, 0, count); + cmd.setTexture(0, texture, m_textureSampler); + cmd.drawInstanced(6, count); + cmd.submit(0, m_shader, 0); + } +} + +} // namespace grove diff --git a/modules/BgfxRenderer/Passes/ParticlePass.h b/modules/BgfxRenderer/Passes/ParticlePass.h new file mode 100644 index 0000000..05c5e89 --- /dev/null +++ b/modules/BgfxRenderer/Passes/ParticlePass.h @@ -0,0 +1,63 @@ +#pragma once + +#include "../RenderGraph/RenderPass.h" +#include "../RHI/RHITypes.h" +#include "../Frame/FramePacket.h" +#include + +namespace grove { + +class ResourceCache; + +// ============================================================================ +// Particle Pass - Renders 2D particles with additive blending +// ============================================================================ + +class ParticlePass : public RenderPass { +public: + /** + * @brief Construct ParticlePass with required shader + * @param shader The shader program to use for particle rendering + */ + explicit ParticlePass(rhi::ShaderHandle shader); + + const char* getName() const override { return "Particles"; } + uint32_t getSortOrder() const override { return 150; } // After sprites (100) + std::vector getDependencies() const override { return {"Sprites"}; } + + 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 by ID + */ + void setResourceCache(ResourceCache* cache) { m_resourceCache = cache; } + + /** + * @brief Set blend mode for particles + * @param additive true for additive blending (fire, sparks), false for alpha (smoke) + */ + void setAdditiveBlending(bool additive) { m_additiveBlending = additive; } + +private: + void flushBatch(rhi::IRHIDevice& device, rhi::RHICommandBuffer& cmd, + rhi::TextureHandle texture, uint32_t count); + + rhi::ShaderHandle m_shader; + rhi::BufferHandle m_quadVB; + rhi::BufferHandle m_quadIB; + rhi::BufferHandle m_instanceBuffer; // Fallback for when transient allocation fails + rhi::UniformHandle m_textureSampler; + rhi::TextureHandle m_defaultTexture; // White 1x1 texture for untextured particles + + ResourceCache* m_resourceCache = nullptr; + bool m_additiveBlending = true; // Default to additive for fire/spark effects + + // GPU-aligned particle instances for batching + std::vector m_particleInstances; + + static constexpr uint32_t MAX_PARTICLES_PER_BATCH = 10000; +}; + +} // namespace grove diff --git a/modules/BgfxRenderer/Passes/SpritePass.cpp b/modules/BgfxRenderer/Passes/SpritePass.cpp index c58bbaf..65e2740 100644 --- a/modules/BgfxRenderer/Passes/SpritePass.cpp +++ b/modules/BgfxRenderer/Passes/SpritePass.cpp @@ -3,6 +3,7 @@ #include "../Frame/FramePacket.h" #include "../Resources/ResourceCache.h" #include +#include namespace grove { @@ -45,7 +46,8 @@ void SpritePass::setup(rhi::IRHIDevice& device) { ibDesc.dynamic = false; m_quadIB = device.createBuffer(ibDesc); - // Create dynamic instance buffer + // Note: We no longer create a persistent instance buffer since we use transient buffers + // But keep it for fallback if transient allocation fails rhi::BufferDesc instDesc; instDesc.type = rhi::BufferDesc::Instance; instDesc.size = MAX_SPRITES_PER_BATCH * sizeof(SpriteInstance); @@ -82,7 +84,7 @@ void SpritePass::flushBatch(rhi::IRHIDevice& device, rhi::RHICommandBuffer& cmd, cmd.setVertexBuffer(m_quadVB); cmd.setIndexBuffer(m_quadIB); - cmd.setInstanceBuffer(m_instanceBuffer, 0, count); + // Note: Instance buffer should be set before calling this cmd.setTexture(0, texture, m_textureSampler); cmd.drawInstanced(6, count); cmd.submit(0, m_shader, 0); @@ -120,61 +122,70 @@ void SpritePass::execute(const FramePacket& frame, rhi::IRHIDevice& device, rhi: return sa.textureId < sb.textureId; }); - // Process sprites in batches by layer and texture - // Flush batch when layer OR texture changes to maintain correct draw order - std::vector batchData; - batchData.reserve(MAX_SPRITES_PER_BATCH); + // Process sprites in batches by texture + // Use transient buffers for proper multi-batch rendering + uint32_t batchStart = 0; + while (batchStart < frame.spriteCount) { + // Find the end of current batch (same texture) + uint16_t currentTexId = static_cast(frame.sprites[m_sortedIndices[batchStart]].textureId); + uint32_t batchEnd = batchStart + 1; - uint16_t currentTextureId = UINT16_MAX; - float currentLayer = -1e9f; // Use a value that won't match any real layer - rhi::TextureHandle currentTexture; - - for (uint32_t idx : m_sortedIndices) { - const SpriteInstance& sprite = frame.sprites[idx]; - uint16_t texId = static_cast(sprite.textureId); - - // Check if texture OR layer changed (must flush to maintain layer order) - if (texId != currentTextureId || sprite.layer != currentLayer) { - // Flush previous batch - if (!batchData.empty()) { - device.updateBuffer(m_instanceBuffer, batchData.data(), - static_cast(batchData.size() * sizeof(SpriteInstance))); - flushBatch(device, cmd, currentTexture, static_cast(batchData.size())); - batchData.clear(); + while (batchEnd < frame.spriteCount) { + uint16_t nextTexId = static_cast(frame.sprites[m_sortedIndices[batchEnd]].textureId); + if (nextTexId != currentTexId) { + break; // Texture changed, flush this batch } + ++batchEnd; + } - // Update current state - currentTextureId = texId; - currentLayer = sprite.layer; - if (texId == 0 || !m_resourceCache) { - // Use default/active texture for textureId=0 - currentTexture = m_activeTexture.isValid() ? m_activeTexture : m_defaultTexture; - } else { - // Look up texture by ID - currentTexture = m_resourceCache->getTextureById(texId); - if (!currentTexture.isValid()) { - currentTexture = m_activeTexture.isValid() ? m_activeTexture : m_defaultTexture; - } + uint32_t batchCount = batchEnd - batchStart; + + // Resolve texture handle for this batch + rhi::TextureHandle batchTexture; + if (currentTexId == 0 || !m_resourceCache) { + batchTexture = m_activeTexture.isValid() ? m_activeTexture : m_defaultTexture; + } else { + batchTexture = m_resourceCache->getTextureById(currentTexId); + if (!batchTexture.isValid()) { + batchTexture = m_activeTexture.isValid() ? m_activeTexture : m_defaultTexture; } } - // Add sprite to batch - batchData.push_back(sprite); + // Allocate transient instance buffer for this batch + rhi::TransientInstanceBuffer transientBuffer = device.allocTransientInstanceBuffer(batchCount); - // Flush if batch is full - if (batchData.size() >= MAX_SPRITES_PER_BATCH) { + if (transientBuffer.isValid()) { + // Copy sprite data to transient buffer + SpriteInstance* dest = static_cast(transientBuffer.data); + for (uint32_t i = 0; i < batchCount; ++i) { + dest[i] = frame.sprites[m_sortedIndices[batchStart + i]]; + } + + // Re-set state for each batch to ensure clean state + cmd.setState(state); + + // Set buffers and draw + cmd.setVertexBuffer(m_quadVB); + cmd.setIndexBuffer(m_quadIB); + cmd.setTransientInstanceBuffer(transientBuffer, 0, batchCount); + cmd.setTexture(0, batchTexture, m_textureSampler); + cmd.drawInstanced(6, batchCount); + cmd.submit(0, m_shader, 0); + } else { + // Fallback: use dynamic buffer (may have issues with multiple batches) + // This should only happen if GPU runs out of transient memory + std::vector batchData; + batchData.reserve(batchCount); + for (uint32_t i = 0; i < batchCount; ++i) { + batchData.push_back(frame.sprites[m_sortedIndices[batchStart + i]]); + } device.updateBuffer(m_instanceBuffer, batchData.data(), static_cast(batchData.size() * sizeof(SpriteInstance))); - flushBatch(device, cmd, currentTexture, static_cast(batchData.size())); - batchData.clear(); + cmd.setInstanceBuffer(m_instanceBuffer, 0, batchCount); + flushBatch(device, cmd, batchTexture, batchCount); } - } - // Flush remaining sprites - if (!batchData.empty()) { - device.updateBuffer(m_instanceBuffer, batchData.data(), - static_cast(batchData.size() * sizeof(SpriteInstance))); - flushBatch(device, cmd, currentTexture, static_cast(batchData.size())); + batchStart = batchEnd; } } diff --git a/modules/BgfxRenderer/RHI/BgfxDevice.cpp b/modules/BgfxRenderer/RHI/BgfxDevice.cpp index c34f034..a9b4e0c 100644 --- a/modules/BgfxRenderer/RHI/BgfxDevice.cpp +++ b/modules/BgfxRenderer/RHI/BgfxDevice.cpp @@ -260,6 +260,38 @@ public: bgfx::updateTexture2D(h, 0, 0, 0, 0, m_width, m_height, bgfx::copy(data, size)); } + // ======================================== + // Transient Instance Buffers + // ======================================== + + TransientInstanceBuffer allocTransientInstanceBuffer(uint32_t count) override { + TransientInstanceBuffer result; + + constexpr uint16_t INSTANCE_STRIDE = 80; // 5 x vec4 + + // Check if we have space in the pool + if (m_transientPoolCount >= MAX_TRANSIENT_BUFFERS) { + return result; // Pool full, return invalid + } + + // Check if bgfx has enough transient memory + if (bgfx::getAvailInstanceDataBuffer(count, INSTANCE_STRIDE) < count) { + return result; // Not enough memory + } + + // Allocate from bgfx + uint16_t poolIndex = m_transientPoolCount++; + bgfx::allocInstanceDataBuffer(&m_transientPool[poolIndex], count, INSTANCE_STRIDE); + + result.data = m_transientPool[poolIndex].data; + result.size = count * INSTANCE_STRIDE; + result.count = count; + result.stride = INSTANCE_STRIDE; + result.poolIndex = poolIndex; + + return result; + } + // ======================================== // View Setup // ======================================== @@ -282,6 +314,8 @@ public: void frame() override { bgfx::frame(); + // Reset transient pool for next frame + m_transientPoolCount = 0; } void executeCommandBuffer(const RHICommandBuffer& cmdBuffer) override { @@ -293,6 +327,12 @@ public: uint32_t instStart = 0; uint32_t instCount = 0; + // Store texture state to apply at draw time (not immediately) + TextureHandle pendingTexture; + UniformHandle pendingSampler; + uint8_t pendingTextureSlot = 0; + bool hasTexture = false; + for (const Command& cmd : cmdBuffer.getCommands()) { switch (cmd.type) { case CommandType::SetState: { @@ -339,9 +379,12 @@ public: } case CommandType::SetTexture: { - bgfx::TextureHandle tex = { cmd.setTexture.texture.id }; - bgfx::UniformHandle sampler = { cmd.setTexture.sampler.id }; - bgfx::setTexture(cmd.setTexture.slot, sampler, tex); + // Store texture state - apply at draw time, not immediately + // This ensures texture is set after all other state is configured + pendingTexture = cmd.setTexture.texture; + pendingSampler = cmd.setTexture.sampler; + pendingTextureSlot = cmd.setTexture.slot; + hasTexture = true; break; } @@ -365,6 +408,15 @@ public: currentInstBuffer = cmd.setInstanceBuffer.buffer; instStart = cmd.setInstanceBuffer.start; instCount = cmd.setInstanceBuffer.count; + m_useTransientInstance = false; + break; + } + + case CommandType::SetTransientInstanceBuffer: { + m_currentTransientIndex = cmd.setTransientInstanceBuffer.poolIndex; + instStart = cmd.setTransientInstanceBuffer.start; + instCount = cmd.setTransientInstanceBuffer.count; + m_useTransientInstance = true; break; } @@ -441,7 +493,11 @@ public: bgfx::setIndexBuffer(h, 0, cmd.drawInstanced.indexCount); } } - if (currentInstBuffer.isValid()) { + // Set instance buffer (either dynamic or transient) + if (m_useTransientInstance && m_currentTransientIndex < m_transientPoolCount) { + // Transient instance buffer from pool + bgfx::setInstanceDataBuffer(&m_transientPool[m_currentTransientIndex], instStart, instCount); + } else if (currentInstBuffer.isValid()) { bool isDynamic = (currentInstBuffer.id & 0x8000) != 0; uint16_t idx = currentInstBuffer.id & 0x7FFF; if (isDynamic) { @@ -453,8 +509,16 @@ public: } case CommandType::Submit: { + // Apply pending texture right before submit + if (hasTexture) { + bgfx::TextureHandle tex = { pendingTexture.id }; + bgfx::UniformHandle sampler = { pendingSampler.id }; + bgfx::setTexture(pendingTextureSlot, sampler, tex); + } bgfx::ProgramHandle program = { cmd.submit.shader.id }; bgfx::submit(cmd.submit.view, program, cmd.submit.depth); + // Reset texture state after submit (consumed) + hasTexture = false; break; } } @@ -466,6 +530,15 @@ private: uint16_t m_height = 0; bool m_initialized = false; + // Transient instance buffer pool (reset each frame) + static constexpr uint16_t MAX_TRANSIENT_BUFFERS = 256; + bgfx::InstanceDataBuffer m_transientPool[MAX_TRANSIENT_BUFFERS]; + uint16_t m_transientPoolCount = 0; + + // Transient buffer state for command execution + bool m_useTransientInstance = false; + uint16_t m_currentTransientIndex = UINT16_MAX; + // Empty buffer for null data fallback in buffer creation inline static const uint8_t s_emptyBuffer[1] = {0}; diff --git a/modules/BgfxRenderer/RHI/RHICommandBuffer.cpp b/modules/BgfxRenderer/RHI/RHICommandBuffer.cpp index 853197e..42b20e1 100644 --- a/modules/BgfxRenderer/RHI/RHICommandBuffer.cpp +++ b/modules/BgfxRenderer/RHI/RHICommandBuffer.cpp @@ -53,6 +53,15 @@ void RHICommandBuffer::setInstanceBuffer(BufferHandle buffer, uint32_t start, ui m_commands.push_back(cmd); } +void RHICommandBuffer::setTransientInstanceBuffer(const TransientInstanceBuffer& buffer, uint32_t start, uint32_t count) { + Command cmd; + cmd.type = CommandType::SetTransientInstanceBuffer; + cmd.setTransientInstanceBuffer.poolIndex = buffer.poolIndex; + cmd.setTransientInstanceBuffer.start = start; + cmd.setTransientInstanceBuffer.count = count; + m_commands.push_back(cmd); +} + void RHICommandBuffer::setScissor(uint16_t x, uint16_t y, uint16_t w, uint16_t h) { Command cmd; cmd.type = CommandType::SetScissor; diff --git a/modules/BgfxRenderer/RHI/RHICommandBuffer.h b/modules/BgfxRenderer/RHI/RHICommandBuffer.h index 8c9e5cf..a594af3 100644 --- a/modules/BgfxRenderer/RHI/RHICommandBuffer.h +++ b/modules/BgfxRenderer/RHI/RHICommandBuffer.h @@ -17,6 +17,7 @@ enum class CommandType : uint8_t { SetVertexBuffer, SetIndexBuffer, SetInstanceBuffer, + SetTransientInstanceBuffer, // For frame-local multi-batch rendering SetScissor, Draw, DrawIndexed, @@ -33,6 +34,7 @@ struct Command { struct { BufferHandle buffer; uint32_t offset; } setVertexBuffer; struct { BufferHandle buffer; uint32_t offset; bool is32Bit; } setIndexBuffer; struct { BufferHandle buffer; uint32_t start; uint32_t count; } setInstanceBuffer; + struct { uint16_t poolIndex; uint32_t start; uint32_t count; } setTransientInstanceBuffer; struct { uint16_t x, y, w, h; } setScissor; struct { uint32_t vertexCount; uint32_t startVertex; } draw; struct { uint32_t indexCount; uint32_t startIndex; } drawIndexed; @@ -68,6 +70,7 @@ public: void setVertexBuffer(BufferHandle buffer, uint32_t offset = 0); void setIndexBuffer(BufferHandle buffer, uint32_t offset = 0, bool is32Bit = false); void setInstanceBuffer(BufferHandle buffer, uint32_t start, uint32_t count); + void setTransientInstanceBuffer(const TransientInstanceBuffer& buffer, uint32_t start, uint32_t count); void setScissor(uint16_t x, uint16_t y, uint16_t w, uint16_t h); void draw(uint32_t vertexCount, uint32_t startVertex = 0); void drawIndexed(uint32_t indexCount, uint32_t startIndex = 0); diff --git a/modules/BgfxRenderer/RHI/RHIDevice.h b/modules/BgfxRenderer/RHI/RHIDevice.h index ad57adc..3b55120 100644 --- a/modules/BgfxRenderer/RHI/RHIDevice.h +++ b/modules/BgfxRenderer/RHI/RHIDevice.h @@ -54,6 +54,11 @@ public: virtual void updateBuffer(BufferHandle handle, const void* data, uint32_t size) = 0; virtual void updateTexture(TextureHandle handle, const void* data, uint32_t size) = 0; + // Transient instance buffers (frame-local, for multi-batch rendering) + // These are automatically freed at end of frame - no manual cleanup needed + // Returns buffer with data pointer for CPU-side writing + virtual TransientInstanceBuffer allocTransientInstanceBuffer(uint32_t count) = 0; + // View setup virtual void setViewClear(ViewId id, uint32_t rgba, float depth) = 0; virtual void setViewRect(ViewId id, uint16_t x, uint16_t y, uint16_t w, uint16_t h) = 0; diff --git a/modules/BgfxRenderer/RHI/RHITypes.h b/modules/BgfxRenderer/RHI/RHITypes.h index 37913ee..af621dc 100644 --- a/modules/BgfxRenderer/RHI/RHITypes.h +++ b/modules/BgfxRenderer/RHI/RHITypes.h @@ -35,6 +35,19 @@ struct FramebufferHandle { using ViewId = uint16_t; +// ============================================================================ +// Transient Instance Buffer - Frame-local allocation for multi-batch rendering +// ============================================================================ + +struct TransientInstanceBuffer { + void* data = nullptr; // CPU-side pointer for writing data + uint32_t size = 0; // Size in bytes + uint32_t count = 0; // Number of instances + uint16_t stride = 0; // Bytes per instance + uint16_t poolIndex = UINT16_MAX; // Index in device's transient pool + bool isValid() const { return data != nullptr && poolIndex != UINT16_MAX; } +}; + // ============================================================================ // Render States // ============================================================================ diff --git a/tests/visual/test_23_bgfx_sprites_visual.cpp b/tests/visual/test_23_bgfx_sprites_visual.cpp index 8d7b426..8d0e3be 100644 --- a/tests/visual/test_23_bgfx_sprites_visual.cpp +++ b/tests/visual/test_23_bgfx_sprites_visual.cpp @@ -120,8 +120,9 @@ int main(int argc, char* argv[]) { config.setDouble("nativeWindowHandle", static_cast(reinterpret_cast(nativeWindowHandle))); config.setDouble("nativeDisplayHandle", static_cast(reinterpret_cast(nativeDisplayHandle))); - // Load texture from assets folder + // Load textures from assets folder config.setString("defaultTexture", "../../assets/textures/1f440.png"); + config.setString("texture1", "../../assets/textures/5oxaxt1vo2f91.jpg"); // Second texture (Multipla) // Enable debug overlay config.setBool("debugOverlay", true); @@ -228,7 +229,7 @@ int main(int argc, char* argv[]) { } // Send animated sprites in a circle - // Using different textureIds to test batching (all will use default texture fallback) + // Using different textureIds to test multi-texture batching for (int i = 0; i < 5; ++i) { auto sprite = std::make_unique("sprite"); @@ -252,29 +253,157 @@ int main(int argc, char* argv[]) { uint32_t colors[] = {0xFF0000FF, 0x00FF00FF, 0x0000FFFF, 0xFFFF00FF, 0xFF00FFFF}; sprite->setInt("color", static_cast(colors[i])); - // Use textureId=0 for all (default texture) - sprite->setInt("textureId", 0); + // Alternate between textures: even = eye (id=1), odd = multipla (id=2) + sprite->setInt("textureId", (i % 2 == 0) ? 1 : 2); sprite->setInt("layer", i); std::unique_ptr data = std::move(sprite); gameIO->publish("render:sprite", std::move(data)); } - // Add a center sprite + // Add a center sprite (Multipla!) { auto sprite = std::make_unique("sprite"); sprite->setDouble("x", width / 2.0f); sprite->setDouble("y", height / 2.0f); - sprite->setDouble("scaleX", 80.0); - sprite->setDouble("scaleY", 80.0); - sprite->setDouble("rotation", -time); - sprite->setInt("color", 0xFFFFFFFF); // White + sprite->setDouble("scaleX", 120.0); + sprite->setDouble("scaleY", 80.0); // Wider than tall (car aspect ratio) + sprite->setDouble("rotation", -time * 0.5f); + sprite->setInt("color", 0xFFFFFFFF); // White (no tint) + sprite->setInt("textureId", 2); // Multipla texture sprite->setInt("layer", 10); std::unique_ptr data = std::move(sprite); gameIO->publish("render:sprite", std::move(data)); } + // ======================================== + // Test particle rendering (fire-like effect) + // ======================================== + for (int i = 0; i < 20; ++i) { + auto particle = std::make_unique("particle"); + + // Spawn particles rising from bottom center + float spawnX = width / 2.0f + (std::sin(time * 5.0f + i * 0.5f) * 50.0f); + float spawnY = height - 50.0f; + + // Particles rise up with some horizontal drift + float particleAge = std::fmod(time * 2.0f + i * 0.2f, 2.0f); // 0-2 second cycle + float life = 1.0f - (particleAge / 2.0f); // 1.0 -> 0.0 + + float px = spawnX + std::sin(particleAge * 3.0f + i) * 30.0f; + float py = spawnY - particleAge * 100.0f; // Rise up + + particle->setDouble("x", px); + particle->setDouble("y", py); + particle->setDouble("vx", 0.0); + particle->setDouble("vy", -50.0); + particle->setDouble("size", 15.0 + life * 20.0); // Shrink as they age + particle->setDouble("life", life); + + // Fire colors: white -> yellow -> orange -> red based on life + uint8_t r, g, b; + if (life > 0.7f) { + // White/yellow core + r = 255; g = 255; b = static_cast(200 * (life - 0.7f) / 0.3f); + } else if (life > 0.3f) { + // Orange + r = 255; g = static_cast(100 + 155 * (life - 0.3f) / 0.4f); b = 0; + } else { + // Red fading out + r = static_cast(200 + 55 * life / 0.3f); g = static_cast(50 * life / 0.3f); b = 0; + } + uint32_t color = (r << 24) | (g << 16) | (b << 8) | 0xFF; + particle->setInt("color", static_cast(color)); + particle->setInt("textureId", 0); + + std::unique_ptr data = std::move(particle); + gameIO->publish("render:particle", std::move(data)); + } + + // ======================================== + // Smoke particles (second particle system - alpha blending, gray colors) + // ======================================== + float smokeSpawnX = width * 0.7f; // Right side + float smokeSpawnY = height * 0.8f; + + for (int i = 0; i < 15; ++i) { + auto smoke = std::make_unique("particle"); + + // Smoke rises slower, drifts more + float smokeAge = std::fmod(time * 1.0f + i * 0.15f, 3.0f); // 3 second cycle + float life = 1.0f - (smokeAge / 3.0f); + + float sx = smokeSpawnX + std::sin(smokeAge * 2.0f + i * 0.5f) * 50.0f; + float sy = smokeSpawnY - smokeAge * 60.0f; // Rise slower + + smoke->setDouble("x", sx); + smoke->setDouble("y", sy); + smoke->setDouble("vx", std::sin(time + i) * 20.0f); + smoke->setDouble("vy", -30.0); + smoke->setDouble("size", 20.0 + (1.0f - life) * 40.0); // Grow as they age + smoke->setDouble("life", life); + + // Smoke colors: dark gray -> light gray, fading alpha + uint8_t gray = static_cast(80 + 80 * (1.0f - life)); // Gets lighter + uint8_t alpha = static_cast(200 * life); // Fades out + uint32_t smokeColor = (gray << 24) | (gray << 16) | (gray << 8) | alpha; + smoke->setInt("color", static_cast(smokeColor)); + smoke->setInt("textureId", 0); + smoke->setInt("blendMode", 0); // Alpha blend (not additive) + + std::unique_ptr smokeData = std::move(smoke); + gameIO->publish("render:particle", std::move(smokeData)); + } + + // ======================================== + // Sparkle particles (third particle system - small, fast, bright) + // ======================================== + float sparkleX = width * 0.5f; + float sparkleY = height * 0.3f; + + for (int i = 0; i < 8; ++i) { + auto sparkle = std::make_unique("particle"); + + float angle = (time * 3.0f + i * (3.14159f * 2.0f / 8.0f)); + float radius = 50.0f + std::sin(time * 5.0f + i) * 20.0f; + float sparkleAge = std::fmod(time * 4.0f + i * 0.1f, 1.0f); + float life = 1.0f - sparkleAge; + + float spx = sparkleX + std::cos(angle) * radius; + float spy = sparkleY + std::sin(angle) * radius * 0.5f; + + sparkle->setDouble("x", spx); + sparkle->setDouble("y", spy); + sparkle->setDouble("vx", 0.0); + sparkle->setDouble("vy", 0.0); + sparkle->setDouble("size", 5.0 + life * 10.0); + sparkle->setDouble("life", life); + + // Sparkle colors: cyan -> white -> magenta cycle + float hue = std::fmod(time * 0.5f + i * 0.1f, 1.0f); + uint8_t r, g, b; + if (hue < 0.33f) { + r = static_cast(255 * (1.0f - hue * 3.0f)); + g = 255; + b = static_cast(255 * hue * 3.0f); + } else if (hue < 0.66f) { + r = static_cast(255 * (hue - 0.33f) * 3.0f); + g = static_cast(255 * (1.0f - (hue - 0.33f) * 3.0f)); + b = 255; + } else { + r = 255; + g = static_cast(255 * (hue - 0.66f) * 3.0f); + b = static_cast(255 * (1.0f - (hue - 0.66f) * 3.0f)); + } + uint32_t sparkleColor = (r << 24) | (g << 16) | (b << 8) | 0xFF; + sparkle->setInt("color", static_cast(sparkleColor)); + sparkle->setInt("textureId", 0); + + std::unique_ptr sparkleData = std::move(sparkle); + gameIO->publish("render:particle", std::move(sparkleData)); + } + // ======================================== // Test text rendering // ========================================