refactor(rendering): add override helpers for shared recording contexts

This commit is contained in:
2026-04-15 13:01:04 +08:00
parent 8aee665d32
commit ea2e44976a
5 changed files with 128 additions and 34 deletions

View File

@@ -22,24 +22,53 @@ struct RenderGraphRecordingContext {
RenderGraphBlackboard* blackboard = nullptr;
};
struct RenderGraphRecordingContextOverrides {
const Containers::String* passName = nullptr;
const RenderSurface* surface = nullptr;
bool overrideSourceSurface = false;
const RenderSurface* sourceSurface = nullptr;
bool overrideSourceColorView = false;
RHI::RHIResourceView* sourceColorView = nullptr;
bool overrideSourceColorState = false;
RHI::ResourceStates sourceColorState = RHI::ResourceStates::Common;
bool overrideSourceColorTexture = false;
RenderGraphTextureHandle sourceColorTexture = {};
bool overrideColorTargets = false;
std::vector<RenderGraphTextureHandle> colorTargets = {};
bool overrideDepthTarget = false;
RenderGraphTextureHandle depthTarget = {};
};
inline RenderGraphRecordingContext CloneRenderGraphRecordingContext(
const RenderGraphRecordingContext& context,
const Containers::String& passName) {
return {
const RenderGraphRecordingContextOverrides& overrides) {
RenderGraphRecordingContext clone = {
context.graphBuilder,
passName,
overrides.passName != nullptr ? *overrides.passName : context.passName,
context.renderContext,
context.sceneData,
context.surface,
context.sourceSurface,
context.sourceColorView,
context.sourceColorState,
context.sourceColorTexture,
context.colorTargets,
context.depthTarget,
overrides.surface != nullptr ? *overrides.surface : context.surface,
overrides.overrideSourceSurface ? overrides.sourceSurface : context.sourceSurface,
overrides.overrideSourceColorView ? overrides.sourceColorView : context.sourceColorView,
overrides.overrideSourceColorState ? overrides.sourceColorState : context.sourceColorState,
overrides.overrideSourceColorTexture ? overrides.sourceColorTexture : context.sourceColorTexture,
overrides.overrideColorTargets ? overrides.colorTargets : context.colorTargets,
overrides.overrideDepthTarget ? overrides.depthTarget : context.depthTarget,
context.executionSucceeded,
context.blackboard
};
return clone;
}
inline RenderGraphRecordingContext CloneRenderGraphRecordingContext(
const RenderGraphRecordingContext& context,
const Containers::String& passName) {
const RenderGraphRecordingContextOverrides overrides = {
&passName
};
return CloneRenderGraphRecordingContext(
context,
overrides);
}
inline RenderGraphRecordingContext BuildRenderGraphRecordingContext(