mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-24 21:11:39 +00:00
- only bind vertex and index buffers if they change
This commit is contained in:
parent
c30edaa21a
commit
c657d8fd1e
2 changed files with 30 additions and 18 deletions
|
@ -477,13 +477,20 @@ void VkRenderState::ApplyMatrices()
|
||||||
}
|
}
|
||||||
|
|
||||||
void VkRenderState::ApplyVertexBuffers()
|
void VkRenderState::ApplyVertexBuffers()
|
||||||
|
{
|
||||||
|
if (mVertexBuffer != mLastVertexBuffer && mVertexBuffer)
|
||||||
{
|
{
|
||||||
VkBuffer vertexBuffers[] = { static_cast<VKVertexBuffer*>(mVertexBuffer)->mBuffer->buffer };
|
VkBuffer vertexBuffers[] = { static_cast<VKVertexBuffer*>(mVertexBuffer)->mBuffer->buffer };
|
||||||
VkDeviceSize offsets[] = { 0 };
|
VkDeviceSize offsets[] = { 0 };
|
||||||
mCommandBuffer->bindVertexBuffers(0, 1, vertexBuffers, offsets);
|
mCommandBuffer->bindVertexBuffers(0, 1, vertexBuffers, offsets);
|
||||||
|
mLastVertexBuffer = mVertexBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
if (mIndexBuffer)
|
if (mIndexBuffer != mLastIndexBuffer && mIndexBuffer)
|
||||||
|
{
|
||||||
mCommandBuffer->bindIndexBuffer(static_cast<VKIndexBuffer*>(mIndexBuffer)->mBuffer->buffer, 0, VK_INDEX_TYPE_UINT32);
|
mCommandBuffer->bindIndexBuffer(static_cast<VKIndexBuffer*>(mIndexBuffer)->mBuffer->buffer, 0, VK_INDEX_TYPE_UINT32);
|
||||||
|
mLastIndexBuffer = mIndexBuffer;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VkRenderState::ApplyMaterial()
|
void VkRenderState::ApplyMaterial()
|
||||||
|
@ -502,20 +509,6 @@ void VkRenderState::ApplyMaterial()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VkRenderState::Bind(int bindingpoint, uint32_t offset)
|
|
||||||
{
|
|
||||||
if (bindingpoint == VIEWPOINT_BINDINGPOINT)
|
|
||||||
{
|
|
||||||
mViewpointOffset = offset;
|
|
||||||
}
|
|
||||||
else if (bindingpoint == LIGHTBUF_BINDINGPOINT)
|
|
||||||
{
|
|
||||||
mLightBufferOffset = offset;
|
|
||||||
}
|
|
||||||
|
|
||||||
mDynamicSetChanged = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void VkRenderState::ApplyDynamicSet()
|
void VkRenderState::ApplyDynamicSet()
|
||||||
{
|
{
|
||||||
if (mViewpointOffset != mLastViewpointOffset || mLightBufferOffset != mLastLightBufferOffset)
|
if (mViewpointOffset != mLastViewpointOffset || mLightBufferOffset != mLastLightBufferOffset)
|
||||||
|
@ -532,6 +525,20 @@ void VkRenderState::ApplyDynamicSet()
|
||||||
mDynamicSetChanged = false;
|
mDynamicSetChanged = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VkRenderState::Bind(int bindingpoint, uint32_t offset)
|
||||||
|
{
|
||||||
|
if (bindingpoint == VIEWPOINT_BINDINGPOINT)
|
||||||
|
{
|
||||||
|
mViewpointOffset = offset;
|
||||||
|
}
|
||||||
|
else if (bindingpoint == LIGHTBUF_BINDINGPOINT)
|
||||||
|
{
|
||||||
|
mLightBufferOffset = offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
mDynamicSetChanged = true;
|
||||||
|
}
|
||||||
|
|
||||||
void VkRenderState::EndRenderPass()
|
void VkRenderState::EndRenderPass()
|
||||||
{
|
{
|
||||||
if (mCommandBuffer)
|
if (mCommandBuffer)
|
||||||
|
@ -546,5 +553,7 @@ void VkRenderState::EndRenderPass()
|
||||||
mDataIndex = -1;
|
mDataIndex = -1;
|
||||||
mLastViewpointOffset = 0xffffffff;
|
mLastViewpointOffset = 0xffffffff;
|
||||||
mLastLightBufferOffset = 0xffffffff;
|
mLastLightBufferOffset = 0xffffffff;
|
||||||
|
mLastVertexBuffer = nullptr;
|
||||||
|
mLastIndexBuffer = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -82,4 +82,7 @@ private:
|
||||||
uint32_t mStreamDataOffset = 0;
|
uint32_t mStreamDataOffset = 0;
|
||||||
|
|
||||||
VSMatrix mIdentityMatrix;
|
VSMatrix mIdentityMatrix;
|
||||||
|
|
||||||
|
IVertexBuffer *mLastVertexBuffer = nullptr;
|
||||||
|
IIndexBuffer *mLastIndexBuffer = nullptr;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue