disabledPasses property
Frame-graph nodes to leave out of this frame, by name — gfx-37n.
The name is the node's own FrameGraphNode.name, exactly as
FrameResult.passes already reports it, which is what makes this
addressable at all: an application can list what ran, hand a name back,
and get a frame without it.
Data rather than a predicate, deliberately. A bool Function(String)
would be one character shorter at the call site and would cost the rest
of this class: every pixel test in this repository is driven from a
RenderSettings, and a frame with a closure applied is a frame no golden
can describe. A set can also be written into a project file, put in a bug
report, and diffed to see what an editor changed; and a name no node
carries is rejected at compile with the name in the message, which a
predicate matching nothing cannot be told apart from a misspelling.
What happens to a reader of a suppressed node is already decided, and three of the four answers needed no new code. An optional read comes back null and the reader degrades — that is how the composite already treats bloom and the occlusion. A hard read cannot be satisfied, so the reader is culled with it, transitively, without an error. A suppressed link in a read-modify-write chain is free: it consumes no version, so the next pass binds the version before it, which is what "skip this step and keep everything after it" has to mean.
The fourth is the sole producer of something the frame asked for, and four
names are refused rather than honoured, each for its own reason:
composite and scene, because the frame has no picture without them and
the fallback would hand back a stale texture; object ids, because a pick
already taken off the queue would never be answered and a click would
await forever; and the computed reflection probe N, because it exists
only on frames with that many probes.
Implementation
final Set<String> disabledPasses;