diff --git a/include/Nazara/Graphics/SpriteChainRenderer.hpp b/include/Nazara/Graphics/SpriteChainRenderer.hpp index 9dab88f00..e1d2efa50 100644 --- a/include/Nazara/Graphics/SpriteChainRenderer.hpp +++ b/include/Nazara/Graphics/SpriteChainRenderer.hpp @@ -35,6 +35,13 @@ namespace Nz void Reset(ElementRendererData& rendererData, RenderFrame& currentFrame); private: + struct BufferCopy + { + AbstractBuffer* targetBuffer; + UploadPool::Allocation* allocation; + std::size_t size; + }; + struct VertexBufferPool { std::vector> vertexBuffers; @@ -44,7 +51,7 @@ namespace Nz std::shared_ptr m_vertexBufferPool; std::size_t m_maxVertexBufferSize; std::size_t m_maxVertexCount; - std::vector> m_pendingCopies; + std::vector m_pendingCopies; RenderDevice& m_device; }; diff --git a/src/Nazara/Graphics/SpriteChainRenderer.cpp b/src/Nazara/Graphics/SpriteChainRenderer.cpp index b431f0871..9607d3bbe 100644 --- a/src/Nazara/Graphics/SpriteChainRenderer.cpp +++ b/src/Nazara/Graphics/SpriteChainRenderer.cpp @@ -87,7 +87,13 @@ namespace Nz if (currentAllocation) { - m_pendingCopies.emplace_back(currentAllocation, currentVertexBuffer); + std::size_t size = currentAllocationMemPtr - static_cast(currentAllocation->mappedPtr); + + m_pendingCopies.emplace_back(BufferCopy{ + currentVertexBuffer, + currentAllocation, + size + }); firstQuadIndex = 0; currentAllocation = nullptr; @@ -237,8 +243,8 @@ namespace Nz { currentFrame.Execute([&](CommandBufferBuilder& builder) { - for (auto&& [allocation, buffer] : m_pendingCopies) - builder.CopyBuffer(*allocation, buffer); + for (auto& copy : m_pendingCopies) + builder.CopyBuffer(*copy.allocation, copy.targetBuffer, copy.size); builder.PostTransferBarrier(); }, Nz::QueueType::Transfer); @@ -247,7 +253,7 @@ namespace Nz } } - void SpriteChainRenderer::Render(ElementRendererData& rendererData, CommandBufferBuilder& commandBuffer, const Pointer* elements, std::size_t elementCount) + void SpriteChainRenderer::Render(ElementRendererData& rendererData, CommandBufferBuilder& commandBuffer, const Pointer* elements, std::size_t /*elementCount*/) { auto& data = static_cast(rendererData);