Refactor scene viewport render planning
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
#include "SceneViewportEditorOverlayData.h"
|
||||
#include "SceneViewportOverlayHandleBuilder.h"
|
||||
#include "SceneViewportOverlayBuilder.h"
|
||||
#include "SceneViewportRenderPlan.h"
|
||||
#include "ViewportHostRenderFlowUtils.h"
|
||||
#include "ViewportHostRenderTargets.h"
|
||||
#include "ViewportObjectIdPicker.h"
|
||||
@@ -417,9 +418,7 @@ private:
|
||||
|
||||
struct SceneViewportRenderState {
|
||||
SceneViewportOverlayData overlay = {};
|
||||
Rendering::BuiltinPostProcessRequest builtinPostProcess = {};
|
||||
SceneViewportOverlayFrameData editorOverlayFrameData = {};
|
||||
std::vector<uint64_t> selectedObjectIds;
|
||||
SceneViewportRenderPlan renderPlan = {};
|
||||
};
|
||||
|
||||
ViewportEntry& GetEntry(EditorViewportKind kind) {
|
||||
@@ -641,17 +640,25 @@ private:
|
||||
return;
|
||||
}
|
||||
|
||||
outState.selectedObjectIds = context.GetSelectionManager().GetSelectedEntities();
|
||||
outState.editorOverlayFrameData = GetSceneViewEditorOverlayFrameData(context);
|
||||
const SceneViewportBuiltinPostProcessBuildResult builtinPostProcess =
|
||||
BuildSceneViewportBuiltinPostProcess(
|
||||
const std::vector<uint64_t> selectedObjectIds = context.GetSelectionManager().GetSelectedEntities();
|
||||
const SceneViewportOverlayFrameData& editorOverlayFrameData =
|
||||
GetSceneViewEditorOverlayFrameData(context);
|
||||
SceneViewportRenderPlanBuildResult renderPlan =
|
||||
BuildSceneViewportRenderPlan(
|
||||
entry.renderTargets,
|
||||
outState.overlay,
|
||||
outState.selectedObjectIds,
|
||||
entry.renderTargets.objectIdShaderView != nullptr,
|
||||
selectedObjectIds,
|
||||
editorOverlayFrameData,
|
||||
BuildSceneViewTransientTransformGizmoOverlayFrameData(),
|
||||
[this](const SceneViewportOverlayFrameData& frameData) {
|
||||
return CreateSceneViewportEditorOverlayPass(
|
||||
m_sceneViewportEditorOverlayRenderer,
|
||||
frameData);
|
||||
},
|
||||
kDebugSceneSelectionMask);
|
||||
outState.builtinPostProcess = builtinPostProcess.request;
|
||||
if (builtinPostProcess.warningStatusText != nullptr) {
|
||||
SetViewportStatusIfEmpty(entry.statusText, builtinPostProcess.warningStatusText);
|
||||
outState.renderPlan = std::move(renderPlan.plan);
|
||||
if (renderPlan.warningStatusText != nullptr) {
|
||||
SetViewportStatusIfEmpty(entry.statusText, renderPlan.warningStatusText);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -695,25 +702,7 @@ private:
|
||||
return false;
|
||||
}
|
||||
|
||||
ApplySceneViewportRenderRequestSetup(
|
||||
entry.renderTargets,
|
||||
&sceneState.builtinPostProcess,
|
||||
nullptr,
|
||||
requests[0]);
|
||||
SceneViewportOverlayFrameData renderOverlayFrameData = sceneState.editorOverlayFrameData;
|
||||
AppendSceneViewportOverlayFrameData(
|
||||
renderOverlayFrameData,
|
||||
BuildSceneViewTransientTransformGizmoOverlayFrameData());
|
||||
Rendering::RenderPassSequence overlayPassSequence = {};
|
||||
if (renderOverlayFrameData.HasOverlayPrimitives()) {
|
||||
overlayPassSequence.AddPass(
|
||||
CreateSceneViewportEditorOverlayPass(
|
||||
m_sceneViewportEditorOverlayRenderer,
|
||||
renderOverlayFrameData));
|
||||
requests[0].overlayPasses = &overlayPassSequence;
|
||||
}
|
||||
requests[0].hasClearColorOverride = true;
|
||||
requests[0].clearColorOverride = Math::Color(0.27f, 0.27f, 0.27f, 1.0f);
|
||||
ApplySceneViewportRenderPlan(entry.renderTargets, sceneState.renderPlan, requests[0]);
|
||||
|
||||
if (!m_sceneRenderer->Render(requests)) {
|
||||
ApplyViewportRenderFailure(
|
||||
|
||||
Reference in New Issue
Block a user