refactor(srp): enable managed standalone shadow and depth stages

This commit is contained in:
2026-04-21 16:22:26 +08:00
parent 2c49ac58d9
commit 1a6aacb636
18 changed files with 449 additions and 51 deletions

View File

@@ -63,6 +63,8 @@ CameraFramePlan CameraFramePlan::FromRequest(const CameraRenderRequest& request)
plan.shadowCasterStage.requested =
request.shadowCaster.IsRequested() ||
request.directionalShadow.IsValid();
plan.depthOnlyStage.requested =
request.depthOnly.IsRequested();
plan.colorChain.postProcess.requested = request.postProcess.IsRequested();
plan.colorChain.finalOutput.requested = request.finalOutput.IsRequested();
return plan;
@@ -232,6 +234,24 @@ void CameraFramePlan::ClearShadowCasterStage(
explicitlyConfigured;
}
bool CameraFramePlan::RequestDepthOnlyStage(
bool explicitlyConfigured) {
depthOnlyStage.requested =
request.depthOnly.IsRequested();
depthOnlyStage.explicitlyConfigured =
depthOnlyStage.explicitlyConfigured ||
explicitlyConfigured;
return depthOnlyStage.requested;
}
void CameraFramePlan::ClearDepthOnlyStage(
bool explicitlyConfigured) {
depthOnlyStage.requested = false;
depthOnlyStage.explicitlyConfigured =
depthOnlyStage.explicitlyConfigured ||
explicitlyConfigured;
}
bool CameraFramePlan::HasExplicitFullscreenStageConfiguration(
CameraFrameStage stage) const {
if (const CameraFrameFullscreenStagePlan* fullscreenStagePlan =
@@ -247,10 +267,18 @@ bool CameraFramePlan::HasExplicitShadowCasterStageConfiguration() const {
return shadowCasterStage.explicitlyConfigured;
}
bool CameraFramePlan::HasExplicitDepthOnlyStageConfiguration() const {
return depthOnlyStage.explicitlyConfigured;
}
bool CameraFramePlan::IsShadowCasterStageRequested() const {
return shadowCasterStage.requested;
}
bool CameraFramePlan::IsDepthOnlyStageRequested() const {
return depthOnlyStage.requested;
}
bool CameraFramePlan::IsPostProcessStageValid() const {
if (!IsFullscreenStageRequested(CameraFrameStage::PostProcess)) {
return true;
@@ -318,7 +346,7 @@ bool CameraFramePlan::HasFrameStage(CameraFrameStage stage) const {
case CameraFrameStageRequestKind::ShadowCaster:
return IsShadowCasterStageRequested();
case CameraFrameStageRequestKind::DepthOnly:
return request.depthOnly.IsRequested();
return IsDepthOnlyStageRequested();
case CameraFrameStageRequestKind::ObjectId:
return request.objectId.IsRequested();
default: