Switch scene viewport flow to frame plans

This commit is contained in:
2026-04-14 00:40:11 +08:00
parent 21b0530f7b
commit e6950fa704
3 changed files with 22 additions and 22 deletions

View File

@@ -101,18 +101,18 @@ inline SceneViewportRenderPlanBuildResult BuildSceneViewportRenderPlan(
inline void ApplySceneViewportRenderPlan( inline void ApplySceneViewportRenderPlan(
const ViewportRenderTargets& targets, const ViewportRenderTargets& targets,
SceneViewportRenderPlan& plan, SceneViewportRenderPlan& plan,
Rendering::CameraRenderRequest& request) { Rendering::CameraFramePlan& framePlan) {
ApplySceneViewportRenderRequestSetup( ApplySceneViewportRenderRequestSetup(
targets, targets,
&plan.postScenePasses, &plan.postScenePasses,
request); framePlan);
if (plan.HasOverlayPasses()) { if (plan.HasOverlayPasses()) {
request.overlayPasses = &plan.overlayPasses; framePlan.overlayPasses = &plan.overlayPasses;
} }
request.hasClearColorOverride = plan.hasClearColorOverride; framePlan.request.hasClearColorOverride = plan.hasClearColorOverride;
request.clearColorOverride = plan.clearColorOverride; framePlan.request.clearColorOverride = plan.clearColorOverride;
} }
} // namespace Editor } // namespace Editor

View File

@@ -5,7 +5,7 @@
#include "ViewportHostRenderTargets.h" #include "ViewportHostRenderTargets.h"
#include <XCEngine/Core/Math/Color.h> #include <XCEngine/Core/Math/Color.h>
#include <XCEngine/Rendering/Planning/CameraRenderRequest.h> #include <XCEngine/Rendering/Execution/CameraFramePlan.h>
#include <string> #include <string>
#include <vector> #include <vector>
@@ -142,31 +142,31 @@ inline SceneViewportSelectionOutlineStyle BuildSceneViewportSelectionOutlineStyl
inline void ApplySceneViewportRenderRequestSetup( inline void ApplySceneViewportRenderRequestSetup(
const ViewportRenderTargets& targets, const ViewportRenderTargets& targets,
Rendering::RenderPassSequence* postPasses, Rendering::RenderPassSequence* postPasses,
Rendering::CameraRenderRequest& request) { Rendering::CameraFramePlan& plan) {
request.preScenePasses = nullptr; plan.preScenePasses = nullptr;
request.postScenePasses = nullptr; plan.postScenePasses = nullptr;
request.overlayPasses = nullptr; plan.overlayPasses = nullptr;
request.objectId = {}; plan.request.objectId = {};
if (postPasses != nullptr && postPasses->GetPassCount() > 0) { if (postPasses != nullptr && postPasses->GetPassCount() > 0) {
request.postScenePasses = postPasses; plan.postScenePasses = postPasses;
} }
if (targets.objectIdView == nullptr || targets.objectIdDepthView == nullptr) { if (targets.objectIdView == nullptr || targets.objectIdDepthView == nullptr) {
return; return;
} }
request.objectId.surface = BuildViewportObjectIdSurface(targets); plan.request.objectId.surface = BuildViewportObjectIdSurface(targets);
request.objectId.surface.SetRenderArea(request.surface.GetRenderArea()); plan.request.objectId.surface.SetRenderArea(plan.request.surface.GetRenderArea());
} }
inline void MarkSceneViewportRenderSuccess( inline void MarkSceneViewportRenderSuccess(
ViewportRenderTargets& targets, ViewportRenderTargets& targets,
const Rendering::CameraRenderRequest& request) { const Rendering::CameraFramePlan& plan) {
targets.colorState = RHI::ResourceStates::PixelShaderResource; targets.colorState = RHI::ResourceStates::PixelShaderResource;
targets.objectIdState = RHI::ResourceStates::PixelShaderResource; targets.objectIdState = RHI::ResourceStates::PixelShaderResource;
targets.selectionMaskState = RHI::ResourceStates::PixelShaderResource; targets.selectionMaskState = RHI::ResourceStates::PixelShaderResource;
targets.hasValidObjectIdFrame = request.objectId.IsRequested(); targets.hasValidObjectIdFrame = plan.request.objectId.IsRequested();
} }
inline void MarkGameViewportRenderSuccess(ViewportRenderTargets& targets) { inline void MarkGameViewportRenderSuccess(ViewportRenderTargets& targets) {

View File

@@ -591,9 +591,9 @@ private:
SceneViewportRenderState sceneState = {}; SceneViewportRenderState sceneState = {};
BuildSceneViewportRenderState(entry, context, sceneState); BuildSceneViewportRenderState(entry, context, sceneState);
std::vector<Rendering::CameraRenderRequest> requests = std::vector<Rendering::CameraFramePlan> plans =
m_sceneRenderer->BuildRenderRequests(*scene, m_sceneViewCamera.camera, renderContext, surface); m_sceneRenderer->BuildFramePlans(*scene, m_sceneViewCamera.camera, renderContext, surface);
if (requests.empty()) { if (plans.empty()) {
ApplyViewportRenderFailure( ApplyViewportRenderFailure(
entry, entry,
renderContext, renderContext,
@@ -602,9 +602,9 @@ private:
return false; return false;
} }
ApplySceneViewportRenderPlan(entry.renderTargets, sceneState.renderPlan, requests[0]); ApplySceneViewportRenderPlan(entry.renderTargets, sceneState.renderPlan, plans[0]);
if (!m_sceneRenderer->Render(requests)) { if (!m_sceneRenderer->Render(plans)) {
ApplyViewportRenderFailure( ApplyViewportRenderFailure(
entry, entry,
renderContext, renderContext,
@@ -613,7 +613,7 @@ private:
return false; return false;
} }
MarkSceneViewportRenderSuccess(entry.renderTargets, requests[0]); MarkSceneViewportRenderSuccess(entry.renderTargets, plans[0]);
const Core::uint32 pendingAsyncLoads = Resources::ResourceManager::Get().GetAsyncPendingCount(); const Core::uint32 pendingAsyncLoads = Resources::ResourceManager::Get().GetAsyncPendingCount();
context.GetSceneManager().NotifySceneViewportFramePresented(pendingAsyncLoads); context.GetSceneManager().NotifySceneViewportFramePresented(pendingAsyncLoads);
if (entry.statusText.empty()) { if (entry.statusText.empty()) {