Skip to content

SpriteEffect

Controls the fragment shader used during rendering. Three built-in effects are provided, plus a factory for custom shaders.

PresetDescription
SpriteEffect.defaultTexturedtexture × tint color with alpha blending
SpriteEffect.alphaCutoutDiscards pixels with alpha < 0.5; enables depth prepass
SpriteEffect.solidColorIgnores the texture; renders flat color

static custom(name, fragmentWgsl, options?)

Section titled “static custom(name, fragmentWgsl, options?)”

Create a custom fragment shader effect.

const grayscale = SpriteEffect.custom('grayscale', /* wgsl */ `
@fragment
fn fs_main(in: VertexOutput) -> @location(0) vec4f {
let tex = textureSample(sprite_tex, sprite_sampler, in.uv);
let gray = dot(tex.rgb, vec3f(0.299, 0.587, 0.114));
return vec4f(vec3f(gray), tex.a) * in.color;
}
`)
OptionTypeDescription
paramsRecord<string, ParamDef>Named shader parameters with types and defaults
depthPrepassbooleanEnable depth prepass
depthFragmentWgslstringCustom depth fragment shader

Create a variant with different default parameter values. Shares the same shader and pipeline.

const subtleCrt = SpriteEffect.variant(crt, {
distortion: 0.1,
scanline_intensity: 0.05,
})
ParamTypeJS valueWGSL size/align
'f32'number4 / 4
'vec2f'[number, number]8 / 8
'vec3f'[number, number, number]12 / 16
'vec4f'[number, number, number, number]16 / 16