Added full support for runtime editing of material properties #215
|
@ -570,13 +570,6 @@ namespace SHADE
|
|||
return;
|
||||
}
|
||||
|
||||
// Finalise all batches
|
||||
for (auto vp : viewports)
|
||||
for (auto renderer : vp->GetRenderers())
|
||||
{
|
||||
renderer->GetRenderGraph()->FinaliseBatch(renderContext.GetCurrentFrame(), descPool);
|
||||
}
|
||||
|
||||
// Resize
|
||||
auto windowDims = window->GetWindowSize();
|
||||
if (renderContext.GetResizeAndReset())
|
||||
|
@ -591,6 +584,13 @@ namespace SHADE
|
|||
// #BackEndTest: For for the fence initialized by queue submit
|
||||
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
|
||||
renderContext.AcquireNextIamge();
|
||||
const uint32_t CURR_FRAME_IDX_2 = renderContext.GetCurrentFrame();
|
||||
|
@ -602,8 +602,6 @@ namespace SHADE
|
|||
if (currFrameData.cmdPoolHdls.empty())
|
||||
throw std::runtime_error("No command pools available!");
|
||||
currFrameData.cmdPoolHdls[0]->Reset();
|
||||
|
||||
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
@ -812,7 +810,7 @@ namespace SHADE
|
|||
|
||||
void SHGraphicsSystem::BeginRoutine::Execute(double) noexcept
|
||||
{
|
||||
SHResourceManager::FinaliseChanges();
|
||||
// Begin rendering
|
||||
reinterpret_cast<SHGraphicsSystem*>(system)->BeginRender();
|
||||
}
|
||||
|
||||
|
@ -838,8 +836,38 @@ namespace SHADE
|
|||
void SHGraphicsSystem::EndRoutine::Execute(double) noexcept
|
||||
{
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/* System Routine Functions - BatcherDispatcherRoutine */
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
|
@ -858,8 +886,6 @@ namespace SHADE
|
|||
if (!renderable.HasChanged())
|
||||
continue;
|
||||
|
||||
// TODO: Need to account for
|
||||
|
||||
// Remove from the SuperBatch it is previously in (prevMat if mat has changed)
|
||||
Handle<SHMaterialInstance> prevMaterial = renderable.HasMaterialChanged() ? renderable.GetPrevMaterial() : renderable.GetMaterial();
|
||||
if (prevMaterial)
|
||||
|
@ -879,8 +905,6 @@ namespace SHADE
|
|||
// Unset change flag
|
||||
renderable.ResetChangedFlag();
|
||||
}
|
||||
|
||||
// TODO: Also reset all material instances isDrity
|
||||
}
|
||||
#pragma endregion ROUTINES
|
||||
|
||||
|
|
|
@ -95,25 +95,31 @@ namespace SHADE
|
|||
class SH_API BeginRoutine final : public SHSystemRoutine
|
||||
{
|
||||
public:
|
||||
BeginRoutine();
|
||||
BeginRoutine();
|
||||
virtual void Execute(double dt) noexcept override final;
|
||||
};
|
||||
class SH_API RenderRoutine final : public SHSystemRoutine
|
||||
{
|
||||
public:
|
||||
RenderRoutine();
|
||||
RenderRoutine();
|
||||
virtual void Execute(double dt) noexcept override final;
|
||||
};
|
||||
class SH_API EndRoutine final : public SHSystemRoutine
|
||||
{
|
||||
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;
|
||||
};
|
||||
class SH_API BatcherDispatcherRoutine final : public SHSystemRoutine
|
||||
{
|
||||
public:
|
||||
BatcherDispatcherRoutine();
|
||||
BatcherDispatcherRoutine();
|
||||
virtual void Execute(double dt) noexcept override final;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue