@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,353 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebGPULayerCompositor — the shared layer-compositing engine.
|
|
3
|
+
*
|
|
4
|
+
* Owns the blend + blit render pipelines, the ping-pong accumulation
|
|
5
|
+
* textures, and the sampler. Both the sketch editor and the timeline
|
|
6
|
+
* preview drive it: they upload their own source textures (canvas layers /
|
|
7
|
+
* video frames), seed the background into the read texture, then call
|
|
8
|
+
* {@link renderBlendPass} once per layer and {@link blit} to present.
|
|
9
|
+
*
|
|
10
|
+
* The engine is source-agnostic — it composites `GPUTexture`s addressed by a
|
|
11
|
+
* 2×3 inverse-affine matrix (screen px → layer texel). Sketch supplies
|
|
12
|
+
* `nearest` filtering (pixel-exact paint); the timeline supplies `linear`
|
|
13
|
+
* (smooth scaled video) plus an optional rounded-rect mask.
|
|
14
|
+
*/
|
|
15
|
+
import tgpu from "typegpu";
|
|
16
|
+
import * as d from "typegpu/data";
|
|
17
|
+
import { BLEND_COMPOSITE_FRAGMENT, BLIT_FRAGMENT, FULLSCREEN_QUAD_VERTEX } from "./shaders.js";
|
|
18
|
+
/**
|
|
19
|
+
* Blend-pass uniform schema (4 × vec4f = 64 bytes). The single source of
|
|
20
|
+
* truth for both the WGSL `BlendUniforms` struct (see `shaders.ts`) and the
|
|
21
|
+
* host-side packed buffer. Field order mirrors the WGSL struct exactly.
|
|
22
|
+
*/
|
|
23
|
+
const BlendUniforms = d.struct({
|
|
24
|
+
params0: d.vec4f, // opacity, blendMode, canvasW, canvasH
|
|
25
|
+
invRow0: d.vec4f, // inverse-affine row 0: a, b, tx, _
|
|
26
|
+
invRow1: d.vec4f, // inverse-affine row 1: c, d, ty, _
|
|
27
|
+
invRow2: d.vec4f, // projective denominator row: p, q, r, _
|
|
28
|
+
params1: d.vec4f, // borderRadius, smoothness, filterMode, irisSoftness
|
|
29
|
+
params2: d.vec4f // wipeEdge (0 = off), wipeProgress, wipeSoftness, irisProgress (-1 = off)
|
|
30
|
+
});
|
|
31
|
+
/** Typed bind group layout for the blend pass. Binding order = WGSL order. */
|
|
32
|
+
const blendLayout = tgpu.bindGroupLayout({
|
|
33
|
+
u: { uniform: BlendUniforms },
|
|
34
|
+
srcTexture: { texture: "float" },
|
|
35
|
+
dstTexture: { texture: "float" },
|
|
36
|
+
srcSampler: { sampler: "filtering" }
|
|
37
|
+
});
|
|
38
|
+
/** Typed bind group layout for the blit pass (single sampled texture). */
|
|
39
|
+
const blitLayout = tgpu.bindGroupLayout({
|
|
40
|
+
blitTexture: { texture: "float" }
|
|
41
|
+
});
|
|
42
|
+
const IDENTITY_INVERSE_AFFINE = {
|
|
43
|
+
a: 1,
|
|
44
|
+
b: 0,
|
|
45
|
+
tx: 0,
|
|
46
|
+
c: 0,
|
|
47
|
+
d: 1,
|
|
48
|
+
ty: 0
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Convert a column-major 4×4 clip-space placement matrix (mapping a quad
|
|
52
|
+
* with local coords in [-1,1]² to clip space, as produced by the timeline's
|
|
53
|
+
* `buildTransformMatrix`) into the inverse-affine matrix (screen px → layer
|
|
54
|
+
* texel) the compositor shader expects.
|
|
55
|
+
*
|
|
56
|
+
* The composed screen→texel map is affine, so it is reconstructed exactly by
|
|
57
|
+
* evaluating three points and differencing — no hand-derived trigonometry,
|
|
58
|
+
* which keeps placement faithful to the matrix the caller already trusts.
|
|
59
|
+
*/
|
|
60
|
+
export function forwardClipMatrixToInverseAffine(m, sourceWidth, sourceHeight, canvasWidth, canvasHeight) {
|
|
61
|
+
return (invertClipPlacement(m, sourceWidth, sourceHeight, canvasWidth, canvasHeight) ?? {
|
|
62
|
+
...IDENTITY_INVERSE_AFFINE
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* {@link forwardClipMatrixToInverseAffine} without the identity fallback: null
|
|
67
|
+
* when the placement covers no area, such as a layer scaled to zero on either
|
|
68
|
+
* axis. A caller that draws layers must skip a null placement. The identity
|
|
69
|
+
* would draw the source 1:1 from the frame's top-left corner.
|
|
70
|
+
*/
|
|
71
|
+
export function invertClipPlacement(m, sourceWidth, sourceHeight, canvasWidth, canvasHeight) {
|
|
72
|
+
if (sourceWidth <= 0 ||
|
|
73
|
+
sourceHeight <= 0 ||
|
|
74
|
+
canvasWidth <= 0 ||
|
|
75
|
+
canvasHeight <= 0) {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
if (m[3] !== 0 || m[7] !== 0 || m[15] !== 1) {
|
|
79
|
+
const a = (canvasWidth / 2) * (m[0] + m[3]);
|
|
80
|
+
const b = (canvasWidth / 2) * (m[4] + m[7]);
|
|
81
|
+
const c = (canvasWidth / 2) * (m[12] + m[15]);
|
|
82
|
+
const d = (canvasHeight / 2) * (m[3] - m[1]);
|
|
83
|
+
const e = (canvasHeight / 2) * (m[7] - m[5]);
|
|
84
|
+
const f = (canvasHeight / 2) * (m[15] - m[13]);
|
|
85
|
+
const g = m[3];
|
|
86
|
+
const h = m[7];
|
|
87
|
+
const i = m[15];
|
|
88
|
+
const det = a * (e * i - f * h) - b * (d * i - f * g) + c * (d * h - e * g);
|
|
89
|
+
if (Math.abs(det) < 1e-12)
|
|
90
|
+
return null;
|
|
91
|
+
const n00 = (e * i - f * h) / det;
|
|
92
|
+
const n01 = (c * h - b * i) / det;
|
|
93
|
+
const n02 = (b * f - c * e) / det;
|
|
94
|
+
const n10 = (f * g - d * i) / det;
|
|
95
|
+
const n11 = (a * i - c * g) / det;
|
|
96
|
+
const n12 = (c * d - a * f) / det;
|
|
97
|
+
const n20 = (d * h - e * g) / det;
|
|
98
|
+
const n21 = (b * g - a * h) / det;
|
|
99
|
+
const n22 = (a * e - b * d) / det;
|
|
100
|
+
return {
|
|
101
|
+
a: (sourceWidth / 2) * (n00 + n20),
|
|
102
|
+
b: (sourceWidth / 2) * (n01 + n21),
|
|
103
|
+
tx: (sourceWidth / 2) * (n02 + n22),
|
|
104
|
+
c: (sourceHeight / 2) * (n20 - n10),
|
|
105
|
+
d: (sourceHeight / 2) * (n21 - n11),
|
|
106
|
+
ty: (sourceHeight / 2) * (n22 - n12),
|
|
107
|
+
p: n20,
|
|
108
|
+
q: n21,
|
|
109
|
+
r: n22
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
// local → clip: clip = A·local + t (A is the xy 2×2 block, t the xy translation).
|
|
113
|
+
const a00 = m[0];
|
|
114
|
+
const a01 = m[4];
|
|
115
|
+
const a10 = m[1];
|
|
116
|
+
const a11 = m[5];
|
|
117
|
+
const tX = m[12];
|
|
118
|
+
const tY = m[13];
|
|
119
|
+
const det = a00 * a11 - a01 * a10;
|
|
120
|
+
if (Math.abs(det) < 1e-12) {
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
const inv00 = a11 / det;
|
|
124
|
+
const inv01 = -a01 / det;
|
|
125
|
+
const inv10 = -a10 / det;
|
|
126
|
+
const inv11 = a00 / det;
|
|
127
|
+
// screen px → layer texel, evaluated at one point.
|
|
128
|
+
const texelAt = (X, Y) => {
|
|
129
|
+
// screen px → clip
|
|
130
|
+
const clipX = (X * 2) / canvasWidth - 1;
|
|
131
|
+
const clipY = 1 - (Y * 2) / canvasHeight;
|
|
132
|
+
// clip → local (A⁻¹ · (clip - t))
|
|
133
|
+
const cx = clipX - tX;
|
|
134
|
+
const cy = clipY - tY;
|
|
135
|
+
const localX = inv00 * cx + inv01 * cy;
|
|
136
|
+
const localY = inv10 * cx + inv11 * cy;
|
|
137
|
+
// local [-1,1] → texel [0,dims]. V is flipped: the quad maps local.y = -1
|
|
138
|
+
// (clip-space bottom) to texture row 0 (top), matching the source UVs.
|
|
139
|
+
return {
|
|
140
|
+
x: ((localX + 1) * sourceWidth) / 2,
|
|
141
|
+
y: ((1 - localY) * sourceHeight) / 2
|
|
142
|
+
};
|
|
143
|
+
};
|
|
144
|
+
const p00 = texelAt(0, 0);
|
|
145
|
+
const p10 = texelAt(1, 0);
|
|
146
|
+
const p01 = texelAt(0, 1);
|
|
147
|
+
return {
|
|
148
|
+
a: p10.x - p00.x,
|
|
149
|
+
b: p01.x - p00.x,
|
|
150
|
+
tx: p00.x,
|
|
151
|
+
c: p10.y - p00.y,
|
|
152
|
+
d: p01.y - p00.y,
|
|
153
|
+
ty: p00.y
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/** SDF antialias band (layer-local units) when a border radius is active. */
|
|
157
|
+
const BORDER_RADIUS_SMOOTHNESS = 0.01;
|
|
158
|
+
export class WebGPULayerCompositor {
|
|
159
|
+
device;
|
|
160
|
+
format;
|
|
161
|
+
root;
|
|
162
|
+
blendBindGroupLayout;
|
|
163
|
+
blendPipeline;
|
|
164
|
+
blitBindGroupLayout;
|
|
165
|
+
blitPipeline;
|
|
166
|
+
sampler;
|
|
167
|
+
filterMode;
|
|
168
|
+
pingPongA = null;
|
|
169
|
+
pingPongB = null;
|
|
170
|
+
widthPx = 0;
|
|
171
|
+
heightPx = 0;
|
|
172
|
+
// Per-frame uniform buffers, reused across frames. One distinct buffer per
|
|
173
|
+
// blend pass within a frame: every pass in a frame is encoded into the same
|
|
174
|
+
// submit, so they cannot share a buffer (a write would alias to the last
|
|
175
|
+
// value). `beginFrame` resets the ring index each frame.
|
|
176
|
+
uniformBuffers = [];
|
|
177
|
+
passIndex = 0;
|
|
178
|
+
constructor(device, format, filter = "nearest", label = "layer-compositor") {
|
|
179
|
+
this.device = device;
|
|
180
|
+
this.format = format;
|
|
181
|
+
this.filterMode = filter === "linear" ? 1 : 0;
|
|
182
|
+
this.root = tgpu.initFromDevice({ device });
|
|
183
|
+
this.sampler = device.createSampler({
|
|
184
|
+
label: `${label}-sampler`,
|
|
185
|
+
magFilter: filter,
|
|
186
|
+
minFilter: filter,
|
|
187
|
+
addressModeU: "clamp-to-edge",
|
|
188
|
+
addressModeV: "clamp-to-edge"
|
|
189
|
+
});
|
|
190
|
+
// TypeGPU owns the bind group layouts: `root.unwrap(layout)` returns the
|
|
191
|
+
// GPUBindGroupLayout the WGSL in shaders.ts is authored against, so the
|
|
192
|
+
// host and the shader can never drift apart.
|
|
193
|
+
this.blendBindGroupLayout = this.root.unwrap(blendLayout);
|
|
194
|
+
const blendModule = device.createShaderModule({
|
|
195
|
+
label: `${label}-blend-frag`,
|
|
196
|
+
code: FULLSCREEN_QUAD_VERTEX + BLEND_COMPOSITE_FRAGMENT
|
|
197
|
+
});
|
|
198
|
+
this.blendPipeline = device.createRenderPipeline({
|
|
199
|
+
label: `${label}-blend-pipeline`,
|
|
200
|
+
layout: device.createPipelineLayout({
|
|
201
|
+
bindGroupLayouts: [this.blendBindGroupLayout]
|
|
202
|
+
}),
|
|
203
|
+
vertex: { module: blendModule, entryPoint: "vs_main" },
|
|
204
|
+
fragment: {
|
|
205
|
+
module: blendModule,
|
|
206
|
+
entryPoint: "fs_blend",
|
|
207
|
+
targets: [{ format }]
|
|
208
|
+
},
|
|
209
|
+
primitive: { topology: "triangle-strip" }
|
|
210
|
+
});
|
|
211
|
+
this.blitBindGroupLayout = this.root.unwrap(blitLayout);
|
|
212
|
+
const blitModule = device.createShaderModule({
|
|
213
|
+
label: `${label}-blit-frag`,
|
|
214
|
+
code: FULLSCREEN_QUAD_VERTEX + BLIT_FRAGMENT
|
|
215
|
+
});
|
|
216
|
+
this.blitPipeline = device.createRenderPipeline({
|
|
217
|
+
label: `${label}-blit-pipeline`,
|
|
218
|
+
layout: device.createPipelineLayout({
|
|
219
|
+
bindGroupLayouts: [this.blitBindGroupLayout]
|
|
220
|
+
}),
|
|
221
|
+
vertex: { module: blitModule, entryPoint: "vs_main" },
|
|
222
|
+
fragment: {
|
|
223
|
+
module: blitModule,
|
|
224
|
+
entryPoint: "fs_blit",
|
|
225
|
+
targets: [{ format }]
|
|
226
|
+
},
|
|
227
|
+
primitive: { topology: "triangle-strip" }
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
get width() {
|
|
231
|
+
return this.widthPx;
|
|
232
|
+
}
|
|
233
|
+
get height() {
|
|
234
|
+
return this.heightPx;
|
|
235
|
+
}
|
|
236
|
+
/** The ping-pong accumulation textures. Seed the background into A. */
|
|
237
|
+
get textureA() {
|
|
238
|
+
return this.pingPongA;
|
|
239
|
+
}
|
|
240
|
+
get textureB() {
|
|
241
|
+
return this.pingPongB;
|
|
242
|
+
}
|
|
243
|
+
/** (Re)allocate the ping-pong textures when the canvas size changes. */
|
|
244
|
+
ensureSize(width, height) {
|
|
245
|
+
if (this.pingPongA && this.widthPx === width && this.heightPx === height) {
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
const safeW = Math.max(1, width);
|
|
249
|
+
const safeH = Math.max(1, height);
|
|
250
|
+
const usage = GPUTextureUsage.RENDER_ATTACHMENT |
|
|
251
|
+
GPUTextureUsage.TEXTURE_BINDING |
|
|
252
|
+
GPUTextureUsage.COPY_SRC |
|
|
253
|
+
GPUTextureUsage.COPY_DST;
|
|
254
|
+
this.pingPongA?.destroy();
|
|
255
|
+
this.pingPongB?.destroy();
|
|
256
|
+
this.pingPongA = this.device.createTexture({
|
|
257
|
+
label: "layer-compositor-ping-A",
|
|
258
|
+
size: { width: safeW, height: safeH },
|
|
259
|
+
format: this.format,
|
|
260
|
+
usage
|
|
261
|
+
});
|
|
262
|
+
this.pingPongB = this.device.createTexture({
|
|
263
|
+
label: "layer-compositor-ping-B",
|
|
264
|
+
size: { width: safeW, height: safeH },
|
|
265
|
+
format: this.format,
|
|
266
|
+
usage
|
|
267
|
+
});
|
|
268
|
+
this.widthPx = width;
|
|
269
|
+
this.heightPx = height;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Reset the per-frame uniform-buffer ring. Call once before the frame's
|
|
273
|
+
* sequence of {@link renderBlendPass} calls.
|
|
274
|
+
*/
|
|
275
|
+
beginFrame() {
|
|
276
|
+
this.passIndex = 0;
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Composite one layer: reads `readTex` (current accumulation) and the
|
|
280
|
+
* layer source, writes the blended result to `writeTex` (full-screen).
|
|
281
|
+
*/
|
|
282
|
+
renderBlendPass(encoder, readTex, writeTex, params) {
|
|
283
|
+
const { invAffine } = params;
|
|
284
|
+
const borderRadius = params.borderRadius ?? 0;
|
|
285
|
+
const smoothness = borderRadius > 0 ? BORDER_RADIUS_SMOOTHNESS : 0;
|
|
286
|
+
const idx = this.passIndex++;
|
|
287
|
+
let uniformBuffer = this.uniformBuffers[idx];
|
|
288
|
+
if (!uniformBuffer) {
|
|
289
|
+
uniformBuffer = this.root
|
|
290
|
+
.createBuffer(BlendUniforms)
|
|
291
|
+
.$usage("uniform")
|
|
292
|
+
.$name(`layer-compositor-uniform-${idx}`);
|
|
293
|
+
this.uniformBuffers[idx] = uniformBuffer;
|
|
294
|
+
}
|
|
295
|
+
const wipe = params.wipe;
|
|
296
|
+
uniformBuffer.write({
|
|
297
|
+
params0: d.vec4f(params.opacity, params.blendModeId, params.canvasW, params.canvasH),
|
|
298
|
+
invRow0: d.vec4f(invAffine.a, invAffine.b, invAffine.tx, 0),
|
|
299
|
+
invRow1: d.vec4f(invAffine.c, invAffine.d, invAffine.ty, 0),
|
|
300
|
+
invRow2: d.vec4f(invAffine.p ?? 0, invAffine.q ?? 0, invAffine.r ?? 1, 0),
|
|
301
|
+
params1: d.vec4f(borderRadius, smoothness, this.filterMode, params.iris?.softness ?? 0),
|
|
302
|
+
params2: wipe
|
|
303
|
+
? d.vec4f(wipe.edge, wipe.progress, wipe.softness, params.iris?.progress ?? -1)
|
|
304
|
+
: d.vec4f(0, 0, 0, params.iris?.progress ?? -1)
|
|
305
|
+
});
|
|
306
|
+
const bindGroup = this.device.createBindGroup({
|
|
307
|
+
layout: this.blendBindGroupLayout,
|
|
308
|
+
entries: [
|
|
309
|
+
{ binding: 0, resource: { buffer: uniformBuffer.buffer } },
|
|
310
|
+
{ binding: 1, resource: params.source.createView() },
|
|
311
|
+
{ binding: 2, resource: readTex.createView() },
|
|
312
|
+
{ binding: 3, resource: this.sampler }
|
|
313
|
+
]
|
|
314
|
+
});
|
|
315
|
+
const pass = encoder.beginRenderPass({
|
|
316
|
+
colorAttachments: [
|
|
317
|
+
{ view: writeTex.createView(), loadOp: "clear", storeOp: "store" }
|
|
318
|
+
]
|
|
319
|
+
});
|
|
320
|
+
pass.setPipeline(this.blendPipeline);
|
|
321
|
+
pass.setBindGroup(0, bindGroup);
|
|
322
|
+
pass.draw(4);
|
|
323
|
+
pass.end();
|
|
324
|
+
}
|
|
325
|
+
/** Present `srcTex` to a target view (swap chain or other attachment). */
|
|
326
|
+
blit(encoder, srcTex, targetView) {
|
|
327
|
+
const bindGroup = this.device.createBindGroup({
|
|
328
|
+
layout: this.blitBindGroupLayout,
|
|
329
|
+
entries: [{ binding: 0, resource: srcTex.createView() }]
|
|
330
|
+
});
|
|
331
|
+
const pass = encoder.beginRenderPass({
|
|
332
|
+
colorAttachments: [
|
|
333
|
+
{ view: targetView, loadOp: "clear", storeOp: "store" }
|
|
334
|
+
]
|
|
335
|
+
});
|
|
336
|
+
pass.setPipeline(this.blitPipeline);
|
|
337
|
+
pass.setBindGroup(0, bindGroup);
|
|
338
|
+
pass.draw(4);
|
|
339
|
+
pass.end();
|
|
340
|
+
}
|
|
341
|
+
dispose() {
|
|
342
|
+
this.pingPongA?.destroy();
|
|
343
|
+
this.pingPongB?.destroy();
|
|
344
|
+
this.pingPongA = null;
|
|
345
|
+
this.pingPongB = null;
|
|
346
|
+
// The uniform buffers were created through the root, so destroying the
|
|
347
|
+
// root frees them. The GPUDevice itself is caller-owned and survives
|
|
348
|
+
// (root was created via initFromDevice).
|
|
349
|
+
this.uniformBuffers = [];
|
|
350
|
+
this.root.destroy();
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
//# sourceMappingURL=compositor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compositor.js","sourceRoot":"","sources":["../../src/compositor/compositor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAClC,OAAO,EACL,wBAAwB,EACxB,aAAa,EACb,sBAAsB,EACvB,MAAM,cAAc,CAAC;AAEtB;;;;GAIG;AACH,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,uCAAuC;IACzD,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,oCAAoC;IACtD,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,oCAAoC;IACtD,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,yCAAyC;IAC3D,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,qDAAqD;IACvE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,0EAA0E;CAC5F,CAAC,CAAC;AAEH,8EAA8E;AAC9E,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC;IACvC,CAAC,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE;IAC7B,UAAU,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;IAChC,UAAU,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;IAChC,UAAU,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE;CACrC,CAAC,CAAC;AAEH,0EAA0E;AAC1E,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC;IACtC,WAAW,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;CAClC,CAAC,CAAC;AA6CH,MAAM,uBAAuB,GAAkB;IAC7C,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,EAAE,EAAE,CAAC;IACL,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,EAAE,EAAE,CAAC;CACN,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,UAAU,gCAAgC,CAC9C,CAA0B,EAC1B,WAAmB,EACnB,YAAoB,EACpB,WAAmB,EACnB,YAAoB;IAEpB,OAAO,CACL,mBAAmB,CAAC,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,CAAC,IAAI;QAC9E,GAAG,uBAAuB;KAC3B,CACF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,CAA0B,EAC1B,WAAmB,EACnB,YAAoB,EACpB,WAAmB,EACnB,YAAoB;IAEpB,IACE,WAAW,IAAI,CAAC;QAChB,YAAY,IAAI,CAAC;QACjB,WAAW,IAAI,CAAC;QAChB,YAAY,IAAI,CAAC,EACjB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5E,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK;YAAE,OAAO,IAAI,CAAC;QACvC,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QAClC,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QAClC,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QAClC,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QAClC,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QAClC,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QAClC,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QAClC,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QAClC,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QAClC,OAAO;YACL,CAAC,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;YAClC,CAAC,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;YAClC,EAAE,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;YACnC,CAAC,EAAE,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;YACnC,CAAC,EAAE,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;YACnC,EAAE,EAAE,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;YACpC,CAAC,EAAE,GAAG;YACN,CAAC,EAAE,GAAG;YACN,CAAC,EAAE,GAAG;SACP,CAAC;IACJ,CAAC;IAED,kFAAkF;IAClF,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACjB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACjB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACjB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACjB,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACjB,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAEjB,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAClC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;IACxB,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;IACzB,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;IACzB,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;IAExB,mDAAmD;IACnD,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE;QACvC,mBAAmB;QACnB,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC;QACzC,kCAAkC;QAClC,MAAM,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;QACtB,MAAM,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;QACvC,0EAA0E;QAC1E,uEAAuE;QACvE,OAAO;YACL,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC;YACnC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC;SACrC,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE1B,OAAO;QACL,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QAChB,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QAChB,EAAE,EAAE,GAAG,CAAC,CAAC;QACT,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QAChB,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QAChB,EAAE,EAAE,GAAG,CAAC,CAAC;KACV,CAAC;AACJ,CAAC;AAED,6EAA6E;AAC7E,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAEtC,MAAM,OAAO,qBAAqB;IACf,MAAM,CAAY;IAClB,MAAM,CAAmB;IACzB,IAAI,CAAW;IAEf,oBAAoB,CAAqB;IACzC,aAAa,CAAoB;IACjC,mBAAmB,CAAqB;IACxC,YAAY,CAAoB;IAChC,OAAO,CAAa;IACpB,UAAU,CAAS;IAE5B,SAAS,GAAsB,IAAI,CAAC;IACpC,SAAS,GAAsB,IAAI,CAAC;IACpC,OAAO,GAAG,CAAC,CAAC;IACZ,QAAQ,GAAG,CAAC,CAAC;IAErB,2EAA2E;IAC3E,4EAA4E;IAC5E,yEAAyE;IACzE,yDAAyD;IACjD,cAAc,GAAyB,EAAE,CAAC;IAC1C,SAAS,GAAG,CAAC,CAAC;IAEtB,YACE,MAAiB,EACjB,MAAwB,EACxB,MAAM,GAAqB,SAAS,EACpC,KAAK,GAAG,kBAAkB;QAE1B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAE5C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;YAClC,KAAK,EAAE,GAAG,KAAK,UAAU;YACzB,SAAS,EAAE,MAAM;YACjB,SAAS,EAAE,MAAM;YACjB,YAAY,EAAE,eAAe;YAC7B,YAAY,EAAE,eAAe;SAC9B,CAAC,CAAC;QAEH,yEAAyE;QACzE,wEAAwE;QACxE,6CAA6C;QAC7C,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAE1D,MAAM,WAAW,GAAG,MAAM,CAAC,kBAAkB,CAAC;YAC5C,KAAK,EAAE,GAAG,KAAK,aAAa;YAC5B,IAAI,EAAE,sBAAsB,GAAG,wBAAwB;SACxD,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,oBAAoB,CAAC;YAC/C,KAAK,EAAE,GAAG,KAAK,iBAAiB;YAChC,MAAM,EAAE,MAAM,CAAC,oBAAoB,CAAC;gBAClC,gBAAgB,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC;aAC9C,CAAC;YACF,MAAM,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE;YACtD,QAAQ,EAAE;gBACR,MAAM,EAAE,WAAW;gBACnB,UAAU,EAAE,UAAU;gBACtB,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;aACtB;YACD,SAAS,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE;SAC1C,CAAC,CAAC;QAEH,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACxD,MAAM,UAAU,GAAG,MAAM,CAAC,kBAAkB,CAAC;YAC3C,KAAK,EAAE,GAAG,KAAK,YAAY;YAC3B,IAAI,EAAE,sBAAsB,GAAG,aAAa;SAC7C,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,oBAAoB,CAAC;YAC9C,KAAK,EAAE,GAAG,KAAK,gBAAgB;YAC/B,MAAM,EAAE,MAAM,CAAC,oBAAoB,CAAC;gBAClC,gBAAgB,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC;aAC7C,CAAC;YACF,MAAM,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE;YACrD,QAAQ,EAAE;gBACR,MAAM,EAAE,UAAU;gBAClB,UAAU,EAAE,SAAS;gBACrB,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;aACtB;YACD,SAAS,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE;SAC1C,CAAC,CAAC;IACL,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,uEAAuE;IACvE,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,wEAAwE;IACxE,UAAU,CAAC,KAAa,EAAE,MAAc;QACtC,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;YACzE,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAClC,MAAM,KAAK,GACT,eAAe,CAAC,iBAAiB;YACjC,eAAe,CAAC,eAAe;YAC/B,eAAe,CAAC,QAAQ;YACxB,eAAe,CAAC,QAAQ,CAAC;QAC3B,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;YACzC,KAAK,EAAE,yBAAyB;YAChC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;YACrC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK;SACN,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;YACzC,KAAK,EAAE,yBAAyB;YAChC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;YACrC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK;SACN,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;IACzB,CAAC;IAED;;;OAGG;IACH,UAAU;QACR,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IACrB,CAAC;IAED;;;OAGG;IACH,eAAe,CACb,OAA0B,EAC1B,OAAmB,EACnB,QAAoB,EACpB,MAAuB;QAEvB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;QAC7B,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;QAC9C,MAAM,UAAU,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnE,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC7B,IAAI,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,aAAa,GAAG,IAAI,CAAC,IAAI;iBACtB,YAAY,CAAC,aAAa,CAAC;iBAC3B,MAAM,CAAC,SAAS,CAAC;iBACjB,KAAK,CAAC,4BAA4B,GAAG,EAAE,CAAC,CAAC;YAC5C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC;QAC3C,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,aAAa,CAAC,KAAK,CAAC;YAClB,OAAO,EAAE,CAAC,CAAC,KAAK,CACd,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,OAAO,CACf;YACD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3D,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3D,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,IAAI,CAAC,CAAC;YACvF,OAAO,EAAE,IAAI;gBACX,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAC;gBAC/E,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAC;SAClD,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;YAC5C,MAAM,EAAE,IAAI,CAAC,oBAAoB;YACjC,OAAO,EAAE;gBACP,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,EAAE;gBAC1D,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE;gBACpD,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,UAAU,EAAE,EAAE;gBAC9C,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE;aACvC;SACF,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC;YACnC,gBAAgB,EAAE;gBAChB,EAAE,IAAI,EAAE,QAAQ,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;aACnE;SACF,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACrC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACb,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,CAAC;IAED,0EAA0E;IAC1E,IAAI,CACF,OAA0B,EAC1B,MAAkB,EAClB,UAA0B;QAE1B,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;YAC5C,MAAM,EAAE,IAAI,CAAC,mBAAmB;YAChC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;SACzD,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC;YACnC,gBAAgB,EAAE;gBAChB,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;aACxD;SACF,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACpC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACb,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,CAAC;IAED,OAAO;QACL,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,uEAAuE;QACvE,qEAAqE;QACrE,yCAAyC;QACzC,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACtB,CAAC;CACF"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Headless layer compositing — the host-agnostic "composite N layers, read
|
|
3
|
+
* back pixels" path used by server-side / Node.js callers.
|
|
4
|
+
*
|
|
5
|
+
* It drives the same {@link WebGPULayerCompositor} the sketch editor and the
|
|
6
|
+
* timeline preview use, so the blend math is identical across browser and
|
|
7
|
+
* Node. The only thing that differs is the boundary: instead of presenting to
|
|
8
|
+
* a canvas, this acquires the final accumulation texture and copies it back to
|
|
9
|
+
* a CPU buffer. Decode (bytes → RGBA) and encode (RGBA → PNG/JPEG) are the
|
|
10
|
+
* caller's job — they stay in the codec layer, not here.
|
|
11
|
+
*
|
|
12
|
+
* Layers are stacked at (0, 0) at their native size against a canvas of the
|
|
13
|
+
* given dimensions (identity screen→texel map). The shader bounds-checks each
|
|
14
|
+
* layer, so layers smaller than the canvas leave the surrounding pixels
|
|
15
|
+
* untouched, and layers larger than the canvas are cropped to the top-left —
|
|
16
|
+
* matching a `top: 0, left: 0` paste.
|
|
17
|
+
*/
|
|
18
|
+
import { type LayerTransform2D } from "./transform.js";
|
|
19
|
+
/** One input layer: straight-alpha RGBA8 pixels plus per-layer state. */
|
|
20
|
+
export interface HeadlessLayer {
|
|
21
|
+
/** Straight (non-premultiplied) RGBA8, row-major, length = width*height*4. */
|
|
22
|
+
rgba: Uint8Array;
|
|
23
|
+
width: number;
|
|
24
|
+
height: number;
|
|
25
|
+
/** Layer opacity in [0, 1]. */
|
|
26
|
+
opacity: number;
|
|
27
|
+
/** Canonical blend-mode gpuId (see blendModes.ts). */
|
|
28
|
+
blendModeId: number;
|
|
29
|
+
/**
|
|
30
|
+
* Placement on the canvas. Omitted → the layer's top-left sits at the canvas
|
|
31
|
+
* origin at native size (an untransformed top-left paste).
|
|
32
|
+
*/
|
|
33
|
+
transform?: LayerTransform2D;
|
|
34
|
+
}
|
|
35
|
+
/** Composited output: straight-alpha RGBA8 at the requested canvas size. */
|
|
36
|
+
export interface HeadlessCompositeResult {
|
|
37
|
+
rgba: Uint8Array;
|
|
38
|
+
width: number;
|
|
39
|
+
height: number;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Composite `layers` (bottom-first) onto a transparent canvas and read the
|
|
43
|
+
* result back to a CPU buffer. Pure WebGPU given a `device`; works against a
|
|
44
|
+
* browser, Electron, or Node.js Dawn device alike.
|
|
45
|
+
*/
|
|
46
|
+
export declare function compositeLayersHeadless(device: GPUDevice, layers: HeadlessLayer[], canvasWidth: number, canvasHeight: number): Promise<HeadlessCompositeResult>;
|
|
47
|
+
//# sourceMappingURL=headless.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headless.d.ts","sourceRoot":"","sources":["../../src/compositor/headless.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AAExB,yEAAyE;AACzE,MAAM,WAAW,aAAa;IAC5B,8EAA8E;IAC9E,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,SAAS,CAAC,EAAE,gBAAgB,CAAC;CAC9B;AAED,4EAA4E;AAC5E,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAKD;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,aAAa,EAAE,EACvB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,uBAAuB,CAAC,CA8JlC"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Headless layer compositing — the host-agnostic "composite N layers, read
|
|
3
|
+
* back pixels" path used by server-side / Node.js callers.
|
|
4
|
+
*
|
|
5
|
+
* It drives the same {@link WebGPULayerCompositor} the sketch editor and the
|
|
6
|
+
* timeline preview use, so the blend math is identical across browser and
|
|
7
|
+
* Node. The only thing that differs is the boundary: instead of presenting to
|
|
8
|
+
* a canvas, this acquires the final accumulation texture and copies it back to
|
|
9
|
+
* a CPU buffer. Decode (bytes → RGBA) and encode (RGBA → PNG/JPEG) are the
|
|
10
|
+
* caller's job — they stay in the codec layer, not here.
|
|
11
|
+
*
|
|
12
|
+
* Layers are stacked at (0, 0) at their native size against a canvas of the
|
|
13
|
+
* given dimensions (identity screen→texel map). The shader bounds-checks each
|
|
14
|
+
* layer, so layers smaller than the canvas leave the surrounding pixels
|
|
15
|
+
* untouched, and layers larger than the canvas are cropped to the top-left —
|
|
16
|
+
* matching a `top: 0, left: 0` paste.
|
|
17
|
+
*/
|
|
18
|
+
import { WebGPULayerCompositor } from "./compositor.js";
|
|
19
|
+
import { FULLSCREEN_QUAD_VERTEX, UNPREMULTIPLY_FRAGMENT } from "./shaders.js";
|
|
20
|
+
import { defaultLayerTransform, layerTransformToInverseAffine } from "./transform.js";
|
|
21
|
+
/** `copyTextureToBuffer` requires a 256-byte-aligned `bytesPerRow`. */
|
|
22
|
+
const ROW_ALIGNMENT = 256;
|
|
23
|
+
/**
|
|
24
|
+
* Composite `layers` (bottom-first) onto a transparent canvas and read the
|
|
25
|
+
* result back to a CPU buffer. Pure WebGPU given a `device`; works against a
|
|
26
|
+
* browser, Electron, or Node.js Dawn device alike.
|
|
27
|
+
*/
|
|
28
|
+
export async function compositeLayersHeadless(device, layers, canvasWidth, canvasHeight) {
|
|
29
|
+
const width = Math.max(1, Math.floor(canvasWidth));
|
|
30
|
+
const height = Math.max(1, Math.floor(canvasHeight));
|
|
31
|
+
const format = "rgba8unorm";
|
|
32
|
+
const compositor = new WebGPULayerCompositor(device, format, "nearest");
|
|
33
|
+
compositor.ensureSize(width, height);
|
|
34
|
+
const texA = compositor.textureA;
|
|
35
|
+
const texB = compositor.textureB;
|
|
36
|
+
if (!texA || !texB) {
|
|
37
|
+
compositor.dispose();
|
|
38
|
+
throw new Error("Compositor failed to allocate accumulation textures");
|
|
39
|
+
}
|
|
40
|
+
const sources = [];
|
|
41
|
+
const encoder = device.createCommandEncoder({ label: "headless-composite" });
|
|
42
|
+
// Seed the read texture transparent so the first blend pass composites
|
|
43
|
+
// layer 0 over nothing.
|
|
44
|
+
const clear = encoder.beginRenderPass({
|
|
45
|
+
colorAttachments: [
|
|
46
|
+
{
|
|
47
|
+
view: texA.createView(),
|
|
48
|
+
loadOp: "clear",
|
|
49
|
+
clearValue: { r: 0, g: 0, b: 0, a: 0 },
|
|
50
|
+
storeOp: "store"
|
|
51
|
+
}
|
|
52
|
+
]
|
|
53
|
+
});
|
|
54
|
+
clear.end();
|
|
55
|
+
compositor.beginFrame();
|
|
56
|
+
let read = texA;
|
|
57
|
+
let write = texB;
|
|
58
|
+
for (const layer of layers) {
|
|
59
|
+
const lw = Math.max(1, Math.floor(layer.width));
|
|
60
|
+
const lh = Math.max(1, Math.floor(layer.height));
|
|
61
|
+
const source = device.createTexture({
|
|
62
|
+
label: "headless-composite-layer",
|
|
63
|
+
size: { width: lw, height: lh },
|
|
64
|
+
format,
|
|
65
|
+
usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST
|
|
66
|
+
});
|
|
67
|
+
// Re-wrap as an ArrayBuffer-backed view: `writeTexture` rejects
|
|
68
|
+
// SharedArrayBuffer-backed sources under the DOM WebGPU typings.
|
|
69
|
+
// SAFETY: narrows `ArrayBufferLike` to `ArrayBuffer` for the typings only.
|
|
70
|
+
// The wrap is a view over the same bytes and `writeTexture` copies out of
|
|
71
|
+
// it identically whichever buffer kind actually backs `layer.rgba`, and
|
|
72
|
+
// the explicit byteOffset/byteLength below keep the view's bounds.
|
|
73
|
+
const data = new Uint8Array(layer.rgba.buffer, layer.rgba.byteOffset, layer.rgba.byteLength);
|
|
74
|
+
device.queue.writeTexture({ texture: source }, data, { bytesPerRow: lw * 4, rowsPerImage: lh }, { width: lw, height: lh });
|
|
75
|
+
sources.push(source);
|
|
76
|
+
const transform = layer.transform ?? defaultLayerTransform(lw, lh, width, height);
|
|
77
|
+
compositor.renderBlendPass(encoder, read, write, {
|
|
78
|
+
source,
|
|
79
|
+
opacity: layer.opacity,
|
|
80
|
+
blendModeId: layer.blendModeId,
|
|
81
|
+
canvasW: width,
|
|
82
|
+
canvasH: height,
|
|
83
|
+
invAffine: layerTransformToInverseAffine(transform, lw, lh)
|
|
84
|
+
});
|
|
85
|
+
// Swap: the texture we just wrote becomes the next pass's read.
|
|
86
|
+
const next = read;
|
|
87
|
+
read = write;
|
|
88
|
+
write = next;
|
|
89
|
+
}
|
|
90
|
+
// `read` now holds the final composite (premultiplied). Resolve it to
|
|
91
|
+
// straight alpha on the GPU instead of un-premultiplying per pixel on the
|
|
92
|
+
// CPU: a full-screen pass that divides RGB by alpha, into its own texture.
|
|
93
|
+
const final = read;
|
|
94
|
+
const resolved = device.createTexture({
|
|
95
|
+
label: "headless-composite-resolved",
|
|
96
|
+
size: { width, height },
|
|
97
|
+
format,
|
|
98
|
+
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC
|
|
99
|
+
});
|
|
100
|
+
const resolveModule = device.createShaderModule({
|
|
101
|
+
label: "headless-composite-unpremultiply",
|
|
102
|
+
code: `${FULLSCREEN_QUAD_VERTEX}\n${UNPREMULTIPLY_FRAGMENT}`
|
|
103
|
+
});
|
|
104
|
+
const resolvePipeline = device.createRenderPipeline({
|
|
105
|
+
label: "headless-composite-unpremultiply",
|
|
106
|
+
layout: "auto",
|
|
107
|
+
vertex: { module: resolveModule, entryPoint: "vs_main" },
|
|
108
|
+
fragment: {
|
|
109
|
+
module: resolveModule,
|
|
110
|
+
entryPoint: "fs_unpremultiply",
|
|
111
|
+
targets: [{ format }]
|
|
112
|
+
},
|
|
113
|
+
primitive: { topology: "triangle-strip" }
|
|
114
|
+
});
|
|
115
|
+
const resolvePass = encoder.beginRenderPass({
|
|
116
|
+
colorAttachments: [
|
|
117
|
+
{
|
|
118
|
+
view: resolved.createView(),
|
|
119
|
+
loadOp: "clear",
|
|
120
|
+
clearValue: { r: 0, g: 0, b: 0, a: 0 },
|
|
121
|
+
storeOp: "store"
|
|
122
|
+
}
|
|
123
|
+
]
|
|
124
|
+
});
|
|
125
|
+
resolvePass.setPipeline(resolvePipeline);
|
|
126
|
+
resolvePass.setBindGroup(0, device.createBindGroup({
|
|
127
|
+
layout: resolvePipeline.getBindGroupLayout(0),
|
|
128
|
+
entries: [{ binding: 0, resource: final.createView() }]
|
|
129
|
+
}));
|
|
130
|
+
resolvePass.draw(4);
|
|
131
|
+
resolvePass.end();
|
|
132
|
+
const bytesPerRow = Math.ceil((width * 4) / ROW_ALIGNMENT) * ROW_ALIGNMENT;
|
|
133
|
+
const readback = device.createBuffer({
|
|
134
|
+
label: "headless-composite-readback",
|
|
135
|
+
size: bytesPerRow * height,
|
|
136
|
+
usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ
|
|
137
|
+
});
|
|
138
|
+
encoder.copyTextureToBuffer({ texture: resolved }, { buffer: readback, bytesPerRow, rowsPerImage: height }, { width, height });
|
|
139
|
+
device.queue.submit([encoder.finish()]);
|
|
140
|
+
await readback.mapAsync(GPUMapMode.READ);
|
|
141
|
+
const mapped = new Uint8Array(readback.getMappedRange());
|
|
142
|
+
// Pixels are already straight-alpha; just drop the 256-byte row padding
|
|
143
|
+
// `copyTextureToBuffer` requires (a per-row memcpy, no per-pixel math).
|
|
144
|
+
const rgba = new Uint8Array(width * height * 4);
|
|
145
|
+
const rowBytes = width * 4;
|
|
146
|
+
for (let row = 0; row < height; row++) {
|
|
147
|
+
rgba.set(mapped.subarray(row * bytesPerRow, row * bytesPerRow + rowBytes), row * rowBytes);
|
|
148
|
+
}
|
|
149
|
+
readback.unmap();
|
|
150
|
+
readback.destroy();
|
|
151
|
+
resolved.destroy();
|
|
152
|
+
for (const source of sources) {
|
|
153
|
+
source.destroy();
|
|
154
|
+
}
|
|
155
|
+
compositor.dispose();
|
|
156
|
+
return { rgba, width, height };
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=headless.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headless.js","sourceRoot":"","sources":["../../src/compositor/headless.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EACL,qBAAqB,EACrB,6BAA6B,EAE9B,MAAM,gBAAgB,CAAC;AA0BxB,uEAAuE;AACvE,MAAM,aAAa,GAAG,GAAG,CAAC;AAE1B;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAAiB,EACjB,MAAuB,EACvB,WAAmB,EACnB,YAAoB;IAEpB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IACrD,MAAM,MAAM,GAAqB,YAAY,CAAC;IAE9C,MAAM,UAAU,GAAG,IAAI,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACxE,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC;IACjC,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC;IACjC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACnB,UAAU,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,MAAM,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAE7E,uEAAuE;IACvE,wBAAwB;IACxB,MAAM,KAAK,GAAG,OAAO,CAAC,eAAe,CAAC;QACpC,gBAAgB,EAAE;YAChB;gBACE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE;gBACvB,MAAM,EAAE,OAAO;gBACf,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;gBACtC,OAAO,EAAE,OAAO;aACjB;SACF;KACF,CAAC,CAAC;IACH,KAAK,CAAC,GAAG,EAAE,CAAC;IAEZ,UAAU,CAAC,UAAU,EAAE,CAAC;IACxB,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAChD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;YAClC,KAAK,EAAE,0BAA0B;YACjC,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YAC/B,MAAM;YACN,KAAK,EAAE,eAAe,CAAC,eAAe,GAAG,eAAe,CAAC,QAAQ;SAClE,CAAC,CAAC;QACH,gEAAgE;QAChE,iEAAiE;QACjE,2EAA2E;QAC3E,0EAA0E;QAC1E,wEAAwE;QACxE,mEAAmE;QACnE,MAAM,IAAI,GAAG,IAAI,UAAU,CACzB,KAAK,CAAC,IAAI,CAAC,MAAqB,EAChC,KAAK,CAAC,IAAI,CAAC,UAAU,EACrB,KAAK,CAAC,IAAI,CAAC,UAAU,CACtB,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,YAAY,CACvB,EAAE,OAAO,EAAE,MAAM,EAAE,EACnB,IAAI,EACJ,EAAE,WAAW,EAAE,EAAE,GAAG,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EACzC,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAC1B,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAErB,MAAM,SAAS,GACb,KAAK,CAAC,SAAS,IAAI,qBAAqB,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAClE,UAAU,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE;YAC/C,MAAM;YACN,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,MAAM;YACf,SAAS,EAAE,6BAA6B,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC;SAC5D,CAAC,CAAC;QACH,gEAAgE;QAChE,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,IAAI,GAAG,KAAK,CAAC;QACb,KAAK,GAAG,IAAI,CAAC;IACf,CAAC;IAED,sEAAsE;IACtE,0EAA0E;IAC1E,2EAA2E;IAC3E,MAAM,KAAK,GAAG,IAAI,CAAC;IACnB,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC;QACpC,KAAK,EAAE,6BAA6B;QACpC,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;QACvB,MAAM;QACN,KAAK,EAAE,eAAe,CAAC,iBAAiB,GAAG,eAAe,CAAC,QAAQ;KACpE,CAAC,CAAC;IACH,MAAM,aAAa,GAAG,MAAM,CAAC,kBAAkB,CAAC;QAC9C,KAAK,EAAE,kCAAkC;QACzC,IAAI,EAAE,GAAG,sBAAsB,KAAK,sBAAsB,EAAE;KAC7D,CAAC,CAAC;IACH,MAAM,eAAe,GAAG,MAAM,CAAC,oBAAoB,CAAC;QAClD,KAAK,EAAE,kCAAkC;QACzC,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE;QACxD,QAAQ,EAAE;YACR,MAAM,EAAE,aAAa;YACrB,UAAU,EAAE,kBAAkB;YAC9B,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;SACtB;QACD,SAAS,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE;KAC1C,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;QAC1C,gBAAgB,EAAE;YAChB;gBACE,IAAI,EAAE,QAAQ,CAAC,UAAU,EAAE;gBAC3B,MAAM,EAAE,OAAO;gBACf,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;gBACtC,OAAO,EAAE,OAAO;aACjB;SACF;KACF,CAAC,CAAC;IACH,WAAW,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IACzC,WAAW,CAAC,YAAY,CACtB,CAAC,EACD,MAAM,CAAC,eAAe,CAAC;QACrB,MAAM,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC7C,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC;KACxD,CAAC,CACH,CAAC;IACF,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,WAAW,CAAC,GAAG,EAAE,CAAC;IAElB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,GAAG,aAAa,CAAC;IAC3E,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC;QACnC,KAAK,EAAE,6BAA6B;QACpC,IAAI,EAAE,WAAW,GAAG,MAAM;QAC1B,KAAK,EAAE,cAAc,CAAC,QAAQ,GAAG,cAAc,CAAC,QAAQ;KACzD,CAAC,CAAC;IACH,OAAO,CAAC,mBAAmB,CACzB,EAAE,OAAO,EAAE,QAAQ,EAAE,EACrB,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,EACvD,EAAE,KAAK,EAAE,MAAM,EAAE,CAClB,CAAC;IACF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACxC,MAAM,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC;IACzD,wEAAwE;IACxE,wEAAwE;IACxE,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC;IAC3B,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;QACtC,IAAI,CAAC,GAAG,CACN,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,WAAW,EAAE,GAAG,GAAG,WAAW,GAAG,QAAQ,CAAC,EAChE,GAAG,GAAG,QAAQ,CACf,CAAC;IACJ,CAAC;IACD,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,QAAQ,CAAC,OAAO,EAAE,CAAC;IACnB,QAAQ,CAAC,OAAO,EAAE,CAAC;IAEnB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;IACD,UAAU,CAAC,OAAO,EAAE,CAAC;IAErB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/compositor/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/compositor/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC"}
|