Switch scene viewport flow to frame plans
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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()) {
|
||||||
|
|||||||
Reference in New Issue
Block a user