refactor(rendering): formalize camera frame stage contracts

This commit is contained in:
2026-04-15 15:14:06 +08:00
parent 3937badf37
commit 795eaf80df
16 changed files with 558 additions and 296 deletions

View File

@@ -102,31 +102,31 @@ bool CameraFramePlan::IsFinalOutputStageValid() const {
}
bool CameraFramePlan::HasFrameStage(CameraFrameStage stage) const {
switch (stage) {
case CameraFrameStage::PreScenePasses:
return preScenePasses != nullptr;
case CameraFrameStage::ShadowCaster:
return shadowCaster.IsRequested() || directionalShadow.IsValid();
case CameraFrameStage::DepthOnly:
return request.depthOnly.IsRequested();
case CameraFrameStage::MainScene:
if (stage == CameraFrameStage::MainScene) {
return true;
case CameraFrameStage::PostProcess:
return postProcess.IsRequested();
case CameraFrameStage::FinalOutput:
return finalOutput.IsRequested();
case CameraFrameStage::ObjectId:
}
if (IsCameraFrameSequenceStage(stage)) {
return GetPassSequence(stage) != nullptr;
}
switch (GetCameraFrameStageRequestKind(stage)) {
case CameraFrameStageRequestKind::ShadowCaster:
return shadowCaster.IsRequested() || directionalShadow.IsValid();
case CameraFrameStageRequestKind::DepthOnly:
return request.depthOnly.IsRequested();
case CameraFrameStageRequestKind::ObjectId:
return request.objectId.IsRequested();
case CameraFrameStage::PostScenePasses:
return postScenePasses != nullptr;
case CameraFrameStage::OverlayPasses:
return overlayPasses != nullptr;
default:
return false;
}
}
RenderPassSequence* CameraFramePlan::GetPassSequence(CameraFrameStage stage) const {
if (!IsCameraFrameSequenceStage(stage)) {
return nullptr;
}
switch (stage) {
case CameraFrameStage::PreScenePasses:
return preScenePasses;
@@ -144,10 +144,10 @@ RenderPassSequence* CameraFramePlan::GetPassSequence(CameraFrameStage stage) con
}
const ScenePassRenderRequest* CameraFramePlan::GetScenePassRequest(CameraFrameStage stage) const {
switch (stage) {
case CameraFrameStage::ShadowCaster:
switch (GetCameraFrameStageRequestKind(stage)) {
case CameraFrameStageRequestKind::ShadowCaster:
return &shadowCaster;
case CameraFrameStage::DepthOnly:
case CameraFrameStageRequestKind::DepthOnly:
return &request.depthOnly;
default:
return nullptr;
@@ -155,7 +155,10 @@ const ScenePassRenderRequest* CameraFramePlan::GetScenePassRequest(CameraFrameSt
}
const ObjectIdRenderRequest* CameraFramePlan::GetObjectIdRequest(CameraFrameStage stage) const {
return stage == CameraFrameStage::ObjectId ? &request.objectId : nullptr;
return GetCameraFrameStageRequestKind(stage) ==
CameraFrameStageRequestKind::ObjectId
? &request.objectId
: nullptr;
}
const RenderSurface& CameraFramePlan::GetMainSceneSurface() const {