Fix DDGI probes debug when using very large amount of probes
This commit is contained in:
@@ -757,13 +757,19 @@ bool DynamicDiffuseGlobalIlluminationPass::Render(RenderContext& renderContext,
|
|||||||
if (_debugModel && _debugModel->IsLoaded() && _debugModel->CanBeRendered() && _debugMaterial && _debugMaterial->IsLoaded())
|
if (_debugModel && _debugModel->IsLoaded() && _debugModel->CanBeRendered() && _debugMaterial && _debugMaterial->IsLoaded())
|
||||||
{
|
{
|
||||||
RenderContext debugRenderContext(renderContext);
|
RenderContext debugRenderContext(renderContext);
|
||||||
debugRenderContext.List = RenderList::GetFromPool();
|
|
||||||
debugRenderContext.View.Pass = DrawPass::GBuffer;
|
|
||||||
debugRenderContext.View.Prepare(debugRenderContext);
|
|
||||||
Matrix world;
|
Matrix world;
|
||||||
Matrix::Scaling(Float3(0.2f), world);
|
Matrix::Scaling(Float3(0.2f), world);
|
||||||
const Mesh& debugMesh = _debugModel->LODs[0].Meshes[0];
|
const Mesh& debugMesh = _debugModel->LODs[0].Meshes[0];
|
||||||
for (int32 probeIndex = 0; probeIndex < ddgiData.ProbesCountTotal; probeIndex++)
|
constexpr int32 maxProbesPerDrawing = 32 * 1024;
|
||||||
|
int32 probesDrawingStart = 0;
|
||||||
|
while (probesDrawingStart < ddgiData.ProbesCountTotal)
|
||||||
|
{
|
||||||
|
debugRenderContext.List = RenderList::GetFromPool();
|
||||||
|
debugRenderContext.View.Pass = DrawPass::GBuffer;
|
||||||
|
debugRenderContext.View.Prepare(debugRenderContext);
|
||||||
|
// TODO: refactor this into BatchedDrawCalls for faster draw calls processing
|
||||||
|
const int32 probesDrawingEnd = Math::Min(probesDrawingStart + maxProbesPerDrawing, ddgiData.ProbesCountTotal);
|
||||||
|
for (int32 probeIndex = probesDrawingStart; probeIndex < probesDrawingEnd; probeIndex++)
|
||||||
debugMesh.Draw(debugRenderContext, _debugMaterial, world, StaticFlags::None, true, DrawPass::GBuffer, (float)probeIndex);
|
debugMesh.Draw(debugRenderContext, _debugMaterial, world, StaticFlags::None, true, DrawPass::GBuffer, (float)probeIndex);
|
||||||
debugRenderContext.List->SortDrawCalls(debugRenderContext, false, DrawCallsListType::GBuffer);
|
debugRenderContext.List->SortDrawCalls(debugRenderContext, false, DrawCallsListType::GBuffer);
|
||||||
context->SetViewportAndScissors(debugRenderContext.View.ScreenSize.X, debugRenderContext.View.ScreenSize.Y);
|
context->SetViewportAndScissors(debugRenderContext.View.ScreenSize.X, debugRenderContext.View.ScreenSize.Y);
|
||||||
@@ -779,11 +785,11 @@ bool DynamicDiffuseGlobalIlluminationPass::Render(RenderContext& renderContext,
|
|||||||
{
|
{
|
||||||
// Pass DDGI data to the material
|
// Pass DDGI data to the material
|
||||||
_debugMaterial->SetParameterValue(TEXT("ProbesData"), Variant(ddgiData.ProbesData));
|
_debugMaterial->SetParameterValue(TEXT("ProbesData"), Variant(ddgiData.ProbesData));
|
||||||
#if DDGI_DEBUG_INSTABILITY
|
#if DDGI_DEBUG_INSTABILITY
|
||||||
_debugMaterial->SetParameterValue(TEXT("ProbesIrradiance"), Variant(ddgiData.ProbesInstability));
|
_debugMaterial->SetParameterValue(TEXT("ProbesIrradiance"), Variant(ddgiData.ProbesInstability));
|
||||||
#else
|
#else
|
||||||
_debugMaterial->SetParameterValue(TEXT("ProbesIrradiance"), Variant(ddgiData.ProbesIrradiance));
|
_debugMaterial->SetParameterValue(TEXT("ProbesIrradiance"), Variant(ddgiData.ProbesIrradiance));
|
||||||
#endif
|
#endif
|
||||||
_debugMaterial->SetParameterValue(TEXT("ProbesDistance"), Variant(ddgiData.ProbesDistance));
|
_debugMaterial->SetParameterValue(TEXT("ProbesDistance"), Variant(ddgiData.ProbesDistance));
|
||||||
auto cb = _debugMaterial->GetShader()->GetCB(3);
|
auto cb = _debugMaterial->GetShader()->GetCB(3);
|
||||||
if (cb)
|
if (cb)
|
||||||
@@ -794,6 +800,8 @@ bool DynamicDiffuseGlobalIlluminationPass::Render(RenderContext& renderContext,
|
|||||||
}
|
}
|
||||||
debugRenderContext.List->ExecuteDrawCalls(debugRenderContext, DrawCallsListType::GBuffer);
|
debugRenderContext.List->ExecuteDrawCalls(debugRenderContext, DrawCallsListType::GBuffer);
|
||||||
RenderList::ReturnToPool(debugRenderContext.List);
|
RenderList::ReturnToPool(debugRenderContext.List);
|
||||||
|
probesDrawingStart = probesDrawingEnd;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user