String literals rather than an enum, matching RendererBackend and
TransformAuthority: they serialize, log, and compare as themselves.
"feedback" — the pass samples the target it is drawing into. Reading and
writing one surface in a single pass is undefined behaviour on every
backend, so R-4's rule is that the sample is refused rather than
attempted; what the author gets instead depends on the pipeline (the WebGL
backend drops a sprite draw entirely, and draws a surface material
untextured), and in no case is it the picture that was authored. Ping-pong
between two targets.
"order" — the pass samples a target that only a later enabled pass
writes. The frame draws stale contents: whatever the previous frame left,
or transparent black on the first one. This is the inter-pass rule the
graph exists to enforce; move the producer earlier.
"unwritten" — the pass samples a target no enabled pass writes.
Either the producer is missing, or it is disabled (§63's enable/disable
toggled a producer off but not its consumer). A warning rather than an
error: the first frame of a ping-pong legitimately samples an
uninitialised target, which R-4 defines as transparent black.
"opaque" — the pass is a CustomRenderPass; the graph cannot see
what it samples and has skipped every resource check for it. Informational,
and the reason an all-custom graph does not get to report zero issues.
What RenderGraph.validate can find (§63's "pass dependencies").
String literals rather than an enum, matching
RendererBackendandTransformAuthority: they serialize, log, and compare as themselves."feedback"— the pass samples the target it is drawing into. Reading and writing one surface in a single pass is undefined behaviour on every backend, so R-4's rule is that the sample is refused rather than attempted; what the author gets instead depends on the pipeline (the WebGL backend drops a sprite draw entirely, and draws a surface material untextured), and in no case is it the picture that was authored. Ping-pong between two targets."order"— the pass samples a target that only a later enabled pass writes. The frame draws stale contents: whatever the previous frame left, or transparent black on the first one. This is the inter-pass rule the graph exists to enforce; move the producer earlier."unwritten"— the pass samples a target no enabled pass writes. Either the producer is missing, or it is disabled (§63's enable/disable toggled a producer off but not its consumer). A warning rather than an error: the first frame of a ping-pong legitimately samples an uninitialised target, which R-4 defines as transparent black."opaque"— the pass is a CustomRenderPass; the graph cannot see what it samples and has skipped every resource check for it. Informational, and the reason an all-custom graph does not get to report zero issues.