From 85b754b9cadc184e692c3c3e89598bbb02928e00 Mon Sep 17 00:00:00 2001 From: Magnus Norddahl Date: Tue, 9 Apr 2019 18:19:14 +0200 Subject: [PATCH] - fix model rendering glitch --- src/rendering/vulkan/renderer/vk_renderstate.cpp | 12 ++++++++---- src/rendering/vulkan/renderer/vk_renderstate.h | 1 + 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/rendering/vulkan/renderer/vk_renderstate.cpp b/src/rendering/vulkan/renderer/vk_renderstate.cpp index 4ed4b3ee51f..3392de2b396 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 fd8d5c825a0..41d3293091b 100644 --- a/src/rendering/vulkan/renderer/vk_renderstate.h +++ b/src/rendering/vulkan/renderer/vk_renderstate.h @@ -105,6 +105,7 @@ class VkRenderState : public FRenderState VSMatrix mIdentityMatrix; + int mLastVertexOffsets[2] = { 0, 0 }; IVertexBuffer *mLastVertexBuffer = nullptr; IIndexBuffer *mLastIndexBuffer = nullptr;