OptionalenabledWhether this effect renders. (Default: true)
Set to false to skip this effect's render(): the chain passes
its input straight through to the next stage (or to the canvas if
it is the last stage), with no draw. Re-checked every frame, so it
is a cheap runtime toggle — the effect stays attached and keeps its
buffers, paying no re-init cost.
init and update still run while disabled, so stateful effects
stay warm and re-enable seamlessly. Omitting the field (or
undefined) means enabled.
OptionaldisposeOptionalinitOptionaloutputThe rect this stage draws into, as [x, y, w, h].
Coordinates are in physical pixels, relative to the element, with
the origin at the bottom-left.
Omit this method (or return undefined) when the effect does not
change the size of the content, such as a grayscale or invert
filter. The stage then draws into the same rect as its input.
Some common rects to return:
dims.contentRect — just the element, with no extra space.px extra pixels on every side, for effects[-px, -px, elementPixel[0] + 2 * px, elementPixel[1] + 2 * px].dims.canvasRect — the whole canvas, including thescrollPadding area around the viewport.Each stage picks its own rect. If one stage returns 100×100 and
the next returns 50×50, those are the sizes used; rects do not
grow as the chain runs.
OptionalrenderRender phase. Omit to make this effect transparent in the chain.
OptionalupdateState-update phase. ctx.src / ctx.target may point to stale /
previous-frame handles here, so ctx.draw() MUST NOT be called.
If called, the orchestrator silently ignores it.
Effect interface.
Lifecycle hooks:
init: called once on effect registerupdate: called every frame, beforerenderrender: called every frame. Bypassed if omitteddispose: called once on removaloutputRectdeclares the rect this stage writes into, inelement-local physical px. Defaults to the source rect (no growth).