DOCS v0.1.13 github

@hatch:postfx v0.1.0

Common post-processing effects for the WrenLift game framework. Tonemap, Vignette, Bloom, FXAA, ColorGrade, ChromaticAberration — each a PostPass subclass that drops into g.postFX = PostFX.new(g) from @hatch:game. Effects ship here so the engine stays lean; new effects can be added without bumping @hatch:game.

stable system updated May 29, 2026 source ↗
README
$ hatch add @hatch:postfx

MOD bloom

CL Bloom

NEW Bloom.new(opts: Map)

NEW Bloom.new()

GET Bloom.threshold → Num

SET Bloom.threshold=(v: Num)

GET Bloom.knee → Num

SET Bloom.knee=(v: Num)

GET Bloom.intensity → Num

SET Bloom.intensity=(v: Num)

GET Bloom.levels → Num

GET Bloom.filterRadius → Num

SET Bloom.filterRadius=(v: Num)

GET Bloom.name

GET Bloom.stepCount

FN Bloom.static numOr_(opts, key, fallback)

FN Bloom.static intOr_(opts, key, fallback)

FN Bloom.requestTargets(width, height)

FN Bloom.onAdded_(orchestrator)

FN Bloom.buildPipelineOneInput_(fragmentWgsl, targetFormat, blendMode)

FN Bloom.buildPipelineTwoInputs_(fragmentWgsl, targetFormat, blendMode)

FN Bloom.cacheBindGroup_(layout, entries, key)

FN Bloom.dispatchStep_(orchestrator, encoder, ctx)

FN Bloom.runThreshold_(encoder, inputView, outputView)

FN Bloom.runDownsample_(encoder, inputView, outputView)

FN Bloom.runUpsample_(encoder, inputView, outputView)

FN Bloom.runComposite_(encoder, sceneView, bloomView, outputView)

FN Bloom.static SHADER_THRESHOLD_

FN Bloom.static SHADER_DOWNSAMPLE_

FN Bloom.static SHADER_UPSAMPLE_

FN Bloom.static SHADER_COMPOSITE_

MOD postfx

CL Cfg_

FN Cfg_.static numOr(opts, key, fallback)

FN Cfg_.static vec3Or(opts, key, fallback)

CL Tonemap

NEW Tonemap.new(opts: Map)

NEW Tonemap.new()

GET Tonemap.exposure → Num

SET Tonemap.exposure=(v: Num)

GET Tonemap.name

GET Tonemap.uniformBytes

GET Tonemap.uniformWgsl

GET Tonemap.fragmentBody

FN Tonemap.writeUniforms(scratch)

CL Vignette

NEW Vignette.new(opts: Map)

NEW Vignette.new()

GET Vignette.strength → Num

SET Vignette.strength=(v: Num)

GET Vignette.radius → Num

SET Vignette.radius=(v: Num)

GET Vignette.softness → Num

SET Vignette.softness=(v: Num)

GET Vignette.name

GET Vignette.uniformBytes

GET Vignette.uniformWgsl

GET Vignette.fragmentBody

FN Vignette.writeUniforms(scratch)

CL FXAA

NEW FXAA.new(opts: Map)

NEW FXAA.new()

GET FXAA.subpixel → Num

SET FXAA.subpixel=(v: Num)

GET FXAA.edgeThreshold → Num

SET FXAA.edgeThreshold=(v: Num)

GET FXAA.edgeThresholdMin → Num

SET FXAA.edgeThresholdMin=(v: Num)

GET FXAA.name

GET FXAA.uniformBytes

GET FXAA.uniformWgsl

GET FXAA.fragmentBody

FN FXAA.writeUniforms(scratch)

CL ColorGrade

NEW ColorGrade.new(opts: Map)

NEW ColorGrade.new()

GET ColorGrade.lift → List<Num>

SET ColorGrade.lift=(v: List<Num>)

GET ColorGrade.gamma → List<Num>

SET ColorGrade.gamma=(v: List<Num>)

GET ColorGrade.gain → List<Num>

SET ColorGrade.gain=(v: List<Num>)

GET ColorGrade.saturation → Num

SET ColorGrade.saturation=(v: Num)

GET ColorGrade.name

GET ColorGrade.uniformBytes

GET ColorGrade.uniformWgsl

GET ColorGrade.fragmentBody

FN ColorGrade.writeUniforms(scratch)

CL ChromaticAberration

NEW ChromaticAberration.new(opts: Map)

NEW ChromaticAberration.new()

GET ChromaticAberration.strength → Num

SET ChromaticAberration.strength=(v: Num)

GET ChromaticAberration.falloff → Num

SET ChromaticAberration.falloff=(v: Num)

GET ChromaticAberration.name

GET ChromaticAberration.uniformBytes

GET ChromaticAberration.uniformWgsl

GET ChromaticAberration.fragmentBody

FN ChromaticAberration.writeUniforms(scratch)