Align rendering orchestration with camera stack plans
This commit is contained in:
@@ -12,6 +12,7 @@
|
||||
#include "Physics/PhysicsWorld.h"
|
||||
#include "Rendering/Caches/DirectionalShadowSurfaceCache.h"
|
||||
#include "Rendering/Execution/CameraFramePlan.h"
|
||||
#include "Rendering/Execution/CameraStackFramePlan.h"
|
||||
#include "Rendering/Execution/DirectionalShadowExecutionState.h"
|
||||
#include "Rendering/Execution/CameraFrameRenderGraphFrameData.h"
|
||||
#include "Rendering/Execution/Internal/CameraFrameGraph/SurfaceUtils.h"
|
||||
@@ -2134,6 +2135,7 @@ public:
|
||||
m_supportsStageContextualMethod = nullptr;
|
||||
m_supportsStageMethod = nullptr;
|
||||
m_recordStageMethod = nullptr;
|
||||
m_finishCameraStackRenderingMethod = nullptr;
|
||||
m_resolvedPipelineHandle = 0;
|
||||
m_boundSceneDrawBackend = nullptr;
|
||||
}
|
||||
@@ -2322,6 +2324,35 @@ public:
|
||||
return flushed;
|
||||
}
|
||||
|
||||
void FinishCameraStackRendering(
|
||||
const Rendering::CameraStackFramePlan& stackPlan) override {
|
||||
if (!IsRuntimeAlive()) {
|
||||
return;
|
||||
}
|
||||
|
||||
MonoObject* const pipelineObject = GetManagedPipelineObject();
|
||||
MonoMethod* const method =
|
||||
ResolveFinishCameraStackRenderingMethod(pipelineObject);
|
||||
if (pipelineObject == nullptr ||
|
||||
method == nullptr) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (const Rendering::CameraFramePlan& plan :
|
||||
stackPlan.cameraPlans) {
|
||||
int32_t rendererIndex = plan.request.rendererIndex;
|
||||
uint64_t framePlanId = plan.framePlanId;
|
||||
void* args[2] = {
|
||||
&rendererIndex,
|
||||
&framePlanId };
|
||||
m_runtime->InvokeManagedMethod(
|
||||
pipelineObject,
|
||||
method,
|
||||
args,
|
||||
nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
struct ManagedRenderFuncExecutionState {
|
||||
std::shared_ptr<const MonoManagedRenderPipelineAssetRuntime>
|
||||
@@ -2415,6 +2446,7 @@ private:
|
||||
m_supportsStageContextualMethod = nullptr;
|
||||
m_supportsStageMethod = nullptr;
|
||||
m_recordStageMethod = nullptr;
|
||||
m_finishCameraStackRenderingMethod = nullptr;
|
||||
m_resolvedPipelineHandle = pipelineHandle;
|
||||
}
|
||||
|
||||
@@ -2471,6 +2503,19 @@ private:
|
||||
return m_recordStageMethod;
|
||||
}
|
||||
|
||||
MonoMethod* ResolveFinishCameraStackRenderingMethod(
|
||||
MonoObject* pipelineObject) const {
|
||||
if (m_finishCameraStackRenderingMethod == nullptr) {
|
||||
m_finishCameraStackRenderingMethod =
|
||||
m_runtime->ResolveManagedMethod(
|
||||
pipelineObject,
|
||||
"FinishCameraStackRenderingInstance",
|
||||
2);
|
||||
}
|
||||
|
||||
return m_finishCameraStackRenderingMethod;
|
||||
}
|
||||
|
||||
bool FlushManagedRasterPasses(
|
||||
const Rendering::RenderPipelineStageRenderGraphContext& context,
|
||||
ManagedScriptableRenderContextState& managedContextState) {
|
||||
@@ -2653,6 +2698,7 @@ private:
|
||||
mutable MonoMethod* m_supportsStageContextualMethod = nullptr;
|
||||
mutable MonoMethod* m_supportsStageMethod = nullptr;
|
||||
mutable MonoMethod* m_recordStageMethod = nullptr;
|
||||
mutable MonoMethod* m_finishCameraStackRenderingMethod = nullptr;
|
||||
mutable uint32_t m_resolvedPipelineHandle = 0;
|
||||
std::vector<std::unique_ptr<Rendering::RenderPass>> m_fullscreenPassPool = {};
|
||||
Rendering::SceneDrawBackend* m_boundSceneDrawBackend = nullptr;
|
||||
|
||||
Reference in New Issue
Block a user