@nodetool-ai/gpu 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +52 -0
- package/dist/.nodetool-build-stamp +1 -0
- package/dist/blend/blendModes.d.ts +67 -0
- package/dist/blend/blendModes.d.ts.map +1 -0
- package/dist/blend/blendModes.js +80 -0
- package/dist/blend/blendModes.js.map +1 -0
- package/dist/blend/index.d.ts +10 -0
- package/dist/blend/index.d.ts.map +1 -0
- package/dist/blend/index.js +10 -0
- package/dist/blend/index.js.map +1 -0
- package/dist/blend/wgsl.d.ts +16 -0
- package/dist/blend/wgsl.d.ts.map +1 -0
- package/dist/blend/wgsl.js +85 -0
- package/dist/blend/wgsl.js.map +1 -0
- package/dist/compositor/compositor.d.ts +112 -0
- package/dist/compositor/compositor.d.ts.map +1 -0
- package/dist/compositor/compositor.js +353 -0
- package/dist/compositor/compositor.js.map +1 -0
- package/dist/compositor/headless.d.ts +47 -0
- package/dist/compositor/headless.d.ts.map +1 -0
- package/dist/compositor/headless.js +158 -0
- package/dist/compositor/headless.js.map +1 -0
- package/dist/compositor/index.d.ts +8 -0
- package/dist/compositor/index.d.ts.map +1 -0
- package/dist/compositor/index.js +8 -0
- package/dist/compositor/index.js.map +1 -0
- package/dist/compositor/shaders.d.ts +24 -0
- package/dist/compositor/shaders.d.ts.map +1 -0
- package/dist/compositor/shaders.js +241 -0
- package/dist/compositor/shaders.js.map +1 -0
- package/dist/compositor/transform.d.ts +49 -0
- package/dist/compositor/transform.d.ts.map +1 -0
- package/dist/compositor/transform.js +74 -0
- package/dist/compositor/transform.js.map +1 -0
- package/dist/context.d.ts +108 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +205 -0
- package/dist/context.js.map +1 -0
- package/dist/debug/premulValidator.d.ts +85 -0
- package/dist/debug/premulValidator.d.ts.map +1 -0
- package/dist/debug/premulValidator.js +239 -0
- package/dist/debug/premulValidator.js.map +1 -0
- package/dist/executor.d.ts +74 -0
- package/dist/executor.d.ts.map +1 -0
- package/dist/executor.js +413 -0
- package/dist/executor.js.map +1 -0
- package/dist/fullscreenQuad.d.ts +11 -0
- package/dist/fullscreenQuad.d.ts.map +1 -0
- package/dist/fullscreenQuad.js +31 -0
- package/dist/fullscreenQuad.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/module.d.ts +162 -0
- package/dist/module.d.ts.map +1 -0
- package/dist/module.js +100 -0
- package/dist/module.js.map +1 -0
- package/dist/node.d.ts +38 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +140 -0
- package/dist/node.js.map +1 -0
- package/dist/pool.d.ts +30 -0
- package/dist/pool.d.ts.map +1 -0
- package/dist/pool.js +33 -0
- package/dist/pool.js.map +1 -0
- package/dist/recipe.d.ts +148 -0
- package/dist/recipe.d.ts.map +1 -0
- package/dist/recipe.js +181 -0
- package/dist/recipe.js.map +1 -0
- package/dist/registry.d.ts +49 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +100 -0
- package/dist/registry.js.map +1 -0
- package/dist/shaders/_canary/passthrough/v1/module.d.ts +13 -0
- package/dist/shaders/_canary/passthrough/v1/module.d.ts.map +1 -0
- package/dist/shaders/_canary/passthrough/v1/module.js +71 -0
- package/dist/shaders/_canary/passthrough/v1/module.js.map +1 -0
- package/dist/shaders/alpha/premulToStraight/v1/module.d.ts +16 -0
- package/dist/shaders/alpha/premulToStraight/v1/module.d.ts.map +1 -0
- package/dist/shaders/alpha/premulToStraight/v1/module.js +62 -0
- package/dist/shaders/alpha/premulToStraight/v1/module.js.map +1 -0
- package/dist/shaders/alpha/straightToPremul/v1/module.d.ts +19 -0
- package/dist/shaders/alpha/straightToPremul/v1/module.d.ts.map +1 -0
- package/dist/shaders/alpha/straightToPremul/v1/module.js +61 -0
- package/dist/shaders/alpha/straightToPremul/v1/module.js.map +1 -0
- package/dist/shaders/color/brightnessContrast/v1/module.d.ts +17 -0
- package/dist/shaders/color/brightnessContrast/v1/module.d.ts.map +1 -0
- package/dist/shaders/color/brightnessContrast/v1/module.js +84 -0
- package/dist/shaders/color/brightnessContrast/v1/module.js.map +1 -0
- package/dist/shaders/color/cdl/v1/module.d.ts +35 -0
- package/dist/shaders/color/cdl/v1/module.d.ts.map +1 -0
- package/dist/shaders/color/cdl/v1/module.js +106 -0
- package/dist/shaders/color/cdl/v1/module.js.map +1 -0
- package/dist/shaders/color/channelMerge/v1/module.d.ts +22 -0
- package/dist/shaders/color/channelMerge/v1/module.d.ts.map +1 -0
- package/dist/shaders/color/channelMerge/v1/module.js +101 -0
- package/dist/shaders/color/channelMerge/v1/module.js.map +1 -0
- package/dist/shaders/color/channelShuffle/v1/module.d.ts +29 -0
- package/dist/shaders/color/channelShuffle/v1/module.d.ts.map +1 -0
- package/dist/shaders/color/channelShuffle/v1/module.js +94 -0
- package/dist/shaders/color/channelShuffle/v1/module.js.map +1 -0
- package/dist/shaders/color/channelSplit/v1/module.d.ts +18 -0
- package/dist/shaders/color/channelSplit/v1/module.d.ts.map +1 -0
- package/dist/shaders/color/channelSplit/v1/module.js +90 -0
- package/dist/shaders/color/channelSplit/v1/module.js.map +1 -0
- package/dist/shaders/color/colorBalance/v1/module.d.ts +18 -0
- package/dist/shaders/color/colorBalance/v1/module.d.ts.map +1 -0
- package/dist/shaders/color/colorBalance/v1/module.js +86 -0
- package/dist/shaders/color/colorBalance/v1/module.js.map +1 -0
- package/dist/shaders/color/cubeLut/v1/module.d.ts +14 -0
- package/dist/shaders/color/cubeLut/v1/module.d.ts.map +1 -0
- package/dist/shaders/color/cubeLut/v1/module.js +78 -0
- package/dist/shaders/color/cubeLut/v1/module.js.map +1 -0
- package/dist/shaders/color/curves/v1/module.d.ts +31 -0
- package/dist/shaders/color/curves/v1/module.d.ts.map +1 -0
- package/dist/shaders/color/curves/v1/module.js +102 -0
- package/dist/shaders/color/curves/v1/module.js.map +1 -0
- package/dist/shaders/color/exposure/v1/module.d.ts +15 -0
- package/dist/shaders/color/exposure/v1/module.d.ts.map +1 -0
- package/dist/shaders/color/exposure/v1/module.js +78 -0
- package/dist/shaders/color/exposure/v1/module.js.map +1 -0
- package/dist/shaders/color/exposureTone/v1/module.d.ts +28 -0
- package/dist/shaders/color/exposureTone/v1/module.d.ts.map +1 -0
- package/dist/shaders/color/exposureTone/v1/module.js +107 -0
- package/dist/shaders/color/exposureTone/v1/module.js.map +1 -0
- package/dist/shaders/color/filmLook/v1/module.d.ts +28 -0
- package/dist/shaders/color/filmLook/v1/module.d.ts.map +1 -0
- package/dist/shaders/color/filmLook/v1/module.js +103 -0
- package/dist/shaders/color/filmLook/v1/module.js.map +1 -0
- package/dist/shaders/color/grade/v1/module.d.ts +35 -0
- package/dist/shaders/color/grade/v1/module.d.ts.map +1 -0
- package/dist/shaders/color/grade/v1/module.js +182 -0
- package/dist/shaders/color/grade/v1/module.js.map +1 -0
- package/dist/shaders/color/grayscale/v1/module.d.ts +14 -0
- package/dist/shaders/color/grayscale/v1/module.d.ts.map +1 -0
- package/dist/shaders/color/grayscale/v1/module.js +79 -0
- package/dist/shaders/color/grayscale/v1/module.js.map +1 -0
- package/dist/shaders/color/hsb/v1/module.d.ts +20 -0
- package/dist/shaders/color/hsb/v1/module.d.ts.map +1 -0
- package/dist/shaders/color/hsb/v1/module.js +131 -0
- package/dist/shaders/color/hsb/v1/module.js.map +1 -0
- package/dist/shaders/color/hslAdjust/v1/module.d.ts +30 -0
- package/dist/shaders/color/hslAdjust/v1/module.d.ts.map +1 -0
- package/dist/shaders/color/hslAdjust/v1/module.js +170 -0
- package/dist/shaders/color/hslAdjust/v1/module.js.map +1 -0
- package/dist/shaders/color/invert/v1/module.d.ts +15 -0
- package/dist/shaders/color/invert/v1/module.d.ts.map +1 -0
- package/dist/shaders/color/invert/v1/module.js +85 -0
- package/dist/shaders/color/invert/v1/module.js.map +1 -0
- package/dist/shaders/color/levels/v1/module.d.ts +33 -0
- package/dist/shaders/color/levels/v1/module.d.ts.map +1 -0
- package/dist/shaders/color/levels/v1/module.js +116 -0
- package/dist/shaders/color/levels/v1/module.js.map +1 -0
- package/dist/shaders/color/liftGammaGain/v1/module.d.ts +40 -0
- package/dist/shaders/color/liftGammaGain/v1/module.d.ts.map +1 -0
- package/dist/shaders/color/liftGammaGain/v1/module.js +114 -0
- package/dist/shaders/color/liftGammaGain/v1/module.js.map +1 -0
- package/dist/shaders/color/posterize/v1/module.d.ts +16 -0
- package/dist/shaders/color/posterize/v1/module.d.ts.map +1 -0
- package/dist/shaders/color/posterize/v1/module.js +80 -0
- package/dist/shaders/color/posterize/v1/module.js.map +1 -0
- package/dist/shaders/color/solarize/v1/module.d.ts +15 -0
- package/dist/shaders/color/solarize/v1/module.d.ts.map +1 -0
- package/dist/shaders/color/solarize/v1/module.js +83 -0
- package/dist/shaders/color/solarize/v1/module.js.map +1 -0
- package/dist/shaders/color/splitToning/v1/module.d.ts +26 -0
- package/dist/shaders/color/splitToning/v1/module.d.ts.map +1 -0
- package/dist/shaders/color/splitToning/v1/module.js +95 -0
- package/dist/shaders/color/splitToning/v1/module.js.map +1 -0
- package/dist/shaders/filters/blur/gaussian/v1/module.d.ts +23 -0
- package/dist/shaders/filters/blur/gaussian/v1/module.d.ts.map +1 -0
- package/dist/shaders/filters/blur/gaussian/v1/module.js +110 -0
- package/dist/shaders/filters/blur/gaussian/v1/module.js.map +1 -0
- package/dist/shaders/filters/blur/separable/v1/module.d.ts +18 -0
- package/dist/shaders/filters/blur/separable/v1/module.d.ts.map +1 -0
- package/dist/shaders/filters/blur/separable/v1/module.js +64 -0
- package/dist/shaders/filters/blur/separable/v1/module.js.map +1 -0
- package/dist/shaders/filters/convolve3x3/v1/module.d.ts +23 -0
- package/dist/shaders/filters/convolve3x3/v1/module.d.ts.map +1 -0
- package/dist/shaders/filters/convolve3x3/v1/module.js +128 -0
- package/dist/shaders/filters/convolve3x3/v1/module.js.map +1 -0
- package/dist/shaders/filters/glow/v1/module.d.ts +26 -0
- package/dist/shaders/filters/glow/v1/module.d.ts.map +1 -0
- package/dist/shaders/filters/glow/v1/module.js +102 -0
- package/dist/shaders/filters/glow/v1/module.js.map +1 -0
- package/dist/shaders/filters/grain/v1/module.d.ts +38 -0
- package/dist/shaders/filters/grain/v1/module.d.ts.map +1 -0
- package/dist/shaders/filters/grain/v1/module.js +110 -0
- package/dist/shaders/filters/grain/v1/module.js.map +1 -0
- package/dist/shaders/filters/pixelate/v1/module.d.ts +14 -0
- package/dist/shaders/filters/pixelate/v1/module.d.ts.map +1 -0
- package/dist/shaders/filters/pixelate/v1/module.js +76 -0
- package/dist/shaders/filters/pixelate/v1/module.js.map +1 -0
- package/dist/shaders/filters/sharpen/unsharpMask/v1/module.d.ts +17 -0
- package/dist/shaders/filters/sharpen/unsharpMask/v1/module.d.ts.map +1 -0
- package/dist/shaders/filters/sharpen/unsharpMask/v1/module.js +93 -0
- package/dist/shaders/filters/sharpen/unsharpMask/v1/module.js.map +1 -0
- package/dist/shaders/filters/threshold/v1/module.d.ts +17 -0
- package/dist/shaders/filters/threshold/v1/module.d.ts.map +1 -0
- package/dist/shaders/filters/threshold/v1/module.js +71 -0
- package/dist/shaders/filters/threshold/v1/module.js.map +1 -0
- package/dist/shaders/filters/vignette/v1/module.d.ts +18 -0
- package/dist/shaders/filters/vignette/v1/module.d.ts.map +1 -0
- package/dist/shaders/filters/vignette/v1/module.js +78 -0
- package/dist/shaders/filters/vignette/v1/module.js.map +1 -0
- package/dist/shaders/filters/visualFx/v1/module.d.ts +24 -0
- package/dist/shaders/filters/visualFx/v1/module.d.ts.map +1 -0
- package/dist/shaders/filters/visualFx/v1/module.js +210 -0
- package/dist/shaders/filters/visualFx/v1/module.js.map +1 -0
- package/dist/shaders/index.d.ts +86 -0
- package/dist/shaders/index.d.ts.map +1 -0
- package/dist/shaders/index.js +161 -0
- package/dist/shaders/index.js.map +1 -0
- package/dist/shaders/keyer/chromaKey/v1/module.d.ts +25 -0
- package/dist/shaders/keyer/chromaKey/v1/module.d.ts.map +1 -0
- package/dist/shaders/keyer/chromaKey/v1/module.js +111 -0
- package/dist/shaders/keyer/chromaKey/v1/module.js.map +1 -0
- package/dist/shaders/keyer/lumaKey/v1/module.d.ts +22 -0
- package/dist/shaders/keyer/lumaKey/v1/module.d.ts.map +1 -0
- package/dist/shaders/keyer/lumaKey/v1/module.js +89 -0
- package/dist/shaders/keyer/lumaKey/v1/module.js.map +1 -0
- package/dist/shaders/mask/apply/v1/module.d.ts +16 -0
- package/dist/shaders/mask/apply/v1/module.d.ts.map +1 -0
- package/dist/shaders/mask/apply/v1/module.js +79 -0
- package/dist/shaders/mask/apply/v1/module.js.map +1 -0
- package/dist/shaders/mask/fromImage/v1/module.d.ts +18 -0
- package/dist/shaders/mask/fromImage/v1/module.d.ts.map +1 -0
- package/dist/shaders/mask/fromImage/v1/module.js +99 -0
- package/dist/shaders/mask/fromImage/v1/module.js.map +1 -0
- package/dist/shaders/mask/invert/v1/module.d.ts +12 -0
- package/dist/shaders/mask/invert/v1/module.d.ts.map +1 -0
- package/dist/shaders/mask/invert/v1/module.js +57 -0
- package/dist/shaders/mask/invert/v1/module.js.map +1 -0
- package/dist/shaders/mixer/add/v1/module.d.ts +17 -0
- package/dist/shaders/mixer/add/v1/module.d.ts.map +1 -0
- package/dist/shaders/mixer/add/v1/module.js +73 -0
- package/dist/shaders/mixer/add/v1/module.js.map +1 -0
- package/dist/shaders/mixer/colorOverlay/v1/module.d.ts +26 -0
- package/dist/shaders/mixer/colorOverlay/v1/module.d.ts.map +1 -0
- package/dist/shaders/mixer/colorOverlay/v1/module.js +81 -0
- package/dist/shaders/mixer/colorOverlay/v1/module.js.map +1 -0
- package/dist/shaders/mixer/dropShadow/v1/module.d.ts +28 -0
- package/dist/shaders/mixer/dropShadow/v1/module.d.ts.map +1 -0
- package/dist/shaders/mixer/dropShadow/v1/module.js +104 -0
- package/dist/shaders/mixer/dropShadow/v1/module.js.map +1 -0
- package/dist/shaders/mixer/outline/v1/module.d.ts +27 -0
- package/dist/shaders/mixer/outline/v1/module.d.ts.map +1 -0
- package/dist/shaders/mixer/outline/v1/module.js +105 -0
- package/dist/shaders/mixer/outline/v1/module.js.map +1 -0
- package/dist/shaders/mixer/over/v1/module.d.ts +16 -0
- package/dist/shaders/mixer/over/v1/module.d.ts.map +1 -0
- package/dist/shaders/mixer/over/v1/module.js +71 -0
- package/dist/shaders/mixer/over/v1/module.js.map +1 -0
- package/dist/shaders/mixer/shadowCompose/v1/module.d.ts +26 -0
- package/dist/shaders/mixer/shadowCompose/v1/module.d.ts.map +1 -0
- package/dist/shaders/mixer/shadowCompose/v1/module.js +95 -0
- package/dist/shaders/mixer/shadowCompose/v1/module.js.map +1 -0
- package/dist/shaders/sources/angularGradient/v1/module.d.ts +18 -0
- package/dist/shaders/sources/angularGradient/v1/module.d.ts.map +1 -0
- package/dist/shaders/sources/angularGradient/v1/module.js +67 -0
- package/dist/shaders/sources/angularGradient/v1/module.js.map +1 -0
- package/dist/shaders/sources/checkerboard/v1/module.d.ts +19 -0
- package/dist/shaders/sources/checkerboard/v1/module.d.ts.map +1 -0
- package/dist/shaders/sources/checkerboard/v1/module.js +70 -0
- package/dist/shaders/sources/checkerboard/v1/module.js.map +1 -0
- package/dist/shaders/sources/diamondGradient/v1/module.d.ts +18 -0
- package/dist/shaders/sources/diamondGradient/v1/module.d.ts.map +1 -0
- package/dist/shaders/sources/diamondGradient/v1/module.js +61 -0
- package/dist/shaders/sources/diamondGradient/v1/module.js.map +1 -0
- package/dist/shaders/sources/gaussianNoise/v1/module.d.ts +21 -0
- package/dist/shaders/sources/gaussianNoise/v1/module.d.ts.map +1 -0
- package/dist/shaders/sources/gaussianNoise/v1/module.js +72 -0
- package/dist/shaders/sources/gaussianNoise/v1/module.js.map +1 -0
- package/dist/shaders/sources/linearGradient/v1/module.d.ts +21 -0
- package/dist/shaders/sources/linearGradient/v1/module.d.ts.map +1 -0
- package/dist/shaders/sources/linearGradient/v1/module.js +72 -0
- package/dist/shaders/sources/linearGradient/v1/module.js.map +1 -0
- package/dist/shaders/sources/radialGradient/v1/module.d.ts +18 -0
- package/dist/shaders/sources/radialGradient/v1/module.d.ts.map +1 -0
- package/dist/shaders/sources/radialGradient/v1/module.js +60 -0
- package/dist/shaders/sources/radialGradient/v1/module.js.map +1 -0
- package/dist/shaders/sources/solid/v1/module.d.ts +17 -0
- package/dist/shaders/sources/solid/v1/module.d.ts.map +1 -0
- package/dist/shaders/sources/solid/v1/module.js +49 -0
- package/dist/shaders/sources/solid/v1/module.js.map +1 -0
- package/dist/shaders/transform/affine/v1/module.d.ts +36 -0
- package/dist/shaders/transform/affine/v1/module.d.ts.map +1 -0
- package/dist/shaders/transform/affine/v1/module.js +94 -0
- package/dist/shaders/transform/affine/v1/module.js.map +1 -0
- package/dist/shaders/transform/cornerPin/v1/module.d.ts +40 -0
- package/dist/shaders/transform/cornerPin/v1/module.d.ts.map +1 -0
- package/dist/shaders/transform/cornerPin/v1/module.js +109 -0
- package/dist/shaders/transform/cornerPin/v1/module.js.map +1 -0
- package/dist/shaders/transform/crop/v1/module.d.ts +26 -0
- package/dist/shaders/transform/crop/v1/module.d.ts.map +1 -0
- package/dist/shaders/transform/crop/v1/module.js +82 -0
- package/dist/shaders/transform/crop/v1/module.js.map +1 -0
- package/dist/shaders/transform/displace/v1/module.d.ts +23 -0
- package/dist/shaders/transform/displace/v1/module.d.ts.map +1 -0
- package/dist/shaders/transform/displace/v1/module.js +95 -0
- package/dist/shaders/transform/displace/v1/module.js.map +1 -0
- package/dist/shaders/transform/mirror/v1/module.d.ts +14 -0
- package/dist/shaders/transform/mirror/v1/module.d.ts.map +1 -0
- package/dist/shaders/transform/mirror/v1/module.js +73 -0
- package/dist/shaders/transform/mirror/v1/module.js.map +1 -0
- package/dist/shaders/transform/offset/v1/module.d.ts +21 -0
- package/dist/shaders/transform/offset/v1/module.d.ts.map +1 -0
- package/dist/shaders/transform/offset/v1/module.js +88 -0
- package/dist/shaders/transform/offset/v1/module.js.map +1 -0
- package/dist/shaders/transform/pad/v1/module.d.ts +26 -0
- package/dist/shaders/transform/pad/v1/module.d.ts.map +1 -0
- package/dist/shaders/transform/pad/v1/module.js +95 -0
- package/dist/shaders/transform/pad/v1/module.js.map +1 -0
- package/dist/shaders/transform/polarRemap/v1/module.d.ts +20 -0
- package/dist/shaders/transform/polarRemap/v1/module.d.ts.map +1 -0
- package/dist/shaders/transform/polarRemap/v1/module.js +95 -0
- package/dist/shaders/transform/polarRemap/v1/module.js.map +1 -0
- package/dist/shaders/transform/resize/v1/module.d.ts +20 -0
- package/dist/shaders/transform/resize/v1/module.d.ts.map +1 -0
- package/dist/shaders/transform/resize/v1/module.js +116 -0
- package/dist/shaders/transform/resize/v1/module.js.map +1 -0
- package/dist/shaders/transform/rotate90/v1/module.d.ts +25 -0
- package/dist/shaders/transform/rotate90/v1/module.d.ts.map +1 -0
- package/dist/shaders/transform/rotate90/v1/module.js +90 -0
- package/dist/shaders/transform/rotate90/v1/module.js.map +1 -0
- package/dist/shaders/transform/spherize/v1/module.d.ts +21 -0
- package/dist/shaders/transform/spherize/v1/module.d.ts.map +1 -0
- package/dist/shaders/transform/spherize/v1/module.js +94 -0
- package/dist/shaders/transform/spherize/v1/module.js.map +1 -0
- package/dist/shaders/transform/tile/v1/module.d.ts +22 -0
- package/dist/shaders/transform/tile/v1/module.d.ts.map +1 -0
- package/dist/shaders/transform/tile/v1/module.js +89 -0
- package/dist/shaders/transform/tile/v1/module.js.map +1 -0
- package/dist/shared/lumaWgsl.d.ts +14 -0
- package/dist/shared/lumaWgsl.d.ts.map +1 -0
- package/dist/shared/lumaWgsl.js +18 -0
- package/dist/shared/lumaWgsl.js.map +1 -0
- package/dist/shared/premulWgsl.d.ts +46 -0
- package/dist/shared/premulWgsl.d.ts.map +1 -0
- package/dist/shared/premulWgsl.js +90 -0
- package/dist/shared/premulWgsl.js.map +1 -0
- package/dist/texture.d.ts +54 -0
- package/dist/texture.d.ts.map +1 -0
- package/dist/texture.js +70 -0
- package/dist/texture.js.map +1 -0
- package/dist/types.d.ts +103 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/validate/wgslLinearity.d.ts +86 -0
- package/dist/validate/wgslLinearity.d.ts.map +1 -0
- package/dist/validate/wgslLinearity.js +298 -0
- package/dist/validate/wgslLinearity.js.map +1 -0
- package/dist/webgpu/index.d.ts +11 -0
- package/dist/webgpu/index.d.ts.map +1 -0
- package/dist/webgpu/index.js +11 -0
- package/dist/webgpu/index.js.map +1 -0
- package/package.json +85 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `mixer.dropShadow@1` — drop-shadow layer effect as a four-pass recipe.
|
|
3
|
+
*
|
|
4
|
+
* `mask.fromImage` (alpha) → `filters.blur.gaussian` H → `filters.blur.gaussian` V
|
|
5
|
+
* → `mixer.shadowCompose` over source.
|
|
6
|
+
*
|
|
7
|
+
* Mirrors the `filters.glow@1` recipe structure: the alpha is the only
|
|
8
|
+
* channel that drives shadow shape, so a single-channel mask intermediate is
|
|
9
|
+
* cheaper than blurring the full source. Offsets are normalized UV units —
|
|
10
|
+
* the host translates pixel-space drag handles into UV before pushing
|
|
11
|
+
* params.
|
|
12
|
+
*/
|
|
13
|
+
import * as d from "typegpu/data";
|
|
14
|
+
export declare const DropShadowParams: d.WgslStruct<{
|
|
15
|
+
color: d.Vec4f;
|
|
16
|
+
offsetX: d.F32;
|
|
17
|
+
offsetY: d.F32;
|
|
18
|
+
radius: d.F32;
|
|
19
|
+
intensity: d.F32;
|
|
20
|
+
}>;
|
|
21
|
+
export declare const mixerDropShadowV1: import("../../../../recipe.js").RecipeModule<{
|
|
22
|
+
color: d.v4f;
|
|
23
|
+
offsetX: number;
|
|
24
|
+
offsetY: number;
|
|
25
|
+
radius: number;
|
|
26
|
+
intensity: number;
|
|
27
|
+
}>;
|
|
28
|
+
//# sourceMappingURL=module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/shaders/mixer/dropShadow/v1/module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAGlC,eAAO,MAAM,gBAAgB;;;;;;EAM3B,CAAC;AAQH,eAAO,MAAM,iBAAiB;;;;;;EA4E5B,CAAC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `mixer.dropShadow@1` — drop-shadow layer effect as a four-pass recipe.
|
|
3
|
+
*
|
|
4
|
+
* `mask.fromImage` (alpha) → `filters.blur.gaussian` H → `filters.blur.gaussian` V
|
|
5
|
+
* → `mixer.shadowCompose` over source.
|
|
6
|
+
*
|
|
7
|
+
* Mirrors the `filters.glow@1` recipe structure: the alpha is the only
|
|
8
|
+
* channel that drives shadow shape, so a single-channel mask intermediate is
|
|
9
|
+
* cheaper than blurring the full source. Offsets are normalized UV units —
|
|
10
|
+
* the host translates pixel-space drag handles into UV before pushing
|
|
11
|
+
* params.
|
|
12
|
+
*/
|
|
13
|
+
import * as d from "typegpu/data";
|
|
14
|
+
import { defineRecipe } from "../../../../recipe.js";
|
|
15
|
+
export const DropShadowParams = d.struct({
|
|
16
|
+
color: d.vec4f,
|
|
17
|
+
offsetX: d.f32,
|
|
18
|
+
offsetY: d.f32,
|
|
19
|
+
radius: d.f32,
|
|
20
|
+
intensity: d.f32
|
|
21
|
+
});
|
|
22
|
+
// Inlined GPUTextureUsage flags (see filters.glow for the rationale):
|
|
23
|
+
// COPY_SRC = 0x01, TEXTURE_BINDING = 0x04, STORAGE_BINDING = 0x08,
|
|
24
|
+
// RENDER_ATTACHMENT = 0x10
|
|
25
|
+
const INTERMEDIATE_MASK_USAGE = 0x10 | 0x04 | 0x01;
|
|
26
|
+
const INTERMEDIATE_BLUR_USAGE = 0x08 | 0x04 | 0x01;
|
|
27
|
+
export const mixerDropShadowV1 = defineRecipe({
|
|
28
|
+
id: "mixer.dropShadow",
|
|
29
|
+
version: 1,
|
|
30
|
+
surface: "internal",
|
|
31
|
+
category: "mixer",
|
|
32
|
+
paramDefaults: {
|
|
33
|
+
color: d.vec4f(0, 0, 0, 1),
|
|
34
|
+
offsetX: 0.02,
|
|
35
|
+
offsetY: 0.02,
|
|
36
|
+
radius: 8,
|
|
37
|
+
intensity: 0.6
|
|
38
|
+
},
|
|
39
|
+
paramUi: {
|
|
40
|
+
color: { label: "Shadow color", notes: "RGBA, straight alpha" },
|
|
41
|
+
offsetX: { min: -0.5, max: 0.5, step: 0.005, label: "Offset X" },
|
|
42
|
+
offsetY: { min: -0.5, max: 0.5, step: 0.005, label: "Offset Y" },
|
|
43
|
+
radius: { min: 0, max: 256, step: 0.5, label: "Radius", notes: "blur radius, px" },
|
|
44
|
+
intensity: { min: 0, max: 4, step: 0.01, label: "Intensity" }
|
|
45
|
+
},
|
|
46
|
+
io: {
|
|
47
|
+
inputs: {
|
|
48
|
+
source: {
|
|
49
|
+
colorSpace: "linear",
|
|
50
|
+
alpha: "premultiplied",
|
|
51
|
+
bindingKinds: ["texture_2d"]
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
output: {
|
|
55
|
+
colorSpace: "linear",
|
|
56
|
+
alpha: "premultiplied",
|
|
57
|
+
format: "rgba8unorm",
|
|
58
|
+
dimensions: "same-as:source"
|
|
59
|
+
},
|
|
60
|
+
rod: "expand:radius"
|
|
61
|
+
},
|
|
62
|
+
recipe: {
|
|
63
|
+
intermediates: {
|
|
64
|
+
mask: { format: "rgba8unorm", usage: INTERMEDIATE_MASK_USAGE },
|
|
65
|
+
blurH: { format: "rgba8unorm", usage: INTERMEDIATE_BLUR_USAGE },
|
|
66
|
+
blurV: { format: "rgba8unorm", usage: INTERMEDIATE_BLUR_USAGE }
|
|
67
|
+
},
|
|
68
|
+
passes: [
|
|
69
|
+
{
|
|
70
|
+
op: { id: "mask.fromImage", version: 1 },
|
|
71
|
+
in: { source: "source" },
|
|
72
|
+
out: { kind: "intermediate", name: "mask" },
|
|
73
|
+
params: { mode: 0, invert: 0 }
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
op: { id: "filters.blur.gaussian", version: 1 },
|
|
77
|
+
in: { source: { kind: "intermediate", name: "mask" } },
|
|
78
|
+
out: { kind: "intermediate", name: "blurH" },
|
|
79
|
+
params: { radius: "$.radius", sigma: 0, direction: d.vec2f(1, 0) }
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
op: { id: "filters.blur.gaussian", version: 1 },
|
|
83
|
+
in: { source: { kind: "intermediate", name: "blurH" } },
|
|
84
|
+
out: { kind: "intermediate", name: "blurV" },
|
|
85
|
+
params: { radius: "$.radius", sigma: 0, direction: d.vec2f(0, 1) }
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
op: { id: "mixer.shadowCompose", version: 1 },
|
|
89
|
+
in: {
|
|
90
|
+
source: "source",
|
|
91
|
+
shadowMask: { kind: "intermediate", name: "blurV" }
|
|
92
|
+
},
|
|
93
|
+
out: "output",
|
|
94
|
+
params: {
|
|
95
|
+
color: "$.color",
|
|
96
|
+
offsetX: "$.offsetX",
|
|
97
|
+
offsetY: "$.offsetY",
|
|
98
|
+
intensity: "$.intensity"
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
]
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
//# sourceMappingURL=module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../../../../src/shaders/mixer/dropShadow/v1/module.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `mixer.outline@1` — flat outline / stroke around the source silhouette.
|
|
3
|
+
*
|
|
4
|
+
* Samples eight ring positions at radius `widthPx` (pixels, converted to UV
|
|
5
|
+
* via `textureDimensions(source)`). Pixels outside the silhouette
|
|
6
|
+
* (`source.a ≤ threshold`) that find any ring neighbour above threshold are
|
|
7
|
+
* filled with the outline color; pixels inside the silhouette pass through.
|
|
8
|
+
* The eight-tap ring is approximate but cheap and visually fine at small
|
|
9
|
+
* widths — for wide, soft outlines, the recipe form (extract → blur →
|
|
10
|
+
* composite) is the right tool.
|
|
11
|
+
*
|
|
12
|
+
* Output dimensions stay `same-as:source` — the outline lives inside the
|
|
13
|
+
* source canvas. Sources that need outline room outside the original
|
|
14
|
+
* silhouette should `transform.pad` first.
|
|
15
|
+
*/
|
|
16
|
+
import * as d from "typegpu/data";
|
|
17
|
+
export declare const OutlineParams: d.WgslStruct<{
|
|
18
|
+
color: d.Vec4f;
|
|
19
|
+
widthPx: d.F32;
|
|
20
|
+
threshold: d.F32;
|
|
21
|
+
}>;
|
|
22
|
+
export declare const mixerOutlineV1: import("../../../../module.js").ShaderModule<d.WgslStruct<{
|
|
23
|
+
color: d.Vec4f;
|
|
24
|
+
widthPx: d.F32;
|
|
25
|
+
threshold: d.F32;
|
|
26
|
+
}>>;
|
|
27
|
+
//# sourceMappingURL=module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/shaders/mixer/outline/v1/module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAGlC,eAAO,MAAM,aAAa;;;;EAIxB,CAAC;AAeH,eAAO,MAAM,cAAc;;;;GAqEzB,CAAC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `mixer.outline@1` — flat outline / stroke around the source silhouette.
|
|
3
|
+
*
|
|
4
|
+
* Samples eight ring positions at radius `widthPx` (pixels, converted to UV
|
|
5
|
+
* via `textureDimensions(source)`). Pixels outside the silhouette
|
|
6
|
+
* (`source.a ≤ threshold`) that find any ring neighbour above threshold are
|
|
7
|
+
* filled with the outline color; pixels inside the silhouette pass through.
|
|
8
|
+
* The eight-tap ring is approximate but cheap and visually fine at small
|
|
9
|
+
* widths — for wide, soft outlines, the recipe form (extract → blur →
|
|
10
|
+
* composite) is the right tool.
|
|
11
|
+
*
|
|
12
|
+
* Output dimensions stay `same-as:source` — the outline lives inside the
|
|
13
|
+
* source canvas. Sources that need outline room outside the original
|
|
14
|
+
* silhouette should `transform.pad` first.
|
|
15
|
+
*/
|
|
16
|
+
import tgpu from "typegpu";
|
|
17
|
+
import * as d from "typegpu/data";
|
|
18
|
+
import { defineModule } from "../../../../module.js";
|
|
19
|
+
export const OutlineParams = d.struct({
|
|
20
|
+
color: d.vec4f,
|
|
21
|
+
widthPx: d.f32,
|
|
22
|
+
threshold: d.f32
|
|
23
|
+
});
|
|
24
|
+
const layout = tgpu.bindGroupLayout({
|
|
25
|
+
params: { uniform: OutlineParams },
|
|
26
|
+
source: { texture: "float" },
|
|
27
|
+
samp: { sampler: "filtering" }
|
|
28
|
+
});
|
|
29
|
+
const samplerDescriptor = {
|
|
30
|
+
magFilter: "linear",
|
|
31
|
+
minFilter: "linear",
|
|
32
|
+
addressModeU: "clamp-to-edge",
|
|
33
|
+
addressModeV: "clamp-to-edge"
|
|
34
|
+
};
|
|
35
|
+
export const mixerOutlineV1 = defineModule({
|
|
36
|
+
id: "mixer.outline",
|
|
37
|
+
version: 1,
|
|
38
|
+
surface: "internal",
|
|
39
|
+
category: "mixer",
|
|
40
|
+
linearity: "nonlinear-in-rgb",
|
|
41
|
+
kind: "fragment",
|
|
42
|
+
params: OutlineParams,
|
|
43
|
+
paramDefaults: { color: d.vec4f(0, 0, 0, 1), widthPx: 2, threshold: 0.5 },
|
|
44
|
+
paramUi: {
|
|
45
|
+
color: { label: "Color", notes: "RGBA, straight alpha" },
|
|
46
|
+
widthPx: { min: 0, max: 32, step: 0.5, label: "Width", notes: "pixels" },
|
|
47
|
+
threshold: { min: 0, max: 1, step: 0.01, label: "Alpha threshold" }
|
|
48
|
+
},
|
|
49
|
+
layout,
|
|
50
|
+
samplers: { samp: samplerDescriptor },
|
|
51
|
+
wgsl: /* wgsl */ `
|
|
52
|
+
@fragment
|
|
53
|
+
fn fs_main(@location(0) uv: vec2f) -> @location(0) vec4f {
|
|
54
|
+
let src = textureSample(layout.$.source, layout.$.samp, uv);
|
|
55
|
+
let p = layout.$.params;
|
|
56
|
+
let dims = vec2f(textureDimensions(layout.$.source));
|
|
57
|
+
let step = p.widthPx / dims;
|
|
58
|
+
// Eight ring samples, π/4 apart, at radius = widthPx. The loop runs
|
|
59
|
+
// unconditionally so the ring textureSample stays in uniform control flow;
|
|
60
|
+
// the result is gated by select() below rather than early returns.
|
|
61
|
+
let dirs = array<vec2f, 8>(
|
|
62
|
+
vec2f(1.0, 0.0),
|
|
63
|
+
vec2f(0.70710678, 0.70710678),
|
|
64
|
+
vec2f(0.0, 1.0),
|
|
65
|
+
vec2f(-0.70710678, 0.70710678),
|
|
66
|
+
vec2f(-1.0, 0.0),
|
|
67
|
+
vec2f(-0.70710678, -0.70710678),
|
|
68
|
+
vec2f(0.0, -1.0),
|
|
69
|
+
vec2f(0.70710678, -0.70710678)
|
|
70
|
+
);
|
|
71
|
+
var maxA: f32 = 0.0;
|
|
72
|
+
for (var i = 0; i < 8; i = i + 1) {
|
|
73
|
+
let s = textureSample(layout.$.source, layout.$.samp, uv + dirs[i] * step);
|
|
74
|
+
maxA = max(maxA, s.a);
|
|
75
|
+
}
|
|
76
|
+
let cov = p.color.a;
|
|
77
|
+
let outline = vec4f(p.color.rgb * cov, cov);
|
|
78
|
+
// Outside the silhouette with a ring neighbour above threshold → outline;
|
|
79
|
+
// outside with no neighbour → transparent black.
|
|
80
|
+
let edge = select(vec4f(0.0), outline, maxA > p.threshold);
|
|
81
|
+
// widthPx <= 0 ("no outline") or inside the silhouette → pass source through.
|
|
82
|
+
// widthPx is a uniform, but the source-alpha test is per-pixel, so both
|
|
83
|
+
// collapse into a single uniform-control-flow select.
|
|
84
|
+
let passthrough = p.widthPx <= 0.0 || src.a > p.threshold;
|
|
85
|
+
return select(edge, src, passthrough);
|
|
86
|
+
}
|
|
87
|
+
`,
|
|
88
|
+
io: {
|
|
89
|
+
inputs: {
|
|
90
|
+
source: {
|
|
91
|
+
colorSpace: "linear",
|
|
92
|
+
alpha: "premultiplied",
|
|
93
|
+
bindingKinds: ["texture_2d"]
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
output: {
|
|
97
|
+
colorSpace: "linear",
|
|
98
|
+
alpha: "premultiplied",
|
|
99
|
+
format: "rgba8unorm",
|
|
100
|
+
dimensions: "same-as:source"
|
|
101
|
+
},
|
|
102
|
+
rod: "same-as:source"
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
//# sourceMappingURL=module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../../../../src/shaders/mixer/outline/v1/module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,KAAK,EAAE,CAAC,CAAC,KAAK;IACd,OAAO,EAAE,CAAC,CAAC,GAAG;IACd,SAAS,EAAE,CAAC,CAAC,GAAG;CACjB,CAAC,CAAC;AAEH,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;IAClC,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE;IAClC,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;IAC5B,IAAI,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE;CAC/B,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAyB;IAC9C,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,QAAQ;IACnB,YAAY,EAAE,eAAe;IAC7B,YAAY,EAAE,eAAe;CAC9B,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,YAAY,CAAC;IACzC,EAAE,EAAE,eAAe;IACnB,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,UAAU;IACnB,QAAQ,EAAE,OAAO;IACjB,SAAS,EAAE,kBAAkB;IAC7B,IAAI,EAAE,UAAU;IAChB,MAAM,EAAE,aAAa;IACrB,aAAa,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE;IACzE,OAAO,EAAE;QACP,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,sBAAsB,EAAE;QACxD,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE;QACxE,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,EAAE;KACpE;IACD,MAAM;IACN,QAAQ,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE;IACrC,IAAI,EAAE,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoClB;IACC,EAAE,EAAE;QACF,MAAM,EAAE;YACN,MAAM,EAAE;gBACN,UAAU,EAAE,QAAQ;gBACpB,KAAK,EAAE,eAAe;gBACtB,YAAY,EAAE,CAAC,YAAY,CAAC;aAC7B;SACF;QACD,MAAM,EAAE;YACN,UAAU,EAAE,QAAQ;YACpB,KAAK,EAAE,eAAe;YACtB,MAAM,EAAE,YAAY;YACpB,UAAU,EAAE,gBAAgB;SAC7B;QACD,GAAG,EAAE,gBAAgB;KACtB;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `mixer.over@1` — Porter-Duff source-over composite of `over` onto `source`.
|
|
3
|
+
*
|
|
4
|
+
* Premultiplied alpha throughout: `out = over*opacity + source*(1 - over.a*opacity)`.
|
|
5
|
+
* `opacity` scales the overlay (default 1). Both inputs are sampled at the same
|
|
6
|
+
* UV, so callers place/resize the overlay onto the source's canvas first (e.g.
|
|
7
|
+
* `transform.pad`). Output is `same-as:source`.
|
|
8
|
+
*/
|
|
9
|
+
import * as d from "typegpu/data";
|
|
10
|
+
export declare const OverParams: d.WgslStruct<{
|
|
11
|
+
opacity: d.F32;
|
|
12
|
+
}>;
|
|
13
|
+
export declare const mixerOverV1: import("../../../../module.js").ShaderModule<d.WgslStruct<{
|
|
14
|
+
opacity: d.F32;
|
|
15
|
+
}>>;
|
|
16
|
+
//# sourceMappingURL=module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/shaders/mixer/over/v1/module.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAGlC,eAAO,MAAM,UAAU;;EAErB,CAAC;AAgBH,eAAO,MAAM,WAAW;;GA2CtB,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `mixer.over@1` — Porter-Duff source-over composite of `over` onto `source`.
|
|
3
|
+
*
|
|
4
|
+
* Premultiplied alpha throughout: `out = over*opacity + source*(1 - over.a*opacity)`.
|
|
5
|
+
* `opacity` scales the overlay (default 1). Both inputs are sampled at the same
|
|
6
|
+
* UV, so callers place/resize the overlay onto the source's canvas first (e.g.
|
|
7
|
+
* `transform.pad`). Output is `same-as:source`.
|
|
8
|
+
*/
|
|
9
|
+
import tgpu from "typegpu";
|
|
10
|
+
import * as d from "typegpu/data";
|
|
11
|
+
import { defineModule } from "../../../../module.js";
|
|
12
|
+
export const OverParams = d.struct({
|
|
13
|
+
opacity: d.f32
|
|
14
|
+
});
|
|
15
|
+
const layout = tgpu.bindGroupLayout({
|
|
16
|
+
params: { uniform: OverParams },
|
|
17
|
+
source: { texture: "float" },
|
|
18
|
+
over: { texture: "float" },
|
|
19
|
+
samp: { sampler: "filtering" }
|
|
20
|
+
});
|
|
21
|
+
const samplerDescriptor = {
|
|
22
|
+
magFilter: "linear",
|
|
23
|
+
minFilter: "linear",
|
|
24
|
+
addressModeU: "clamp-to-edge",
|
|
25
|
+
addressModeV: "clamp-to-edge"
|
|
26
|
+
};
|
|
27
|
+
export const mixerOverV1 = defineModule({
|
|
28
|
+
id: "mixer.over",
|
|
29
|
+
version: 1,
|
|
30
|
+
surface: "internal",
|
|
31
|
+
category: "mixer",
|
|
32
|
+
linearity: "linear-in-rgb",
|
|
33
|
+
kind: "fragment",
|
|
34
|
+
params: OverParams,
|
|
35
|
+
paramDefaults: { opacity: 1 },
|
|
36
|
+
paramUi: {
|
|
37
|
+
opacity: { min: 0, max: 1, step: 0.01, label: "Opacity" }
|
|
38
|
+
},
|
|
39
|
+
layout,
|
|
40
|
+
samplers: { samp: samplerDescriptor },
|
|
41
|
+
wgsl: /* wgsl */ `
|
|
42
|
+
@fragment
|
|
43
|
+
fn fs_main(@location(0) uv: vec2f) -> @location(0) vec4f {
|
|
44
|
+
let s = textureSample(layout.$.source, layout.$.samp, uv);
|
|
45
|
+
let o = textureSample(layout.$.over, layout.$.samp, uv) * layout.$.params.opacity;
|
|
46
|
+
return o + s * (1.0 - o.a);
|
|
47
|
+
}
|
|
48
|
+
`,
|
|
49
|
+
io: {
|
|
50
|
+
inputs: {
|
|
51
|
+
source: {
|
|
52
|
+
colorSpace: "linear",
|
|
53
|
+
alpha: "premultiplied",
|
|
54
|
+
bindingKinds: ["texture_2d"]
|
|
55
|
+
},
|
|
56
|
+
over: {
|
|
57
|
+
colorSpace: "linear",
|
|
58
|
+
alpha: "premultiplied",
|
|
59
|
+
bindingKinds: ["texture_2d"]
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
output: {
|
|
63
|
+
colorSpace: "linear",
|
|
64
|
+
alpha: "premultiplied",
|
|
65
|
+
format: "rgba8unorm",
|
|
66
|
+
dimensions: "same-as:source"
|
|
67
|
+
},
|
|
68
|
+
rod: "same-as:source"
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
//# sourceMappingURL=module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../../../../src/shaders/mixer/over/v1/module.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,OAAO,EAAE,CAAC,CAAC,GAAG;CACf,CAAC,CAAC;AAEH,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;IAClC,MAAM,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE;IAC/B,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;IAC5B,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;IAC1B,IAAI,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE;CAC/B,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAyB;IAC9C,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,QAAQ;IACnB,YAAY,EAAE,eAAe;IAC7B,YAAY,EAAE,eAAe;CAC9B,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CAAC;IACtC,EAAE,EAAE,YAAY;IAChB,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,UAAU;IACnB,QAAQ,EAAE,OAAO;IACjB,SAAS,EAAE,eAAe;IAC1B,IAAI,EAAE,UAAU;IAChB,MAAM,EAAE,UAAU;IAClB,aAAa,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;IAC7B,OAAO,EAAE;QACP,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE;KAC1D;IACD,MAAM;IACN,QAAQ,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE;IACrC,IAAI,EAAE,UAAU,CAAC;;;;;;;CAOlB;IACC,EAAE,EAAE;QACF,MAAM,EAAE;YACN,MAAM,EAAE;gBACN,UAAU,EAAE,QAAQ;gBACpB,KAAK,EAAE,eAAe;gBACtB,YAAY,EAAE,CAAC,YAAY,CAAC;aAC7B;YACD,IAAI,EAAE;gBACJ,UAAU,EAAE,QAAQ;gBACpB,KAAK,EAAE,eAAe;gBACtB,YAAY,EAAE,CAAC,YAAY,CAAC;aAC7B;SACF;QACD,MAAM,EAAE;YACN,UAAU,EAAE,QAAQ;YACpB,KAAK,EAAE,eAAe;YACtB,MAAM,EAAE,YAAY;YACpB,UAAU,EAAE,gBAAgB;SAC7B;QACD,GAAG,EAAE,gBAAgB;KACtB;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `mixer.shadowCompose@1` — composite `source` over a coloured, offset
|
|
3
|
+
* shadow read from a precomputed mask.
|
|
4
|
+
*
|
|
5
|
+
* Internal helper for the `mixer.dropShadow@1` recipe. Samples `shadowMask`
|
|
6
|
+
* at `uv - offset`, multiplies its alpha by the shadow `color` and
|
|
7
|
+
* `intensity` to produce a shadow contribution, then alpha-composites
|
|
8
|
+
* `source` over the shadow.
|
|
9
|
+
*
|
|
10
|
+
* Stays `surface: "internal"` — published consumers should use the recipe,
|
|
11
|
+
* not this primitive directly.
|
|
12
|
+
*/
|
|
13
|
+
import * as d from "typegpu/data";
|
|
14
|
+
export declare const ShadowComposeParams: d.WgslStruct<{
|
|
15
|
+
color: d.Vec4f;
|
|
16
|
+
offsetX: d.F32;
|
|
17
|
+
offsetY: d.F32;
|
|
18
|
+
intensity: d.F32;
|
|
19
|
+
}>;
|
|
20
|
+
export declare const mixerShadowComposeV1: import("../../../../module.js").ShaderModule<d.WgslStruct<{
|
|
21
|
+
color: d.Vec4f;
|
|
22
|
+
offsetX: d.F32;
|
|
23
|
+
offsetY: d.F32;
|
|
24
|
+
intensity: d.F32;
|
|
25
|
+
}>>;
|
|
26
|
+
//# sourceMappingURL=module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/shaders/mixer/shadowCompose/v1/module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAGlC,eAAO,MAAM,mBAAmB;;;;;EAK9B,CAAC;AAgBH,eAAO,MAAM,oBAAoB;;;;;GA4D/B,CAAC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `mixer.shadowCompose@1` — composite `source` over a coloured, offset
|
|
3
|
+
* shadow read from a precomputed mask.
|
|
4
|
+
*
|
|
5
|
+
* Internal helper for the `mixer.dropShadow@1` recipe. Samples `shadowMask`
|
|
6
|
+
* at `uv - offset`, multiplies its alpha by the shadow `color` and
|
|
7
|
+
* `intensity` to produce a shadow contribution, then alpha-composites
|
|
8
|
+
* `source` over the shadow.
|
|
9
|
+
*
|
|
10
|
+
* Stays `surface: "internal"` — published consumers should use the recipe,
|
|
11
|
+
* not this primitive directly.
|
|
12
|
+
*/
|
|
13
|
+
import tgpu from "typegpu";
|
|
14
|
+
import * as d from "typegpu/data";
|
|
15
|
+
import { defineModule } from "../../../../module.js";
|
|
16
|
+
export const ShadowComposeParams = d.struct({
|
|
17
|
+
color: d.vec4f,
|
|
18
|
+
offsetX: d.f32,
|
|
19
|
+
offsetY: d.f32,
|
|
20
|
+
intensity: d.f32
|
|
21
|
+
});
|
|
22
|
+
const layout = tgpu.bindGroupLayout({
|
|
23
|
+
params: { uniform: ShadowComposeParams },
|
|
24
|
+
source: { texture: "float" },
|
|
25
|
+
shadowMask: { texture: "float" },
|
|
26
|
+
samp: { sampler: "filtering" }
|
|
27
|
+
});
|
|
28
|
+
const samplerDescriptor = {
|
|
29
|
+
magFilter: "linear",
|
|
30
|
+
minFilter: "linear",
|
|
31
|
+
addressModeU: "clamp-to-edge",
|
|
32
|
+
addressModeV: "clamp-to-edge"
|
|
33
|
+
};
|
|
34
|
+
export const mixerShadowComposeV1 = defineModule({
|
|
35
|
+
id: "mixer.shadowCompose",
|
|
36
|
+
version: 1,
|
|
37
|
+
surface: "internal",
|
|
38
|
+
category: "mixer",
|
|
39
|
+
linearity: "linear-in-rgb",
|
|
40
|
+
kind: "fragment",
|
|
41
|
+
params: ShadowComposeParams,
|
|
42
|
+
paramDefaults: {
|
|
43
|
+
color: d.vec4f(0, 0, 0, 1),
|
|
44
|
+
offsetX: 0.02,
|
|
45
|
+
offsetY: 0.02,
|
|
46
|
+
intensity: 0.6
|
|
47
|
+
},
|
|
48
|
+
paramUi: {
|
|
49
|
+
color: { label: "Shadow color", notes: "RGBA, straight alpha" },
|
|
50
|
+
offsetX: { min: -0.5, max: 0.5, step: 0.005, label: "Offset X" },
|
|
51
|
+
offsetY: { min: -0.5, max: 0.5, step: 0.005, label: "Offset Y" },
|
|
52
|
+
intensity: { min: 0, max: 4, step: 0.01, label: "Intensity" }
|
|
53
|
+
},
|
|
54
|
+
layout,
|
|
55
|
+
samplers: { samp: samplerDescriptor },
|
|
56
|
+
wgsl: /* wgsl */ `
|
|
57
|
+
@fragment
|
|
58
|
+
fn fs_main(@location(0) uv: vec2f) -> @location(0) vec4f {
|
|
59
|
+
let p = layout.$.params;
|
|
60
|
+
let src = textureSample(layout.$.source, layout.$.samp, uv);
|
|
61
|
+
let shadowUv = uv - vec2f(p.offsetX, p.offsetY);
|
|
62
|
+
// Sample the mask unconditionally (textureSample must run in uniform control
|
|
63
|
+
// flow) and zero its contribution outside the offset mask's bounds.
|
|
64
|
+
let inBounds = shadowUv.x >= 0.0 && shadowUv.x <= 1.0 && shadowUv.y >= 0.0 && shadowUv.y <= 1.0;
|
|
65
|
+
let shadowSample = textureSample(layout.$.shadowMask, layout.$.samp, shadowUv);
|
|
66
|
+
let shadowA = select(0.0, shadowSample.a, inBounds);
|
|
67
|
+
let cov = clamp(shadowA * p.color.a * p.intensity, 0.0, 1.0);
|
|
68
|
+
let shadow = vec4f(p.color.rgb * cov, cov);
|
|
69
|
+
// source over shadow: out = src + shadow * (1 - src.a). Both premultiplied.
|
|
70
|
+
return src + shadow * (1.0 - src.a);
|
|
71
|
+
}
|
|
72
|
+
`,
|
|
73
|
+
io: {
|
|
74
|
+
inputs: {
|
|
75
|
+
source: {
|
|
76
|
+
colorSpace: "linear",
|
|
77
|
+
alpha: "premultiplied",
|
|
78
|
+
bindingKinds: ["texture_2d"]
|
|
79
|
+
},
|
|
80
|
+
shadowMask: {
|
|
81
|
+
colorSpace: "linear",
|
|
82
|
+
alpha: "premultiplied",
|
|
83
|
+
bindingKinds: ["texture_2d"]
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
output: {
|
|
87
|
+
colorSpace: "linear",
|
|
88
|
+
alpha: "premultiplied",
|
|
89
|
+
format: "rgba8unorm",
|
|
90
|
+
dimensions: "same-as:source"
|
|
91
|
+
},
|
|
92
|
+
rod: "union-of-inputs"
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
//# sourceMappingURL=module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../../../../src/shaders/mixer/shadowCompose/v1/module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,KAAK,EAAE,CAAC,CAAC,KAAK;IACd,OAAO,EAAE,CAAC,CAAC,GAAG;IACd,OAAO,EAAE,CAAC,CAAC,GAAG;IACd,SAAS,EAAE,CAAC,CAAC,GAAG;CACjB,CAAC,CAAC;AAEH,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;IAClC,MAAM,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE;IACxC,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;IAC5B,UAAU,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;IAChC,IAAI,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE;CAC/B,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAyB;IAC9C,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,QAAQ;IACnB,YAAY,EAAE,eAAe;IAC7B,YAAY,EAAE,eAAe;CAC9B,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,YAAY,CAAC;IAC/C,EAAE,EAAE,qBAAqB;IACzB,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,UAAU;IACnB,QAAQ,EAAE,OAAO;IACjB,SAAS,EAAE,eAAe;IAC1B,IAAI,EAAE,UAAU;IAChB,MAAM,EAAE,mBAAmB;IAC3B,aAAa,EAAE;QACb,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1B,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,GAAG;KACf;IACD,OAAO,EAAE;QACP,KAAK,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE;QAC/D,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE;QAChE,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE;QAChE,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE;KAC9D;IACD,MAAM;IACN,QAAQ,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE;IACrC,IAAI,EAAE,UAAU,CAAC;;;;;;;;;;;;;;;;CAgBlB;IACC,EAAE,EAAE;QACF,MAAM,EAAE;YACN,MAAM,EAAE;gBACN,UAAU,EAAE,QAAQ;gBACpB,KAAK,EAAE,eAAe;gBACtB,YAAY,EAAE,CAAC,YAAY,CAAC;aAC7B;YACD,UAAU,EAAE;gBACV,UAAU,EAAE,QAAQ;gBACpB,KAAK,EAAE,eAAe;gBACtB,YAAY,EAAE,CAAC,YAAY,CAAC;aAC7B;SACF;QACD,MAAM,EAAE;YACN,UAAU,EAAE,QAAQ;YACpB,KAAK,EAAE,eAAe;YACtB,MAAM,EAAE,YAAY;YACpB,UAAU,EAAE,gBAAgB;SAC7B;QACD,GAAG,EAAE,iBAAiB;KACvB;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `sources.angularGradient@1` — two-color angular gradient around center.
|
|
3
|
+
*
|
|
4
|
+
* `rotation` offsets the seam angle in radians. Zero-input source,
|
|
5
|
+
* host-specified dimensions.
|
|
6
|
+
*/
|
|
7
|
+
import * as d from "typegpu/data";
|
|
8
|
+
export declare const AngularGradientParams: d.WgslStruct<{
|
|
9
|
+
colorA: d.Vec4f;
|
|
10
|
+
colorB: d.Vec4f;
|
|
11
|
+
rotation: d.F32;
|
|
12
|
+
}>;
|
|
13
|
+
export declare const sourcesAngularGradientV1: import("../../../../module.js").ShaderModule<d.WgslStruct<{
|
|
14
|
+
colorA: d.Vec4f;
|
|
15
|
+
colorB: d.Vec4f;
|
|
16
|
+
rotation: d.F32;
|
|
17
|
+
}>>;
|
|
18
|
+
//# sourceMappingURL=module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/shaders/sources/angularGradient/v1/module.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAGlC,eAAO,MAAM,qBAAqB;;;;EAIhC,CAAC;AAMH,eAAO,MAAM,wBAAwB;;;;GAgDnC,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `sources.angularGradient@1` — two-color angular gradient around center.
|
|
3
|
+
*
|
|
4
|
+
* `rotation` offsets the seam angle in radians. Zero-input source,
|
|
5
|
+
* host-specified dimensions.
|
|
6
|
+
*/
|
|
7
|
+
import tgpu from "typegpu";
|
|
8
|
+
import * as d from "typegpu/data";
|
|
9
|
+
import { defineModule } from "../../../../module.js";
|
|
10
|
+
export const AngularGradientParams = d.struct({
|
|
11
|
+
colorA: d.vec4f,
|
|
12
|
+
colorB: d.vec4f,
|
|
13
|
+
rotation: d.f32
|
|
14
|
+
});
|
|
15
|
+
const layout = tgpu.bindGroupLayout({
|
|
16
|
+
params: { uniform: AngularGradientParams }
|
|
17
|
+
});
|
|
18
|
+
export const sourcesAngularGradientV1 = defineModule({
|
|
19
|
+
id: "sources.angularGradient",
|
|
20
|
+
version: 1,
|
|
21
|
+
surface: "internal",
|
|
22
|
+
category: "sources",
|
|
23
|
+
linearity: "source",
|
|
24
|
+
kind: "fragment",
|
|
25
|
+
params: AngularGradientParams,
|
|
26
|
+
paramDefaults: {
|
|
27
|
+
colorA: d.vec4f(0, 0, 0, 1),
|
|
28
|
+
colorB: d.vec4f(1, 1, 1, 1),
|
|
29
|
+
rotation: 0
|
|
30
|
+
},
|
|
31
|
+
paramUi: {
|
|
32
|
+
colorA: { label: "Color A" },
|
|
33
|
+
colorB: { label: "Color B" },
|
|
34
|
+
rotation: {
|
|
35
|
+
min: -Math.PI,
|
|
36
|
+
max: Math.PI,
|
|
37
|
+
step: 0.01,
|
|
38
|
+
label: "Rotation",
|
|
39
|
+
notes: "radians"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
layout,
|
|
43
|
+
wgsl: /* wgsl */ `
|
|
44
|
+
@fragment
|
|
45
|
+
fn fs_main(@location(0) uv: vec2f) -> @location(0) vec4f {
|
|
46
|
+
let p = layout.$.params;
|
|
47
|
+
let delta = uv - vec2f(0.5, 0.5);
|
|
48
|
+
let theta = atan2(delta.y, delta.x) - p.rotation;
|
|
49
|
+
let t = fract(theta / (2.0 * 3.14159265359) + 1.0);
|
|
50
|
+
// The colour params arrive premultiplied (hosts premultiply at the colour
|
|
51
|
+
// picker boundary); a mix of premultiplied endpoints stays premultiplied.
|
|
52
|
+
// Re-multiplying by alpha here would darken translucent colours to rgb*a².
|
|
53
|
+
return mix(p.colorA, p.colorB, t);
|
|
54
|
+
}
|
|
55
|
+
`,
|
|
56
|
+
io: {
|
|
57
|
+
inputs: {},
|
|
58
|
+
output: {
|
|
59
|
+
colorSpace: "linear",
|
|
60
|
+
alpha: "premultiplied",
|
|
61
|
+
format: "rgba8unorm",
|
|
62
|
+
dimensions: "host-specified"
|
|
63
|
+
},
|
|
64
|
+
rod: "explicit"
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
//# sourceMappingURL=module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../../../../src/shaders/sources/angularGradient/v1/module.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,MAAM,EAAE,CAAC,CAAC,KAAK;IACf,MAAM,EAAE,CAAC,CAAC,KAAK;IACf,QAAQ,EAAE,CAAC,CAAC,GAAG;CAChB,CAAC,CAAC;AAEH,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;IAClC,MAAM,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE;CAC3C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,YAAY,CAAC;IACnD,EAAE,EAAE,yBAAyB;IAC7B,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,UAAU;IACnB,QAAQ,EAAE,SAAS;IACnB,SAAS,EAAE,QAAQ;IACnB,IAAI,EAAE,UAAU;IAChB,MAAM,EAAE,qBAAqB;IAC7B,aAAa,EAAE;QACb,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3B,QAAQ,EAAE,CAAC;KACZ;IACD,OAAO,EAAE;QACP,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;QAC5B,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;QAC5B,QAAQ,EAAE;YACR,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;YACb,GAAG,EAAE,IAAI,CAAC,EAAE;YACZ,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,UAAU;YACjB,KAAK,EAAE,SAAS;SACjB;KACF;IACD,MAAM;IACN,IAAI,EAAE,UAAU,CAAC;;;;;;;;;;;;CAYlB;IACC,EAAE,EAAE;QACF,MAAM,EAAE,EAAE;QACV,MAAM,EAAE;YACN,UAAU,EAAE,QAAQ;YACpB,KAAK,EAAE,eAAe;YACtB,MAAM,EAAE,YAAY;YACpB,UAAU,EAAE,gBAAgB;SAC7B;QACD,GAAG,EAAE,UAAU;KAChB;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `sources.checkerboard@1` — two-color checkerboard pattern.
|
|
3
|
+
*
|
|
4
|
+
* `cellSize` is in output pixels. Zero-input source, host-specified
|
|
5
|
+
* dimensions — the host picks the output resolution; cell count follows
|
|
6
|
+
* directly from that and `cellSize`.
|
|
7
|
+
*/
|
|
8
|
+
import * as d from "typegpu/data";
|
|
9
|
+
export declare const CheckerboardParams: d.WgslStruct<{
|
|
10
|
+
colorA: d.Vec4f;
|
|
11
|
+
colorB: d.Vec4f;
|
|
12
|
+
cellSize: d.F32;
|
|
13
|
+
}>;
|
|
14
|
+
export declare const sourcesCheckerboardV1: import("../../../../module.js").ShaderModule<d.WgslStruct<{
|
|
15
|
+
colorA: d.Vec4f;
|
|
16
|
+
colorB: d.Vec4f;
|
|
17
|
+
cellSize: d.F32;
|
|
18
|
+
}>>;
|
|
19
|
+
//# sourceMappingURL=module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/shaders/sources/checkerboard/v1/module.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAGlC,eAAO,MAAM,kBAAkB;;;;EAI7B,CAAC;AAMH,eAAO,MAAM,qBAAqB;;;;GAkDhC,CAAC"}
|