refactor: extract scene viewport post-pass planning
This commit is contained in:
@@ -7,6 +7,33 @@
|
||||
namespace XCEngine {
|
||||
namespace Rendering {
|
||||
|
||||
namespace {
|
||||
|
||||
bool InitializePassSequence(
|
||||
RenderPassSequence* sequence,
|
||||
const RenderContext& context,
|
||||
bool& initialized) {
|
||||
if (sequence == nullptr) {
|
||||
initialized = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
initialized = sequence->Initialize(context);
|
||||
if (!initialized) {
|
||||
sequence->Shutdown();
|
||||
}
|
||||
|
||||
return initialized;
|
||||
}
|
||||
|
||||
void ShutdownPassSequence(RenderPassSequence* sequence, bool initialized) {
|
||||
if (sequence != nullptr && initialized) {
|
||||
sequence->Shutdown();
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
CameraRenderer::CameraRenderer()
|
||||
: m_pipeline(std::make_unique<Pipelines::BuiltinForwardPipeline>()) {
|
||||
}
|
||||
@@ -57,24 +84,42 @@ bool CameraRenderer::Render(
|
||||
sceneData
|
||||
};
|
||||
|
||||
if (request.preScenePasses != nullptr) {
|
||||
if (!request.preScenePasses->Initialize(request.context) ||
|
||||
!request.preScenePasses->Execute(passContext)) {
|
||||
return false;
|
||||
}
|
||||
bool preScenePassesInitialized = false;
|
||||
if (!InitializePassSequence(
|
||||
request.preScenePasses,
|
||||
request.context,
|
||||
preScenePassesInitialized)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!m_pipeline->Render(request.context, request.surface, sceneData)) {
|
||||
if (request.preScenePasses != nullptr &&
|
||||
!request.preScenePasses->Execute(passContext)) {
|
||||
ShutdownPassSequence(request.preScenePasses, preScenePassesInitialized);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (request.postScenePasses != nullptr) {
|
||||
if (!request.postScenePasses->Initialize(request.context) ||
|
||||
!request.postScenePasses->Execute(passContext)) {
|
||||
return false;
|
||||
}
|
||||
if (!m_pipeline->Render(request.context, request.surface, sceneData)) {
|
||||
ShutdownPassSequence(request.preScenePasses, preScenePassesInitialized);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool postScenePassesInitialized = false;
|
||||
if (!InitializePassSequence(
|
||||
request.postScenePasses,
|
||||
request.context,
|
||||
postScenePassesInitialized)) {
|
||||
ShutdownPassSequence(request.preScenePasses, preScenePassesInitialized);
|
||||
return false;
|
||||
}
|
||||
if (request.postScenePasses != nullptr &&
|
||||
!request.postScenePasses->Execute(passContext)) {
|
||||
ShutdownPassSequence(request.postScenePasses, postScenePassesInitialized);
|
||||
ShutdownPassSequence(request.preScenePasses, preScenePassesInitialized);
|
||||
return false;
|
||||
}
|
||||
|
||||
ShutdownPassSequence(request.postScenePasses, postScenePassesInitialized);
|
||||
ShutdownPassSequence(request.preScenePasses, preScenePassesInitialized);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user