diff --git a/src/rendering/vulkan/renderer/vk_renderstate.cpp b/src/rendering/vulkan/renderer/vk_renderstate.cpp index 4ed4b3ee5..3392de2b3 100644 --- a/src/rendering/vulkan/renderer/vk_renderstate.cpp +++ b/src/rendering/vulkan/renderer/vk_renderstate.cpp @@ -476,12 +476,16 @@ void VkRenderState::ApplyMatrices() void VkRenderState::ApplyVertexBuffers() { - if (mVertexBuffer != mLastVertexBuffer && mVertexBuffer) + if ((mVertexBuffer != mLastVertexBuffer || mVertexOffsets[0] != mLastVertexOffsets[0] || mVertexOffsets[1] != mLastVertexOffsets[1]) && mVertexBuffer) { - VkBuffer vertexBuffers[] = { static_cast(mVertexBuffer)->mBuffer->buffer }; - VkDeviceSize offsets[] = { 0 }; - mCommandBuffer->bindVertexBuffers(0, 1, vertexBuffers, offsets); + auto vkbuf = static_cast(mVertexBuffer); + const auto &format = GetVulkanFrameBuffer()->GetRenderPassManager()->VertexFormats[vkbuf->VertexFormat]; + VkBuffer vertexBuffers[2] = { vkbuf->mBuffer->buffer, vkbuf->mBuffer->buffer }; + VkDeviceSize offsets[] = { mVertexOffsets[0] * format.Stride, mVertexOffsets[1] * format.Stride }; + mCommandBuffer->bindVertexBuffers(0, 2, vertexBuffers, offsets); mLastVertexBuffer = mVertexBuffer; + mLastVertexOffsets[0] = mVertexOffsets[0]; + mLastVertexOffsets[1] = mVertexOffsets[1]; } if (mIndexBuffer != mLastIndexBuffer && mIndexBuffer) diff --git a/src/rendering/vulkan/renderer/vk_renderstate.h b/src/rendering/vulkan/renderer/vk_renderstate.h index fd8d5c825..41d329309 100644 --- a/src/rendering/vulkan/renderer/vk_renderstate.h +++ b/src/rendering/vulkan/renderer/vk_renderstate.h @@ -105,6 +105,7 @@ protected: VSMatrix mIdentityMatrix; + int mLastVertexOffsets[2] = { 0, 0 }; IVertexBuffer *mLastVertexBuffer = nullptr; IIndexBuffer *mLastIndexBuffer = nullptr;