From 908d9a0079abdf5359d93362c7c49ef74928fff3 Mon Sep 17 00:00:00 2001 From: vladislavbelov Date: Sun, 9 Oct 2022 11:47:34 +0000 Subject: [PATCH] Moves vertex buffer offset to SetVertexBuffer. This was SVN commit r27137. --- source/graphics/MiniMapTexture.cpp | 20 +++++++++-------- source/graphics/ParticleEmitter.cpp | 11 +++++----- source/renderer/DecalRData.cpp | 3 ++- source/renderer/HWLightingModelRenderer.cpp | 14 +++++++----- source/renderer/InstancingModelRenderer.cpp | 15 +++++++------ source/renderer/OverlayRenderer.cpp | 11 +++++----- source/renderer/PatchRData.cpp | 22 ++++++++++--------- source/renderer/SkyManager.cpp | 7 +++--- source/renderer/TexturedLineRData.cpp | 2 +- source/renderer/WaterManager.cpp | 15 +++++++------ .../renderer/backend/IDeviceCommandContext.h | 3 ++- .../backend/dummy/DeviceCommandContext.cpp | 2 +- .../backend/dummy/DeviceCommandContext.h | 3 ++- .../backend/gl/DeviceCommandContext.cpp | 4 ++-- .../backend/gl/DeviceCommandContext.h | 3 ++- 15 files changed, 75 insertions(+), 60 deletions(-) diff --git a/source/graphics/MiniMapTexture.cpp b/source/graphics/MiniMapTexture.cpp index 829f8c709d..2c52e6b60a 100644 --- a/source/graphics/MiniMapTexture.cpp +++ b/source/graphics/MiniMapTexture.cpp @@ -751,22 +751,23 @@ void CMiniMapTexture::RenderFinalTexture( { deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::POSITION, - m_AttributePos.format, - m_InstanceVertexArray.GetOffset() + m_InstanceAttributePosition.offset, + m_AttributePos.format, m_InstanceAttributePosition.offset, m_InstanceVertexArray.GetStride(), Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::UV1, - m_AttributePos.format, firstVertexOffset + m_AttributePos.offset, stride, + m_AttributePos.format, m_AttributePos.offset, stride, Renderer::Backend::VertexAttributeRate::PER_INSTANCE, 1); deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::COLOR, - m_AttributeColor.format, firstVertexOffset + m_AttributeColor.offset, stride, + m_AttributeColor.format, m_AttributeColor.offset, stride, Renderer::Backend::VertexAttributeRate::PER_INSTANCE, 1); - deviceCommandContext->SetVertexBuffer(0, m_InstanceVertexArray.GetBuffer()); - deviceCommandContext->SetVertexBuffer(1, m_VertexArray.GetBuffer()); + deviceCommandContext->SetVertexBuffer( + 0, m_InstanceVertexArray.GetBuffer(), m_InstanceVertexArray.GetOffset()); + deviceCommandContext->SetVertexBuffer( + 1, m_VertexArray.GetBuffer(), firstVertexOffset); deviceCommandContext->SetUniform(shader->GetBindingSlot(str_width), entityRadius); @@ -778,14 +779,15 @@ void CMiniMapTexture::RenderFinalTexture( deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::POSITION, - m_AttributePos.format, firstVertexOffset + m_AttributePos.offset, stride, + m_AttributePos.format, m_AttributePos.offset, stride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::COLOR, - m_AttributeColor.format, firstVertexOffset + m_AttributeColor.offset, stride, + m_AttributeColor.format, m_AttributeColor.offset, stride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); - deviceCommandContext->SetVertexBuffer(0, m_VertexArray.GetBuffer()); + deviceCommandContext->SetVertexBuffer( + 0, m_VertexArray.GetBuffer(), firstVertexOffset); deviceCommandContext->SetIndexBuffer(m_IndexArray.GetBuffer()); deviceCommandContext->DrawIndexed(m_IndexArray.GetOffset(), m_EntitiesDrawn * 6, 0); diff --git a/source/graphics/ParticleEmitter.cpp b/source/graphics/ParticleEmitter.cpp index 5a2a9c3ac3..c9e994bc2f 100644 --- a/source/graphics/ParticleEmitter.cpp +++ b/source/graphics/ParticleEmitter.cpp @@ -214,22 +214,23 @@ void CParticleEmitter::RenderArray( deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::POSITION, - m_AttributePos.format, firstVertexOffset + m_AttributePos.offset, stride, + m_AttributePos.format, m_AttributePos.offset, stride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::COLOR, - m_AttributeColor.format, firstVertexOffset + m_AttributeColor.offset, stride, + m_AttributeColor.format, m_AttributeColor.offset, stride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::UV0, - m_AttributeUV.format, firstVertexOffset + m_AttributeUV.offset, stride, + m_AttributeUV.format, m_AttributeUV.offset, stride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::UV1, - m_AttributeAxis.format, firstVertexOffset + m_AttributeAxis.offset, stride, + m_AttributeAxis.format, m_AttributeAxis.offset, stride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); - deviceCommandContext->SetVertexBuffer(0, m_VertexArray.GetBuffer()); + deviceCommandContext->SetVertexBuffer( + 0, m_VertexArray.GetBuffer(), firstVertexOffset); deviceCommandContext->SetIndexBuffer(m_IndexArray.GetBuffer()); deviceCommandContext->DrawIndexed(m_IndexArray.GetOffset(), m_Particles.size() * 6, 0); diff --git a/source/renderer/DecalRData.cpp b/source/renderer/DecalRData.cpp index 982d4d6b11..782a5a4682 100644 --- a/source/renderer/DecalRData.cpp +++ b/source/renderer/DecalRData.cpp @@ -251,7 +251,8 @@ void CDecalRData::RenderDecals( offsetof(SDecalVertex, m_UV), stride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); - deviceCommandContext->SetVertexBuffer(0, batch.vertices->m_Owner->GetBuffer()); + deviceCommandContext->SetVertexBuffer( + 0, batch.vertices->m_Owner->GetBuffer(), 0); } if (lastIB != batch.indices->m_Owner) diff --git a/source/renderer/HWLightingModelRenderer.cpp b/source/renderer/HWLightingModelRenderer.cpp index aca6093a18..1f7a22a882 100644 --- a/source/renderer/HWLightingModelRenderer.cpp +++ b/source/renderer/HWLightingModelRenderer.cpp @@ -200,18 +200,19 @@ void ShaderModelVertexRenderer::PrepareModelDef( deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::UV0, m->shadermodeldef->m_UVs[0].format, - firstVertexOffset + m->shadermodeldef->m_UVs[0].offset, stride, + m->shadermodeldef->m_UVs[0].offset, stride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); if (def.GetNumUVsPerVertex() >= 2) { deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::UV1, m->shadermodeldef->m_UVs[1].format, - firstVertexOffset + m->shadermodeldef->m_UVs[1].offset, stride, + m->shadermodeldef->m_UVs[1].offset, stride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); } - deviceCommandContext->SetVertexBuffer(0, m->shadermodeldef->m_Array.GetBuffer()); + deviceCommandContext->SetVertexBuffer( + 0, m->shadermodeldef->m_Array.GetBuffer(), firstVertexOffset); } // Render one model @@ -231,15 +232,16 @@ void ShaderModelVertexRenderer::RenderModel( deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::POSITION, Renderer::Backend::Format::R32G32B32_SFLOAT, - firstVertexOffset + shadermodel->m_Position.offset, stride, + shadermodel->m_Position.offset, stride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 1); deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::NORMAL, Renderer::Backend::Format::R32G32B32_SFLOAT, - firstVertexOffset + shadermodel->m_Normal.offset, stride, + shadermodel->m_Normal.offset, stride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 1); - deviceCommandContext->SetVertexBuffer(1, shadermodel->m_Array.GetBuffer()); + deviceCommandContext->SetVertexBuffer( + 1, shadermodel->m_Array.GetBuffer(), firstVertexOffset); deviceCommandContext->SetIndexBuffer(m->shadermodeldef->m_IndexArray.GetBuffer()); // Render the lot. diff --git a/source/renderer/InstancingModelRenderer.cpp b/source/renderer/InstancingModelRenderer.cpp index 0668b83dda..e2dca92e36 100644 --- a/source/renderer/InstancingModelRenderer.cpp +++ b/source/renderer/InstancingModelRenderer.cpp @@ -323,12 +323,12 @@ void InstancingModelRenderer::PrepareModelDef( deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::POSITION, m->imodeldef->m_Position.format, - firstVertexOffset + m->imodeldef->m_Position.offset, stride, + m->imodeldef->m_Position.offset, stride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::NORMAL, m->imodeldef->m_Normal.format, - firstVertexOffset + m->imodeldef->m_Normal.offset, stride, + m->imodeldef->m_Normal.offset, stride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); constexpr size_t MAX_UV = 2; @@ -339,7 +339,7 @@ void InstancingModelRenderer::PrepareModelDef( static_cast(Renderer::Backend::VertexAttributeStream::UV0) + uv); deviceCommandContext->SetVertexAttributeFormat( stream, m->imodeldef->m_UVs[uv].format, - firstVertexOffset + m->imodeldef->m_UVs[uv].offset, stride, + m->imodeldef->m_UVs[uv].offset, stride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); } @@ -349,12 +349,12 @@ void InstancingModelRenderer::PrepareModelDef( deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::UV2, m->imodeldef->m_BlendJoints.format, - firstVertexOffset + m->imodeldef->m_BlendJoints.offset, stride, + m->imodeldef->m_BlendJoints.offset, stride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::UV3, m->imodeldef->m_BlendWeights.format, - firstVertexOffset + m->imodeldef->m_BlendWeights.offset, stride, + m->imodeldef->m_BlendWeights.offset, stride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); } @@ -363,11 +363,12 @@ void InstancingModelRenderer::PrepareModelDef( deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::UV4, m->imodeldef->m_Tangent.format, - firstVertexOffset + m->imodeldef->m_Tangent.offset, stride, + m->imodeldef->m_Tangent.offset, stride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); } - deviceCommandContext->SetVertexBuffer(0, m->imodeldef->m_Array.GetBuffer()); + deviceCommandContext->SetVertexBuffer( + 0, m->imodeldef->m_Array.GetBuffer(), firstVertexOffset); } diff --git a/source/renderer/OverlayRenderer.cpp b/source/renderer/OverlayRenderer.cpp index b0211825f8..f73230a3a5 100644 --- a/source/renderer/OverlayRenderer.cpp +++ b/source/renderer/OverlayRenderer.cpp @@ -565,22 +565,23 @@ void OverlayRenderer::RenderQuadOverlays( // to the index offset when it's supported. deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::POSITION, - m->quadAttributePos.format, firstVertexOffset + m->quadAttributePos.offset, vertexStride, + m->quadAttributePos.format, m->quadAttributePos.offset, vertexStride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::COLOR, - m->quadAttributeColor.format, firstVertexOffset + m->quadAttributeColor.offset, vertexStride, + m->quadAttributeColor.format, m->quadAttributeColor.offset, vertexStride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::UV0, - m->quadAttributeUV.format, firstVertexOffset + m->quadAttributeUV.offset, vertexStride, + m->quadAttributeUV.format, m->quadAttributeUV.offset, vertexStride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::UV1, - m->quadAttributeUV.format, firstVertexOffset + m->quadAttributeUV.offset, vertexStride, + m->quadAttributeUV.format, m->quadAttributeUV.offset, vertexStride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); - deviceCommandContext->SetVertexBuffer(0, m->quadVertices.GetBuffer()); + deviceCommandContext->SetVertexBuffer( + 0, m->quadVertices.GetBuffer(), firstVertexOffset); deviceCommandContext->SetIndexBuffer(m->quadIndices.GetBuffer()); deviceCommandContext->DrawIndexed(m->quadIndices.GetOffset() + batchRenderData.m_IndicesBase, batchNumQuads * 6, 0); diff --git a/source/renderer/PatchRData.cpp b/source/renderer/PatchRData.cpp index 5ead3c6109..76fa1c72af 100644 --- a/source/renderer/PatchRData.cpp +++ b/source/renderer/PatchRData.cpp @@ -835,7 +835,7 @@ void CPatchRData::RenderBases( offsetof(SBaseVertex, m_Position), stride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); - deviceCommandContext->SetVertexBuffer(0, itv->first->GetBuffer()); + deviceCommandContext->SetVertexBuffer(0, itv->first->GetBuffer(), 0); for (IndexBufferBatches::iterator it = itv->second.begin(); it != itv->second.end(); ++it) { @@ -1092,7 +1092,7 @@ void CPatchRData::RenderBlends( offsetof(SBlendVertex, m_AlphaUVs), stride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); - deviceCommandContext->SetVertexBuffer(0, itv->first->GetBuffer()); + deviceCommandContext->SetVertexBuffer(0, itv->first->GetBuffer(), 0); } for (IndexBufferBatches::iterator it = itv->second.begin(); it != itv->second.end(); ++it) @@ -1168,7 +1168,7 @@ void CPatchRData::RenderStreams( { streamBatch.first->UploadIfNeeded(deviceCommandContext); - deviceCommandContext->SetVertexBuffer(0, streamBatch.first->GetBuffer()); + deviceCommandContext->SetVertexBuffer(0, streamBatch.first->GetBuffer(), 0); for (const std::pair& batchIndexBuffer : streamBatch.second) { @@ -1246,7 +1246,7 @@ void CPatchRData::RenderSides( lastVB = patch->m_VBSides->m_Owner; patch->m_VBSides->m_Owner->UploadIfNeeded(deviceCommandContext); - deviceCommandContext->SetVertexBuffer(0, patch->m_VBSides->m_Owner->GetBuffer()); + deviceCommandContext->SetVertexBuffer(0, patch->m_VBSides->m_Owner->GetBuffer(), 0); } deviceCommandContext->Draw(patch->m_VBSides->m_Index, patch->m_VBSides->m_Count); @@ -1502,18 +1502,19 @@ void CPatchRData::RenderWaterSurface( deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::POSITION, Renderer::Backend::Format::R32G32B32_SFLOAT, - firstVertexOffset + offsetof(SWaterVertex, m_Position), stride, + offsetof(SWaterVertex, m_Position), stride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); if (bindWaterData) { deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::UV1, Renderer::Backend::Format::R32G32_SFLOAT, - firstVertexOffset + offsetof(SWaterVertex, m_WaterData), stride, + offsetof(SWaterVertex, m_WaterData), stride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); } - deviceCommandContext->SetVertexBuffer(0, m_VBWater->m_Owner->GetBuffer()); + deviceCommandContext->SetVertexBuffer( + 0, m_VBWater->m_Owner->GetBuffer(), firstVertexOffset); deviceCommandContext->SetIndexBuffer(m_VBWaterIndices->m_Owner->GetBuffer()); deviceCommandContext->DrawIndexed(m_VBWaterIndices->m_Index, m_VBWaterIndices->m_Count, 0); @@ -1539,15 +1540,16 @@ void CPatchRData::RenderWaterShore( deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::POSITION, Renderer::Backend::Format::R32G32B32_SFLOAT, - firstVertexOffset + offsetof(SWaterVertex, m_Position), stride, + offsetof(SWaterVertex, m_Position), stride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::UV1, Renderer::Backend::Format::R32G32_SFLOAT, - firstVertexOffset + offsetof(SWaterVertex, m_WaterData), stride, + offsetof(SWaterVertex, m_WaterData), stride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); - deviceCommandContext->SetVertexBuffer(0, m_VBWaterShore->m_Owner->GetBuffer()); + deviceCommandContext->SetVertexBuffer( + 0, m_VBWaterShore->m_Owner->GetBuffer(), firstVertexOffset); deviceCommandContext->SetIndexBuffer(m_VBWaterIndicesShore->m_Owner->GetBuffer()); deviceCommandContext->DrawIndexed(m_VBWaterIndicesShore->m_Index, m_VBWaterIndicesShore->m_Count, 0); diff --git a/source/renderer/SkyManager.cpp b/source/renderer/SkyManager.cpp index ed3983b263..5cc5ef467c 100644 --- a/source/renderer/SkyManager.cpp +++ b/source/renderer/SkyManager.cpp @@ -254,14 +254,15 @@ void SkyManager::RenderSky( deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::POSITION, m_AttributePosition.format, - firstVertexOffset + m_AttributePosition.offset, stride, + m_AttributePosition.offset, stride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::UV0, m_AttributeUV.format, - firstVertexOffset + m_AttributeUV.offset, stride, + m_AttributeUV.offset, stride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); - deviceCommandContext->SetVertexBuffer(0, m_VertexArray.GetBuffer()); + deviceCommandContext->SetVertexBuffer( + 0, m_VertexArray.GetBuffer(), firstVertexOffset); deviceCommandContext->Draw(0, m_VertexArray.GetNumberOfVertices()); diff --git a/source/renderer/TexturedLineRData.cpp b/source/renderer/TexturedLineRData.cpp index dab688c4dc..03b3acad7b 100644 --- a/source/renderer/TexturedLineRData.cpp +++ b/source/renderer/TexturedLineRData.cpp @@ -75,7 +75,7 @@ void CTexturedLineRData::Render( offsetof(CTexturedLineRData::SVertex, m_UV), stride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); - deviceCommandContext->SetVertexBuffer(0, m_VB->m_Owner->GetBuffer()); + deviceCommandContext->SetVertexBuffer(0, m_VB->m_Owner->GetBuffer(), 0); deviceCommandContext->SetIndexBuffer(m_VBIndices->m_Owner->GetBuffer()); deviceCommandContext->DrawIndexed(m_VBIndices->m_Index, m_VBIndices->m_Count, 0); diff --git a/source/renderer/WaterManager.cpp b/source/renderer/WaterManager.cpp index 3572a0d8e8..2bcab55bf9 100644 --- a/source/renderer/WaterManager.cpp +++ b/source/renderer/WaterManager.cpp @@ -833,33 +833,33 @@ void WaterManager::RenderWaves( deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::POSITION, Renderer::Backend::Format::R32G32B32_SFLOAT, - firstVertexOffset + offsetof(SWavesVertex, m_BasePosition), stride, + offsetof(SWavesVertex, m_BasePosition), stride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::NORMAL, Renderer::Backend::Format::R32G32_SFLOAT, - firstVertexOffset + offsetof(SWavesVertex, m_PerpVect), stride, + offsetof(SWavesVertex, m_PerpVect), stride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::UV0, Renderer::Backend::Format::R8G8_UINT, - firstVertexOffset + offsetof(SWavesVertex, m_UV), stride, + offsetof(SWavesVertex, m_UV), stride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::UV1, Renderer::Backend::Format::R32G32B32_SFLOAT, - firstVertexOffset + offsetof(SWavesVertex, m_ApexPosition), stride, + offsetof(SWavesVertex, m_ApexPosition), stride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::UV2, Renderer::Backend::Format::R32G32B32_SFLOAT, - firstVertexOffset + offsetof(SWavesVertex, m_SplashPosition), stride, + offsetof(SWavesVertex, m_SplashPosition), stride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); deviceCommandContext->SetVertexAttributeFormat( Renderer::Backend::VertexAttributeStream::UV3, Renderer::Backend::Format::R32G32B32_SFLOAT, - firstVertexOffset + offsetof(SWavesVertex, m_RetreatPosition), stride, + offsetof(SWavesVertex, m_RetreatPosition), stride, Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0); deviceCommandContext->SetUniform( @@ -867,7 +867,8 @@ void WaterManager::RenderWaves( deviceCommandContext->SetUniform( shader->GetBindingSlot(str_width), static_cast(m_ShoreWaves[a]->m_Width)); - deviceCommandContext->SetVertexBuffer(0, VBchunk->m_Owner->GetBuffer()); + deviceCommandContext->SetVertexBuffer( + 0, VBchunk->m_Owner->GetBuffer(), firstVertexOffset); deviceCommandContext->SetIndexBuffer(m_ShoreWavesVBIndices->m_Owner->GetBuffer()); const uint32_t indexCount = (m_ShoreWaves[a]->m_Width - 1) * (7 * 6); diff --git a/source/renderer/backend/IDeviceCommandContext.h b/source/renderer/backend/IDeviceCommandContext.h index e381e35554..a5a076df93 100644 --- a/source/renderer/backend/IDeviceCommandContext.h +++ b/source/renderer/backend/IDeviceCommandContext.h @@ -86,7 +86,8 @@ public: const uint32_t stride, const VertexAttributeRate rate, const uint32_t bindingSlot) = 0; - virtual void SetVertexBuffer(const uint32_t bindingSlot, IBuffer* buffer) = 0; + virtual void SetVertexBuffer( + const uint32_t bindingSlot, IBuffer* buffer, const uint32_t offset) = 0; virtual void SetVertexBufferData( const uint32_t bindingSlot, const void* data, const uint32_t dataSize) = 0; diff --git a/source/renderer/backend/dummy/DeviceCommandContext.cpp b/source/renderer/backend/dummy/DeviceCommandContext.cpp index 5fc89f34e3..94d918eb26 100644 --- a/source/renderer/backend/dummy/DeviceCommandContext.cpp +++ b/source/renderer/backend/dummy/DeviceCommandContext.cpp @@ -134,7 +134,7 @@ void CDeviceCommandContext::SetVertexAttributeFormat( { } -void CDeviceCommandContext::SetVertexBuffer(const uint32_t, IBuffer*) +void CDeviceCommandContext::SetVertexBuffer(const uint32_t, IBuffer*, const uint32_t) { } diff --git a/source/renderer/backend/dummy/DeviceCommandContext.h b/source/renderer/backend/dummy/DeviceCommandContext.h index 6f2a6b9162..ca3dcfa031 100644 --- a/source/renderer/backend/dummy/DeviceCommandContext.h +++ b/source/renderer/backend/dummy/DeviceCommandContext.h @@ -85,7 +85,8 @@ public: const uint32_t stride, const VertexAttributeRate rate, const uint32_t bindingSlot) override; - void SetVertexBuffer(const uint32_t bindingSlot, IBuffer* buffer) override; + void SetVertexBuffer( + const uint32_t bindingSlot, IBuffer* buffer, const uint32_t offset) override; void SetVertexBufferData( const uint32_t bindingSlot, const void* data, const uint32_t dataSize) override; diff --git a/source/renderer/backend/gl/DeviceCommandContext.cpp b/source/renderer/backend/gl/DeviceCommandContext.cpp index 286bf60021..a17a0506d1 100644 --- a/source/renderer/backend/gl/DeviceCommandContext.cpp +++ b/source/renderer/backend/gl/DeviceCommandContext.cpp @@ -865,7 +865,7 @@ void CDeviceCommandContext::SetVertexAttributeFormat( } void CDeviceCommandContext::SetVertexBuffer( - const uint32_t bindingSlot, IBuffer* buffer) + const uint32_t bindingSlot, IBuffer* buffer, const uint32_t offset) { ENSURE(buffer); ENSURE(buffer->GetType() == IBuffer::Type::VERTEX); @@ -879,7 +879,7 @@ void CDeviceCommandContext::SetVertexBuffer( const VertexAttributeStream stream = static_cast(index); m_ShaderProgram->VertexAttribPointer(stream, m_VertexAttributeFormat[index].format, - m_VertexAttributeFormat[index].offset, + m_VertexAttributeFormat[index].offset + offset, m_VertexAttributeFormat[index].stride, m_VertexAttributeFormat[index].rate, nullptr); diff --git a/source/renderer/backend/gl/DeviceCommandContext.h b/source/renderer/backend/gl/DeviceCommandContext.h index 217d658bf6..9e195f4651 100644 --- a/source/renderer/backend/gl/DeviceCommandContext.h +++ b/source/renderer/backend/gl/DeviceCommandContext.h @@ -92,7 +92,8 @@ public: const uint32_t stride, const VertexAttributeRate rate, const uint32_t bindingSlot) override; - void SetVertexBuffer(const uint32_t bindingSlot, IBuffer* buffer) override; + void SetVertexBuffer( + const uint32_t bindingSlot, IBuffer* buffer, const uint32_t offset) override; void SetVertexBufferData( const uint32_t bindingSlot, const void* data, const uint32_t dataSize) override;