From de8a6bea58ac1c4fa1996b2751f4c3c09e7c6fcd Mon Sep 17 00:00:00 2001 From: Wojciech Figat Date: Fri, 1 Apr 2022 12:40:26 +0200 Subject: [PATCH] Add drawing RenderList if it was not batched/sorted --- Source/Engine/Renderer/RenderList.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/Source/Engine/Renderer/RenderList.cpp b/Source/Engine/Renderer/RenderList.cpp index 43dcfd82e..e5f353770 100644 --- a/Source/Engine/Renderer/RenderList.cpp +++ b/Source/Engine/Renderer/RenderList.cpp @@ -783,6 +783,28 @@ DRAW: context->DrawIndexedInstanced(drawCall.Draw.IndicesCount, drawCall.InstanceCount, 0, 0, drawCall.Draw.StartIndex); } } + if (list.Batches.IsEmpty() && list.Indices.Count() != 0) + { + // Draw calls list has nto been batched so execute draw calls separately + for (int32 j = 0; j < list.Indices.Count(); j++) + { + auto& drawCall = DrawCalls[list.Indices[j]]; + bindParams.FirstDrawCall = &drawCall; + drawCall.Material->Bind(bindParams); + + context->BindIB(drawCall.Geometry.IndexBuffer); + context->BindVB(ToSpan(drawCall.Geometry.VertexBuffers, 3), drawCall.Geometry.VertexBuffersOffsets); + + if (drawCall.InstanceCount == 0) + { + context->DrawIndexedInstancedIndirect(drawCall.Draw.IndirectArgsBuffer, drawCall.Draw.IndirectArgsOffset); + } + else + { + context->DrawIndexedInstanced(drawCall.Draw.IndicesCount, drawCall.InstanceCount, 0, 0, drawCall.Draw.StartIndex); + } + } + } } }