Split pre-rendering tasks to a PrepareRenderRoutine
This commit is contained in:
parent
506b8836fe
commit
29b4465dfd
|
@ -570,13 +570,6 @@ namespace SHADE
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Finalise all batches
|
|
||||||
for (auto vp : viewports)
|
|
||||||
for (auto renderer : vp->GetRenderers())
|
|
||||||
{
|
|
||||||
renderer->GetRenderGraph()->FinaliseBatch(renderContext.GetCurrentFrame(), descPool);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Resize
|
// Resize
|
||||||
auto windowDims = window->GetWindowSize();
|
auto windowDims = window->GetWindowSize();
|
||||||
if (renderContext.GetResizeAndReset())
|
if (renderContext.GetResizeAndReset())
|
||||||
|
@ -591,6 +584,13 @@ namespace SHADE
|
||||||
// #BackEndTest: For for the fence initialized by queue submit
|
// #BackEndTest: For for the fence initialized by queue submit
|
||||||
renderContext.WaitForFence();
|
renderContext.WaitForFence();
|
||||||
|
|
||||||
|
// Finalise all batches
|
||||||
|
for (auto vp : viewports)
|
||||||
|
for (auto renderer : vp->GetRenderers())
|
||||||
|
{
|
||||||
|
renderer->GetRenderGraph()->FinaliseBatch(renderContext.GetCurrentFrame(), descPool);
|
||||||
|
}
|
||||||
|
|
||||||
// #BackEndTest: Acquire the next image in the swapchain available
|
// #BackEndTest: Acquire the next image in the swapchain available
|
||||||
renderContext.AcquireNextIamge();
|
renderContext.AcquireNextIamge();
|
||||||
const uint32_t CURR_FRAME_IDX_2 = renderContext.GetCurrentFrame();
|
const uint32_t CURR_FRAME_IDX_2 = renderContext.GetCurrentFrame();
|
||||||
|
@ -602,8 +602,6 @@ namespace SHADE
|
||||||
if (currFrameData.cmdPoolHdls.empty())
|
if (currFrameData.cmdPoolHdls.empty())
|
||||||
throw std::runtime_error("No command pools available!");
|
throw std::runtime_error("No command pools available!");
|
||||||
currFrameData.cmdPoolHdls[0]->Reset();
|
currFrameData.cmdPoolHdls[0]->Reset();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/***************************************************************************/
|
/***************************************************************************/
|
||||||
|
@ -812,7 +810,7 @@ namespace SHADE
|
||||||
|
|
||||||
void SHGraphicsSystem::BeginRoutine::Execute(double) noexcept
|
void SHGraphicsSystem::BeginRoutine::Execute(double) noexcept
|
||||||
{
|
{
|
||||||
SHResourceManager::FinaliseChanges();
|
// Begin rendering
|
||||||
reinterpret_cast<SHGraphicsSystem*>(system)->BeginRender();
|
reinterpret_cast<SHGraphicsSystem*>(system)->BeginRender();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -838,6 +836,36 @@ namespace SHADE
|
||||||
void SHGraphicsSystem::EndRoutine::Execute(double) noexcept
|
void SHGraphicsSystem::EndRoutine::Execute(double) noexcept
|
||||||
{
|
{
|
||||||
reinterpret_cast<SHGraphicsSystem*>(system)->EndRender();
|
reinterpret_cast<SHGraphicsSystem*>(system)->EndRender();
|
||||||
|
|
||||||
|
// Reset all material isDirty
|
||||||
|
auto gfxSystem = reinterpret_cast<SHGraphicsSystem*>(system);
|
||||||
|
auto [matBegin, matEnd] = gfxSystem->resourceManager.GetDenseAccess<SHMaterial>();
|
||||||
|
for (auto iter = matBegin; iter != matEnd; ++iter)
|
||||||
|
{
|
||||||
|
iter->ClearChangeFlag();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SHGraphicsSystem::PrepareRenderRoutine::PrepareRenderRoutine()
|
||||||
|
: SHSystemRoutine("Graphics System Pre-Render", true)
|
||||||
|
{}
|
||||||
|
|
||||||
|
void SHGraphicsSystem::PrepareRenderRoutine::Execute(double) noexcept
|
||||||
|
{
|
||||||
|
// Finish up, loading, unloading any resources
|
||||||
|
SHResourceManager::FinaliseChanges();
|
||||||
|
|
||||||
|
// Clean up and update all materials
|
||||||
|
auto gfxSystem = reinterpret_cast<SHGraphicsSystem*>(system);
|
||||||
|
auto [matInstBegin, matInstEnd] = gfxSystem->resourceManager.GetDenseAccess<SHMaterialInstance>();
|
||||||
|
for (auto iter = matInstBegin; iter != matInstEnd; ++iter)
|
||||||
|
{
|
||||||
|
auto baseMat = iter->GetBaseMaterial();
|
||||||
|
if (baseMat && baseMat->HasPipelineChanged())
|
||||||
|
{
|
||||||
|
iter->ResetProperties();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
@ -858,8 +886,6 @@ namespace SHADE
|
||||||
if (!renderable.HasChanged())
|
if (!renderable.HasChanged())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// TODO: Need to account for
|
|
||||||
|
|
||||||
// Remove from the SuperBatch it is previously in (prevMat if mat has changed)
|
// Remove from the SuperBatch it is previously in (prevMat if mat has changed)
|
||||||
Handle<SHMaterialInstance> prevMaterial = renderable.HasMaterialChanged() ? renderable.GetPrevMaterial() : renderable.GetMaterial();
|
Handle<SHMaterialInstance> prevMaterial = renderable.HasMaterialChanged() ? renderable.GetPrevMaterial() : renderable.GetMaterial();
|
||||||
if (prevMaterial)
|
if (prevMaterial)
|
||||||
|
@ -879,8 +905,6 @@ namespace SHADE
|
||||||
// Unset change flag
|
// Unset change flag
|
||||||
renderable.ResetChangedFlag();
|
renderable.ResetChangedFlag();
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Also reset all material instances isDrity
|
|
||||||
}
|
}
|
||||||
#pragma endregion ROUTINES
|
#pragma endregion ROUTINES
|
||||||
|
|
||||||
|
|
|
@ -95,25 +95,31 @@ namespace SHADE
|
||||||
class SH_API BeginRoutine final : public SHSystemRoutine
|
class SH_API BeginRoutine final : public SHSystemRoutine
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
BeginRoutine();
|
BeginRoutine();
|
||||||
virtual void Execute(double dt) noexcept override final;
|
virtual void Execute(double dt) noexcept override final;
|
||||||
};
|
};
|
||||||
class SH_API RenderRoutine final : public SHSystemRoutine
|
class SH_API RenderRoutine final : public SHSystemRoutine
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RenderRoutine();
|
RenderRoutine();
|
||||||
virtual void Execute(double dt) noexcept override final;
|
virtual void Execute(double dt) noexcept override final;
|
||||||
};
|
};
|
||||||
class SH_API EndRoutine final : public SHSystemRoutine
|
class SH_API EndRoutine final : public SHSystemRoutine
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
EndRoutine();
|
EndRoutine();
|
||||||
|
virtual void Execute(double dt) noexcept override final;
|
||||||
|
};
|
||||||
|
class SH_API PrepareRenderRoutine final : public SHSystemRoutine
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
PrepareRenderRoutine();
|
||||||
virtual void Execute(double dt) noexcept override final;
|
virtual void Execute(double dt) noexcept override final;
|
||||||
};
|
};
|
||||||
class SH_API BatcherDispatcherRoutine final : public SHSystemRoutine
|
class SH_API BatcherDispatcherRoutine final : public SHSystemRoutine
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
BatcherDispatcherRoutine();
|
BatcherDispatcherRoutine();
|
||||||
virtual void Execute(double dt) noexcept override final;
|
virtual void Execute(double dt) noexcept override final;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue