@flighthq/effects-canvas 0.3.0-next.906.07cea63 → 0.3.0

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.
Files changed (269) hide show
  1. package/dist/canvasBevelEffect.d.ts +7 -0
  2. package/dist/canvasBevelEffect.d.ts.map +1 -0
  3. package/dist/canvasBevelEffect.js +76 -0
  4. package/dist/canvasBevelEffect.js.map +1 -0
  5. package/dist/canvasBlendEffect.d.ts +9 -0
  6. package/dist/canvasBlendEffect.d.ts.map +1 -0
  7. package/dist/canvasBlendEffect.js +89 -0
  8. package/dist/canvasBlendEffect.js.map +1 -0
  9. package/dist/canvasBloomEffect.d.ts +2 -1
  10. package/dist/canvasBloomEffect.d.ts.map +1 -1
  11. package/dist/canvasBloomEffect.js +4 -0
  12. package/dist/canvasBloomEffect.js.map +1 -1
  13. package/dist/canvasBlurEffect.d.ts +2 -1
  14. package/dist/canvasBlurEffect.d.ts.map +1 -1
  15. package/dist/canvasBlurEffect.js +4 -0
  16. package/dist/canvasBlurEffect.js.map +1 -1
  17. package/dist/canvasColorMatrixPass.d.ts +1 -0
  18. package/dist/canvasColorMatrixPass.d.ts.map +1 -1
  19. package/dist/canvasColorMatrixPass.js +22 -16
  20. package/dist/canvasColorMatrixPass.js.map +1 -1
  21. package/dist/canvasCompositeEffect.d.ts +6 -0
  22. package/dist/canvasCompositeEffect.d.ts.map +1 -0
  23. package/dist/canvasCompositeEffect.js +71 -0
  24. package/dist/canvasCompositeEffect.js.map +1 -0
  25. package/dist/canvasDropShadowEffect.d.ts +2 -1
  26. package/dist/canvasDropShadowEffect.d.ts.map +1 -1
  27. package/dist/canvasDropShadowEffect.js +4 -0
  28. package/dist/canvasDropShadowEffect.js.map +1 -1
  29. package/dist/canvasFilmGrainEffect.d.ts +2 -1
  30. package/dist/canvasFilmGrainEffect.d.ts.map +1 -1
  31. package/dist/canvasFilmGrainEffect.js +4 -0
  32. package/dist/canvasFilmGrainEffect.js.map +1 -1
  33. package/dist/canvasGradientBevelEffect.d.ts +6 -0
  34. package/dist/canvasGradientBevelEffect.d.ts.map +1 -0
  35. package/dist/canvasGradientBevelEffect.js +62 -0
  36. package/dist/canvasGradientBevelEffect.js.map +1 -0
  37. package/dist/canvasGradientGlowEffect.d.ts +6 -0
  38. package/dist/canvasGradientGlowEffect.d.ts.map +1 -0
  39. package/dist/canvasGradientGlowEffect.js +36 -0
  40. package/dist/canvasGradientGlowEffect.js.map +1 -0
  41. package/dist/canvasGradientRamp.d.ts +4 -0
  42. package/dist/canvasGradientRamp.d.ts.map +1 -0
  43. package/dist/canvasGradientRamp.js +75 -0
  44. package/dist/canvasGradientRamp.js.map +1 -0
  45. package/dist/canvasInnerGlowEffect.d.ts +6 -0
  46. package/dist/canvasInnerGlowEffect.d.ts.map +1 -0
  47. package/dist/canvasInnerGlowEffect.js +37 -0
  48. package/dist/canvasInnerGlowEffect.js.map +1 -0
  49. package/dist/canvasInnerShadowEffect.d.ts +6 -0
  50. package/dist/canvasInnerShadowEffect.d.ts.map +1 -0
  51. package/dist/canvasInnerShadowEffect.js +43 -0
  52. package/dist/canvasInnerShadowEffect.js.map +1 -0
  53. package/dist/canvasOuterGlowEffect.d.ts +2 -1
  54. package/dist/canvasOuterGlowEffect.d.ts.map +1 -1
  55. package/dist/canvasOuterGlowEffect.js +4 -0
  56. package/dist/canvasOuterGlowEffect.js.map +1 -1
  57. package/dist/canvasPixelateEffect.d.ts +2 -1
  58. package/dist/canvasPixelateEffect.d.ts.map +1 -1
  59. package/dist/canvasPixelateEffect.js +4 -0
  60. package/dist/canvasPixelateEffect.js.map +1 -1
  61. package/dist/canvasRenderEffectPipeline.d.ts.map +1 -1
  62. package/dist/canvasRenderEffectPipeline.js +9 -3
  63. package/dist/canvasRenderEffectPipeline.js.map +1 -1
  64. package/dist/canvasRenderEffectRegistry.d.ts.map +1 -1
  65. package/dist/canvasRenderEffectRegistry.js +9 -12
  66. package/dist/canvasRenderEffectRegistry.js.map +1 -1
  67. package/dist/canvasRenderTextureEffect.d.ts +3 -0
  68. package/dist/canvasRenderTextureEffect.d.ts.map +1 -0
  69. package/dist/canvasRenderTextureEffect.js +31 -0
  70. package/dist/canvasRenderTextureEffect.js.map +1 -0
  71. package/dist/canvasScanlinesEffect.d.ts +2 -1
  72. package/dist/canvasScanlinesEffect.d.ts.map +1 -1
  73. package/dist/canvasScanlinesEffect.js +4 -0
  74. package/dist/canvasScanlinesEffect.js.map +1 -1
  75. package/dist/canvasSourceModeCompositing.d.ts +1 -0
  76. package/dist/canvasSourceModeCompositing.d.ts.map +1 -1
  77. package/dist/canvasSourceModeCompositing.js +24 -0
  78. package/dist/canvasSourceModeCompositing.js.map +1 -1
  79. package/dist/canvasVignetteEffect.d.ts +2 -1
  80. package/dist/canvasVignetteEffect.d.ts.map +1 -1
  81. package/dist/canvasVignetteEffect.js +4 -0
  82. package/dist/canvasVignetteEffect.js.map +1 -1
  83. package/dist/contract.d.ts +9 -31
  84. package/dist/contract.d.ts.map +1 -1
  85. package/dist/contract.js +9 -31
  86. package/dist/contract.js.map +1 -1
  87. package/dist/index.d.ts +1 -1
  88. package/dist/index.d.ts.map +1 -1
  89. package/dist/index.js +1 -1
  90. package/dist/index.js.map +1 -1
  91. package/package.json +8 -6
  92. package/src/canvasBevelEffect.test.ts +212 -0
  93. package/src/canvasBlendEffect.test.ts +235 -0
  94. package/src/canvasBloomEffect.test.ts +9 -1
  95. package/src/canvasBlurEffect.test.ts +12 -1
  96. package/src/canvasColorMatrixPass.test.ts +61 -11
  97. package/src/canvasCompositeEffect.test.ts +181 -0
  98. package/src/canvasDropShadowEffect.test.ts +15 -8
  99. package/src/canvasEffectRegistration.test.ts +27 -0
  100. package/src/canvasFilmGrainEffect.test.ts +9 -1
  101. package/src/canvasGradientBevelEffect.test.ts +180 -0
  102. package/src/canvasGradientGlowEffect.test.ts +125 -0
  103. package/src/canvasGradientRamp.test.ts +98 -0
  104. package/src/canvasInnerGlowEffect.test.ts +152 -0
  105. package/src/canvasInnerShadowEffect.test.ts +173 -0
  106. package/src/canvasOuterGlowEffect.test.ts +15 -8
  107. package/src/canvasPixelateEffect.test.ts +9 -1
  108. package/src/canvasRealizedEffectRegistration.test.ts +30 -0
  109. package/src/canvasRenderEffectPipeline.test.ts +38 -0
  110. package/src/canvasRenderEffectRegistry.test.ts +10 -9
  111. package/src/canvasRenderTextureEffect.test.ts +73 -0
  112. package/src/canvasScanlinesEffect.test.ts +9 -1
  113. package/src/canvasSourceModeCompositing.test.ts +40 -0
  114. package/src/canvasVignetteEffect.test.ts +9 -1
  115. package/dist/canvasBokehDepthOfFieldEffect.d.ts +0 -4
  116. package/dist/canvasBokehDepthOfFieldEffect.d.ts.map +0 -1
  117. package/dist/canvasBokehDepthOfFieldEffect.js +0 -10
  118. package/dist/canvasBokehDepthOfFieldEffect.js.map +0 -1
  119. package/dist/canvasCameraMotionBlurEffect.d.ts +0 -4
  120. package/dist/canvasCameraMotionBlurEffect.d.ts.map +0 -1
  121. package/dist/canvasCameraMotionBlurEffect.js +0 -11
  122. package/dist/canvasCameraMotionBlurEffect.js.map +0 -1
  123. package/dist/canvasChromaticAberrationEffect.d.ts +0 -4
  124. package/dist/canvasChromaticAberrationEffect.d.ts.map +0 -1
  125. package/dist/canvasChromaticAberrationEffect.js +0 -11
  126. package/dist/canvasChromaticAberrationEffect.js.map +0 -1
  127. package/dist/canvasConvolutionEffect.d.ts +0 -4
  128. package/dist/canvasConvolutionEffect.d.ts.map +0 -1
  129. package/dist/canvasConvolutionEffect.js +0 -11
  130. package/dist/canvasConvolutionEffect.js.map +0 -1
  131. package/dist/canvasCrtEffect.d.ts +0 -4
  132. package/dist/canvasCrtEffect.d.ts.map +0 -1
  133. package/dist/canvasCrtEffect.js +0 -11
  134. package/dist/canvasCrtEffect.js.map +0 -1
  135. package/dist/canvasDirectionalBlurEffect.d.ts +0 -4
  136. package/dist/canvasDirectionalBlurEffect.d.ts.map +0 -1
  137. package/dist/canvasDirectionalBlurEffect.js +0 -11
  138. package/dist/canvasDirectionalBlurEffect.js.map +0 -1
  139. package/dist/canvasDisplacementEffect.d.ts +0 -4
  140. package/dist/canvasDisplacementEffect.d.ts.map +0 -1
  141. package/dist/canvasDisplacementEffect.js +0 -10
  142. package/dist/canvasDisplacementEffect.js.map +0 -1
  143. package/dist/canvasDitherEffect.d.ts +0 -4
  144. package/dist/canvasDitherEffect.d.ts.map +0 -1
  145. package/dist/canvasDitherEffect.js +0 -11
  146. package/dist/canvasDitherEffect.js.map +0 -1
  147. package/dist/canvasFxaaEffect.d.ts +0 -4
  148. package/dist/canvasFxaaEffect.d.ts.map +0 -1
  149. package/dist/canvasFxaaEffect.js +0 -11
  150. package/dist/canvasFxaaEffect.js.map +0 -1
  151. package/dist/canvasGlitchEffect.d.ts +0 -4
  152. package/dist/canvasGlitchEffect.d.ts.map +0 -1
  153. package/dist/canvasGlitchEffect.js +0 -11
  154. package/dist/canvasGlitchEffect.js.map +0 -1
  155. package/dist/canvasGodRaysEffect.d.ts +0 -4
  156. package/dist/canvasGodRaysEffect.d.ts.map +0 -1
  157. package/dist/canvasGodRaysEffect.js +0 -11
  158. package/dist/canvasGodRaysEffect.js.map +0 -1
  159. package/dist/canvasHalftoneEffect.d.ts +0 -4
  160. package/dist/canvasHalftoneEffect.d.ts.map +0 -1
  161. package/dist/canvasHalftoneEffect.js +0 -10
  162. package/dist/canvasHalftoneEffect.js.map +0 -1
  163. package/dist/canvasKuwaharaEffect.d.ts +0 -4
  164. package/dist/canvasKuwaharaEffect.d.ts.map +0 -1
  165. package/dist/canvasKuwaharaEffect.js +0 -11
  166. package/dist/canvasKuwaharaEffect.js.map +0 -1
  167. package/dist/canvasLensDirtEffect.d.ts +0 -4
  168. package/dist/canvasLensDirtEffect.d.ts.map +0 -1
  169. package/dist/canvasLensDirtEffect.js +0 -11
  170. package/dist/canvasLensDirtEffect.js.map +0 -1
  171. package/dist/canvasLensDistortionEffect.d.ts +0 -4
  172. package/dist/canvasLensDistortionEffect.d.ts.map +0 -1
  173. package/dist/canvasLensDistortionEffect.js +0 -10
  174. package/dist/canvasLensDistortionEffect.js.map +0 -1
  175. package/dist/canvasLensFlareEffect.d.ts +0 -4
  176. package/dist/canvasLensFlareEffect.d.ts.map +0 -1
  177. package/dist/canvasLensFlareEffect.js +0 -11
  178. package/dist/canvasLensFlareEffect.js.map +0 -1
  179. package/dist/canvasMedianEffect.d.ts +0 -4
  180. package/dist/canvasMedianEffect.d.ts.map +0 -1
  181. package/dist/canvasMedianEffect.js +0 -11
  182. package/dist/canvasMedianEffect.js.map +0 -1
  183. package/dist/canvasMotionBlurEffect.d.ts +0 -4
  184. package/dist/canvasMotionBlurEffect.d.ts.map +0 -1
  185. package/dist/canvasMotionBlurEffect.js +0 -11
  186. package/dist/canvasMotionBlurEffect.js.map +0 -1
  187. package/dist/canvasOutlineEffect.d.ts +0 -4
  188. package/dist/canvasOutlineEffect.d.ts.map +0 -1
  189. package/dist/canvasOutlineEffect.js +0 -11
  190. package/dist/canvasOutlineEffect.js.map +0 -1
  191. package/dist/canvasPosterizeEffect.d.ts +0 -4
  192. package/dist/canvasPosterizeEffect.d.ts.map +0 -1
  193. package/dist/canvasPosterizeEffect.js +0 -10
  194. package/dist/canvasPosterizeEffect.js.map +0 -1
  195. package/dist/canvasRadialBlurEffect.d.ts +0 -4
  196. package/dist/canvasRadialBlurEffect.d.ts.map +0 -1
  197. package/dist/canvasRadialBlurEffect.js +0 -11
  198. package/dist/canvasRadialBlurEffect.js.map +0 -1
  199. package/dist/canvasScreenSpaceFogEffect.d.ts +0 -4
  200. package/dist/canvasScreenSpaceFogEffect.d.ts.map +0 -1
  201. package/dist/canvasScreenSpaceFogEffect.js +0 -10
  202. package/dist/canvasScreenSpaceFogEffect.js.map +0 -1
  203. package/dist/canvasSharpenEffect.d.ts +0 -4
  204. package/dist/canvasSharpenEffect.d.ts.map +0 -1
  205. package/dist/canvasSharpenEffect.js +0 -11
  206. package/dist/canvasSharpenEffect.js.map +0 -1
  207. package/dist/canvasSketchEffect.d.ts +0 -4
  208. package/dist/canvasSketchEffect.d.ts.map +0 -1
  209. package/dist/canvasSketchEffect.js +0 -11
  210. package/dist/canvasSketchEffect.js.map +0 -1
  211. package/dist/canvasSmaaEffect.d.ts +0 -4
  212. package/dist/canvasSmaaEffect.d.ts.map +0 -1
  213. package/dist/canvasSmaaEffect.js +0 -11
  214. package/dist/canvasSmaaEffect.js.map +0 -1
  215. package/dist/canvasSsaoEffect.d.ts +0 -4
  216. package/dist/canvasSsaoEffect.d.ts.map +0 -1
  217. package/dist/canvasSsaoEffect.js +0 -11
  218. package/dist/canvasSsaoEffect.js.map +0 -1
  219. package/dist/canvasSsrEffect.d.ts +0 -4
  220. package/dist/canvasSsrEffect.d.ts.map +0 -1
  221. package/dist/canvasSsrEffect.js +0 -11
  222. package/dist/canvasSsrEffect.js.map +0 -1
  223. package/dist/canvasTaaEffect.d.ts +0 -4
  224. package/dist/canvasTaaEffect.d.ts.map +0 -1
  225. package/dist/canvasTaaEffect.js +0 -11
  226. package/dist/canvasTaaEffect.js.map +0 -1
  227. package/dist/canvasTiltShiftEffect.d.ts +0 -4
  228. package/dist/canvasTiltShiftEffect.d.ts.map +0 -1
  229. package/dist/canvasTiltShiftEffect.js +0 -11
  230. package/dist/canvasTiltShiftEffect.js.map +0 -1
  231. package/dist/canvasToneMapEffect.d.ts +0 -4
  232. package/dist/canvasToneMapEffect.d.ts.map +0 -1
  233. package/dist/canvasToneMapEffect.js +0 -12
  234. package/dist/canvasToneMapEffect.js.map +0 -1
  235. package/dist/canvasWhiteBalanceEffect.d.ts +0 -4
  236. package/dist/canvasWhiteBalanceEffect.d.ts.map +0 -1
  237. package/dist/canvasWhiteBalanceEffect.js +0 -11
  238. package/dist/canvasWhiteBalanceEffect.js.map +0 -1
  239. package/src/canvasBokehDepthOfFieldEffect.test.ts +0 -16
  240. package/src/canvasCameraMotionBlurEffect.test.ts +0 -16
  241. package/src/canvasChromaticAberrationEffect.test.ts +0 -16
  242. package/src/canvasConvolutionEffect.test.ts +0 -13
  243. package/src/canvasCrtEffect.test.ts +0 -13
  244. package/src/canvasDirectionalBlurEffect.test.ts +0 -16
  245. package/src/canvasDisplacementEffect.test.ts +0 -13
  246. package/src/canvasDitherEffect.test.ts +0 -13
  247. package/src/canvasFxaaEffect.test.ts +0 -13
  248. package/src/canvasGlitchEffect.test.ts +0 -13
  249. package/src/canvasGodRaysEffect.test.ts +0 -13
  250. package/src/canvasHalftoneEffect.test.ts +0 -13
  251. package/src/canvasKuwaharaEffect.test.ts +0 -13
  252. package/src/canvasLensDirtEffect.test.ts +0 -13
  253. package/src/canvasLensDistortionEffect.test.ts +0 -16
  254. package/src/canvasLensFlareEffect.test.ts +0 -13
  255. package/src/canvasMedianEffect.test.ts +0 -13
  256. package/src/canvasMotionBlurEffect.test.ts +0 -13
  257. package/src/canvasOutlineEffect.test.ts +0 -13
  258. package/src/canvasPosterizeEffect.test.ts +0 -13
  259. package/src/canvasRadialBlurEffect.test.ts +0 -13
  260. package/src/canvasScreenSpaceFogEffect.test.ts +0 -16
  261. package/src/canvasSharpenEffect.test.ts +0 -13
  262. package/src/canvasSketchEffect.test.ts +0 -13
  263. package/src/canvasSmaaEffect.test.ts +0 -13
  264. package/src/canvasSsaoEffect.test.ts +0 -13
  265. package/src/canvasSsrEffect.test.ts +0 -13
  266. package/src/canvasTaaEffect.test.ts +0 -13
  267. package/src/canvasTiltShiftEffect.test.ts +0 -13
  268. package/src/canvasToneMapEffect.test.ts +0 -13
  269. package/src/canvasWhiteBalanceEffect.test.ts +0 -13
@@ -0,0 +1,62 @@
1
+ import { clipCanvasBevelBand } from './canvasBevelEffect';
2
+ import { drawCanvasEffectPass } from './canvasEffectCompositing';
3
+ import { applyCanvasGradientRampLookup, buildCanvasGradientRamp } from './canvasGradientRamp';
4
+ import { acquireCanvasRenderTarget, createCanvasRenderTargetPool, releaseCanvasRenderTarget, } from './canvasRenderEffectPipeline';
5
+ import { registerCanvasRenderEffect } from './canvasRenderEffectRegistry';
6
+ import { clearCanvasTarget, compositeCanvasImage } from './canvasSourceModeCompositing';
7
+ export function applyGradientBevelEffectToCanvas(source, dest, poolOrEffect, maybeEffect) {
8
+ const effect = maybeEffect ?? poolOrEffect;
9
+ const pool = maybeEffect === undefined ? createCanvasRenderTargetPool() : poolOrEffect;
10
+ applyGradientBevelEffectToCanvasWithPool(source, dest, pool, effect);
11
+ }
12
+ export const defaultCanvasGradientBevelEffectRunner = (ctx, effect) => {
13
+ applyGradientBevelEffectToCanvas(ctx.source, ctx.dest, ctx.pool, effect);
14
+ };
15
+ export function registerCanvasGradientBevelEffect(state) {
16
+ registerCanvasRenderEffect(state, 'GradientBevelEffect', defaultCanvasGradientBevelEffectRunner);
17
+ }
18
+ function applyGradientBevelEffectToCanvasWithPool(source, dest, pool, effect) {
19
+ const blurred = acquireCanvasRenderTarget(pool, source.width, source.height);
20
+ const lit = acquireCanvasRenderTarget(pool, source.width, source.height);
21
+ const shade = acquireCanvasRenderTarget(pool, source.width, source.height);
22
+ const side = acquireCanvasRenderTarget(pool, source.width, source.height);
23
+ const ramped = acquireCanvasRenderTarget(pool, source.width, source.height);
24
+ const band = acquireCanvasRenderTarget(pool, source.width, source.height);
25
+ const blur = Math.max(0, ((effect.blurX ?? 4) + (effect.blurY ?? 4)) / 2);
26
+ const angle = ((effect.angle ?? 45) * Math.PI) / 180;
27
+ const distance = effect.distance ?? 4;
28
+ const offsetX = Math.cos(angle) * distance;
29
+ const offsetY = Math.sin(angle) * distance;
30
+ const strength = Math.min(1, effect.strength ?? 1);
31
+ const ramp = buildCanvasGradientRamp(effect.colors, effect.alphas, effect.ratios);
32
+ drawCanvasEffectPass(blurred, source, blur > 0 ? `blur(${blur}px)` : 'none');
33
+ clearCanvasTarget(lit);
34
+ compositeCanvasImage(lit, blurred, -offsetX, -offsetY);
35
+ clearCanvasTarget(shade);
36
+ compositeCanvasImage(shade, blurred, offsetX, offsetY);
37
+ clearCanvasTarget(band);
38
+ // Highlight side reads the ramp upward from its midpoint.
39
+ clearCanvasTarget(side);
40
+ compositeCanvasImage(side, lit);
41
+ compositeCanvasImage(side, shade, 0, 0, 'destination-out');
42
+ applyCanvasGradientRampLookup(ramped, side, ramp, 0.5, 0.5 * strength);
43
+ compositeCanvasImage(band, ramped);
44
+ // Shadow side reads the same ramp downward from the midpoint, so one ramp spans both halves.
45
+ clearCanvasTarget(side);
46
+ compositeCanvasImage(side, shade);
47
+ compositeCanvasImage(side, lit, 0, 0, 'destination-out');
48
+ applyCanvasGradientRampLookup(ramped, side, ramp, 0.5, -0.5 * strength);
49
+ compositeCanvasImage(band, ramped);
50
+ clipCanvasBevelBand(band, source, effect.bevelType);
51
+ clearCanvasTarget(dest);
52
+ if ((effect.sourceMode ?? 'draw') !== 'hide')
53
+ compositeCanvasImage(dest, source);
54
+ compositeCanvasImage(dest, band);
55
+ releaseCanvasRenderTarget(pool, band);
56
+ releaseCanvasRenderTarget(pool, ramped);
57
+ releaseCanvasRenderTarget(pool, side);
58
+ releaseCanvasRenderTarget(pool, shade);
59
+ releaseCanvasRenderTarget(pool, lit);
60
+ releaseCanvasRenderTarget(pool, blurred);
61
+ }
62
+ //# sourceMappingURL=canvasGradientBevelEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasGradientBevelEffect.js","sourceRoot":"","sources":["../src/canvasGradientBevelEffect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { CanvasRenderEffectRunner, CanvasRenderState, CanvasRenderTarget, CanvasRenderTargetPool, GradientGlowEffect } from '@flighthq/types/contract';
2
+ export declare function applyGradientGlowEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, effect: Readonly<GradientGlowEffect>): void;
3
+ export declare function applyGradientGlowEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, pool: CanvasRenderTargetPool, effect: Readonly<GradientGlowEffect>): void;
4
+ export declare const defaultCanvasGradientGlowEffectRunner: CanvasRenderEffectRunner;
5
+ export declare function registerCanvasGradientGlowEffect(state: CanvasRenderState): void;
6
+ //# sourceMappingURL=canvasGradientGlowEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasGradientGlowEffect.d.ts","sourceRoot":"","sources":["../src/canvasGradientGlowEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAmBlC,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,GACnC,IAAI,CAAC;AACR,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,IAAI,EAAE,sBAAsB,EAC5B,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,GACnC,IAAI,CAAC;AAYR,eAAO,MAAM,qCAAqC,EAAE,wBAEnD,CAAC;AAEF,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAE/E"}
@@ -0,0 +1,36 @@
1
+ import { drawCanvasEffectPass } from './canvasEffectCompositing';
2
+ import { applyCanvasGradientRampLookup, buildCanvasGradientRamp } from './canvasGradientRamp';
3
+ import { acquireCanvasRenderTarget, createCanvasRenderTargetPool, releaseCanvasRenderTarget, } from './canvasRenderEffectPipeline';
4
+ import { registerCanvasRenderEffect } from './canvasRenderEffectRegistry';
5
+ import { clearCanvasTarget, compositeCanvasImage } from './canvasSourceModeCompositing';
6
+ export function applyGradientGlowEffectToCanvas(source, dest, poolOrEffect, maybeEffect) {
7
+ const effect = maybeEffect ?? poolOrEffect;
8
+ const pool = maybeEffect === undefined ? createCanvasRenderTargetPool() : poolOrEffect;
9
+ applyGradientGlowEffectToCanvasWithPool(source, dest, pool, effect);
10
+ }
11
+ export const defaultCanvasGradientGlowEffectRunner = (ctx, effect) => {
12
+ applyGradientGlowEffectToCanvas(ctx.source, ctx.dest, ctx.pool, effect);
13
+ };
14
+ export function registerCanvasGradientGlowEffect(state) {
15
+ registerCanvasRenderEffect(state, 'GradientGlowEffect', defaultCanvasGradientGlowEffectRunner);
16
+ }
17
+ function applyGradientGlowEffectToCanvasWithPool(source, dest, pool, effect) {
18
+ const blurred = acquireCanvasRenderTarget(pool, source.width, source.height);
19
+ const glow = acquireCanvasRenderTarget(pool, source.width, source.height);
20
+ const strength = effect.strength ?? 1;
21
+ const glowPasses = Math.max(1, Math.floor(strength));
22
+ const blur = Math.max(0, ((effect.blurX ?? 6) + (effect.blurY ?? 6)) / 2);
23
+ const ramp = buildCanvasGradientRamp(effect.colors, effect.alphas, effect.ratios);
24
+ drawCanvasEffectPass(blurred, source, blur > 0 ? `blur(${blur}px)` : 'none');
25
+ applyCanvasGradientRampLookup(glow, blurred, ramp);
26
+ clearCanvasTarget(dest);
27
+ // The glow goes down FIRST and the source over it — this is an outer effect, so the shape occludes the
28
+ // part of the glow that falls under it.
29
+ for (let i = 0; i < glowPasses; i++)
30
+ compositeCanvasImage(dest, glow);
31
+ if ((effect.sourceMode ?? 'draw') !== 'hide')
32
+ compositeCanvasImage(dest, source);
33
+ releaseCanvasRenderTarget(pool, glow);
34
+ releaseCanvasRenderTarget(pool, blurred);
35
+ }
36
+ //# sourceMappingURL=canvasGradientGlowEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasGradientGlowEffect.js","sourceRoot":"","sources":["../src/canvasGradientGlowEffect.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,6BAA6B,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC9F,OAAO,EACL,yBAAyB,EACzB,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAoBxF,MAAM,UAAU,+BAA+B,CAC7C,MAAoC,EACpC,IAAkC,EAClC,YAAmE,EACnE,WAA0C;IAE1C,MAAM,MAAM,GAAG,WAAW,IAAK,YAA6C,CAAC;IAC7E,MAAM,IAAI,GAAG,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,4BAA4B,EAAE,CAAC,CAAC,CAAE,YAAuC,CAAC;IACnH,uCAAuC,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,CAAC,MAAM,qCAAqC,GAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IAC7F,+BAA+B,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAA4B,CAAC,CAAC;AAChG,CAAC,CAAC;AAEF,MAAM,UAAU,gCAAgC,CAAC,KAAwB;IACvE,0BAA0B,CAAC,KAAK,EAAE,oBAAoB,EAAE,qCAAqC,CAAC,CAAC;AACjG,CAAC;AAED,SAAS,uCAAuC,CAC9C,MAAoC,EACpC,IAAkC,EAClC,IAA4B,EAC5B,MAAoC;IAEpC,MAAM,OAAO,GAAG,yBAAyB,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7E,MAAM,IAAI,GAAG,yBAAyB,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAE1E,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1E,MAAM,IAAI,GAAG,uBAAuB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAElF,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC7E,6BAA6B,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAEnD,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxB,uGAAuG;IACvG,wCAAwC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE;QAAE,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtE,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK,MAAM;QAAE,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAEjF,yBAAyB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,yBAAyB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CanvasRenderTarget } from '@flighthq/types/contract';
2
+ export declare function applyCanvasGradientRampLookup(dest: Readonly<CanvasRenderTarget>, source: Readonly<CanvasRenderTarget>, ramp: Readonly<Uint8ClampedArray>, bias?: number, scale?: number): void;
3
+ export declare function buildCanvasGradientRamp(colors: ReadonlyArray<number>, alphas: ReadonlyArray<number>, ratios: ReadonlyArray<number>): Uint8ClampedArray;
4
+ //# sourceMappingURL=canvasGradientRamp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasGradientRamp.d.ts","sourceRoot":"","sources":["../src/canvasGradientRamp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAuBnE,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACjC,IAAI,SAAI,EACR,KAAK,SAAI,GACR,IAAI,CAYN;AAID,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,EAC7B,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,EAC7B,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,GAC5B,iBAAiB,CAsCnB"}
@@ -0,0 +1,75 @@
1
+ import { drawCanvasImageDataPass } from './canvasEffectCompositing';
2
+ // The 256-entry colour ramp the gradient effects index, and the pass that indexes it.
3
+ //
4
+ // This is a per-pixel LOOKUP, not a spatial gradient, and the distinction is the whole reason this file
5
+ // uses `drawCanvasImageDataPass` rather than `createLinearGradient`. The GL passes read
6
+ // `texture(u_ramp, vec2(value, 0.5))` — the ramp is indexed by a per-pixel SCALAR (a blurred alpha for
7
+ // the glow, an encoded bevel depth for the bevel), so where a colour lands depends on the value at that
8
+ // pixel and not on where the pixel is. A CSS gradient paints by position and cannot express that for an
9
+ // arbitrary silhouette.
10
+ //
11
+ // The per-pixel cost is one table read per pixel with no resampling, which is a different and much
12
+ // cheaper class than the radial remaps that are still unimplemented on this backend.
13
+ // Replaces every pixel of `source` with the ramp entry its ALPHA indexes, writing to `dest`. `bias` and
14
+ // `scale` map that alpha into the ramp before the lookup: the glow passes 0 and 1 to index directly,
15
+ // while the bevel passes 0.5 and ±0.5 so a band's strength runs outward from the ramp's midpoint, which
16
+ // is how the shadow half and the highlight half read opposite ends of one ramp.
17
+ //
18
+ // Output alpha is the ramp's own, matching GL, where the lookup result is written unmultiplied by the
19
+ // source. A ramp whose first entry is transparent therefore leaves the untouched exterior transparent.
20
+ export function applyCanvasGradientRampLookup(dest, source, ramp, bias = 0, scale = 1) {
21
+ drawCanvasImageDataPass(dest, source, (data, pixelCount) => {
22
+ for (let i = 0; i < pixelCount; i++) {
23
+ const at = i * 4;
24
+ const t = bias + (data[at + 3] / 255) * scale;
25
+ const index = Math.max(0, Math.min(255, Math.round(t * 255))) * 4;
26
+ data[at] = ramp[index];
27
+ data[at + 1] = ramp[index + 1];
28
+ data[at + 2] = ramp[index + 2];
29
+ data[at + 3] = ramp[index + 3];
30
+ }
31
+ });
32
+ }
33
+ // Builds the ramp as 256 RGBA entries, mirroring the GL ramp texture: stops are placed by `ratios`
34
+ // (0..255) and linearly interpolated between, with the first and last stop extended to the ends.
35
+ export function buildCanvasGradientRamp(colors, alphas, ratios) {
36
+ const ramp = new Uint8ClampedArray(256 * 4);
37
+ if (colors.length === 0)
38
+ return ramp;
39
+ for (let i = 0; i < 256; i++) {
40
+ let upper = 0;
41
+ while (upper < ratios.length && (ratios[upper] ?? 0) < i)
42
+ upper++;
43
+ let color;
44
+ let alpha;
45
+ if (upper <= 0) {
46
+ color = colors[0];
47
+ alpha = alphas[0] ?? 1;
48
+ }
49
+ else if (upper >= colors.length) {
50
+ color = colors[colors.length - 1];
51
+ alpha = alphas[colors.length - 1] ?? 1;
52
+ }
53
+ else {
54
+ const lowRatio = ratios[upper - 1] ?? 0;
55
+ const highRatio = ratios[upper] ?? 255;
56
+ const span = highRatio - lowRatio;
57
+ // A zero-width span means two stops share a ratio: take the later one rather than dividing by zero.
58
+ const t = span > 0 ? (i - lowRatio) / span : 1;
59
+ const lowColor = colors[upper - 1];
60
+ const highColor = colors[upper];
61
+ color =
62
+ (Math.round(((lowColor >> 16) & 0xff) + (((highColor >> 16) & 0xff) - ((lowColor >> 16) & 0xff)) * t) << 16) |
63
+ (Math.round(((lowColor >> 8) & 0xff) + (((highColor >> 8) & 0xff) - ((lowColor >> 8) & 0xff)) * t) << 8) |
64
+ Math.round((lowColor & 0xff) + ((highColor & 0xff) - (lowColor & 0xff)) * t);
65
+ alpha = (alphas[upper - 1] ?? 1) + ((alphas[upper] ?? 1) - (alphas[upper - 1] ?? 1)) * t;
66
+ }
67
+ const at = i * 4;
68
+ ramp[at] = (color >> 16) & 0xff;
69
+ ramp[at + 1] = (color >> 8) & 0xff;
70
+ ramp[at + 2] = color & 0xff;
71
+ ramp[at + 3] = Math.max(0, Math.min(1, alpha)) * 255;
72
+ }
73
+ return ramp;
74
+ }
75
+ //# sourceMappingURL=canvasGradientRamp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasGradientRamp.js","sourceRoot":"","sources":["../src/canvasGradientRamp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { CanvasRenderEffectRunner, CanvasRenderState, CanvasRenderTarget, CanvasRenderTargetPool, InnerGlowEffect } from '@flighthq/types/contract';
2
+ export declare function applyInnerGlowEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, effect: Readonly<InnerGlowEffect>): void;
3
+ export declare function applyInnerGlowEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, pool: CanvasRenderTargetPool, effect: Readonly<InnerGlowEffect>): void;
4
+ export declare const defaultCanvasInnerGlowEffectRunner: CanvasRenderEffectRunner;
5
+ export declare function registerCanvasInnerGlowEffect(state: CanvasRenderState): void;
6
+ //# sourceMappingURL=canvasInnerGlowEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasInnerGlowEffect.d.ts","sourceRoot":"","sources":["../src/canvasInnerGlowEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,EAChB,MAAM,0BAA0B,CAAC;AA4BlC,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,GAChC,IAAI,CAAC;AACR,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,IAAI,EAAE,sBAAsB,EAC5B,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,GAChC,IAAI,CAAC;AAYR,eAAO,MAAM,kCAAkC,EAAE,wBAEhD,CAAC;AAEF,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAE5E"}
@@ -0,0 +1,37 @@
1
+ import { drawCanvasEffectPass } from './canvasEffectCompositing';
2
+ import { acquireCanvasRenderTarget, createCanvasRenderTargetPool, releaseCanvasRenderTarget, } from './canvasRenderEffectPipeline';
3
+ import { registerCanvasRenderEffect } from './canvasRenderEffectRegistry';
4
+ import { clearCanvasTarget, compositeCanvasImage, drawCanvasInvertedTintedAlphaMask, } from './canvasSourceModeCompositing';
5
+ export function applyInnerGlowEffectToCanvas(source, dest, poolOrEffect, maybeEffect) {
6
+ const effect = maybeEffect ?? poolOrEffect;
7
+ const pool = maybeEffect === undefined ? createCanvasRenderTargetPool() : poolOrEffect;
8
+ applyInnerGlowEffectToCanvasWithPool(source, dest, pool, effect);
9
+ }
10
+ export const defaultCanvasInnerGlowEffectRunner = (ctx, effect) => {
11
+ applyInnerGlowEffectToCanvas(ctx.source, ctx.dest, ctx.pool, effect);
12
+ };
13
+ export function registerCanvasInnerGlowEffect(state) {
14
+ registerCanvasRenderEffect(state, 'InnerGlowEffect', defaultCanvasInnerGlowEffectRunner);
15
+ }
16
+ function applyInnerGlowEffectToCanvasWithPool(source, dest, pool, effect) {
17
+ const mask = acquireCanvasRenderTarget(pool, source.width, source.height);
18
+ const glow = acquireCanvasRenderTarget(pool, source.width, source.height);
19
+ const strength = effect.strength ?? 1;
20
+ const glowPasses = Math.max(1, Math.floor(strength));
21
+ const blur = Math.max(0, ((effect.blurX ?? 6) + (effect.blurY ?? 6)) / 2);
22
+ drawCanvasInvertedTintedAlphaMask(mask, source, effect.color ?? 0xffffff, effect.alpha ?? 1, Math.min(1, strength));
23
+ drawCanvasEffectPass(glow, mask, blur > 0 ? `blur(${blur}px)` : 'none');
24
+ // Clip to the source alpha. Without this the blurred inversion still covers the whole exterior, which
25
+ // would paint the glow outside the shape as well as inside it.
26
+ compositeCanvasImage(glow, source, 0, 0, 'destination-in');
27
+ clearCanvasTarget(dest);
28
+ // 'hide' drops the source and keeps only the glow; the type admits no 'knockout' for inner effects,
29
+ // since knocking the shape out of an effect drawn inside it would erase the effect too.
30
+ if ((effect.sourceMode ?? 'draw') !== 'hide')
31
+ compositeCanvasImage(dest, source);
32
+ for (let i = 0; i < glowPasses; i++)
33
+ compositeCanvasImage(dest, glow);
34
+ releaseCanvasRenderTarget(pool, mask);
35
+ releaseCanvasRenderTarget(pool, glow);
36
+ }
37
+ //# sourceMappingURL=canvasInnerGlowEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasInnerGlowEffect.js","sourceRoot":"","sources":["../src/canvasInnerGlowEffect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { CanvasRenderEffectRunner, CanvasRenderState, CanvasRenderTarget, CanvasRenderTargetPool, InnerShadowEffect } from '@flighthq/types/contract';
2
+ export declare function applyInnerShadowEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, effect: Readonly<InnerShadowEffect>): void;
3
+ export declare function applyInnerShadowEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, pool: CanvasRenderTargetPool, effect: Readonly<InnerShadowEffect>): void;
4
+ export declare const defaultCanvasInnerShadowEffectRunner: CanvasRenderEffectRunner;
5
+ export declare function registerCanvasInnerShadowEffect(state: CanvasRenderState): void;
6
+ //# sourceMappingURL=canvasInnerShadowEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasInnerShadowEffect.d.ts","sourceRoot":"","sources":["../src/canvasInnerShadowEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EAClB,MAAM,0BAA0B,CAAC;AAwBlC,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAClC,IAAI,CAAC;AACR,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,IAAI,EAAE,sBAAsB,EAC5B,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAClC,IAAI,CAAC;AAYR,eAAO,MAAM,oCAAoC,EAAE,wBAElD,CAAC;AAEF,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAE9E"}
@@ -0,0 +1,43 @@
1
+ import { drawCanvasEffectPass } from './canvasEffectCompositing';
2
+ import { acquireCanvasRenderTarget, createCanvasRenderTargetPool, releaseCanvasRenderTarget, } from './canvasRenderEffectPipeline';
3
+ import { registerCanvasRenderEffect } from './canvasRenderEffectRegistry';
4
+ import { clearCanvasTarget, compositeCanvasImage, drawCanvasInvertedTintedAlphaMask, } from './canvasSourceModeCompositing';
5
+ export function applyInnerShadowEffectToCanvas(source, dest, poolOrEffect, maybeEffect) {
6
+ const effect = maybeEffect ?? poolOrEffect;
7
+ const pool = maybeEffect === undefined ? createCanvasRenderTargetPool() : poolOrEffect;
8
+ applyInnerShadowEffectToCanvasWithPool(source, dest, pool, effect);
9
+ }
10
+ export const defaultCanvasInnerShadowEffectRunner = (ctx, effect) => {
11
+ applyInnerShadowEffectToCanvas(ctx.source, ctx.dest, ctx.pool, effect);
12
+ };
13
+ export function registerCanvasInnerShadowEffect(state) {
14
+ registerCanvasRenderEffect(state, 'InnerShadowEffect', defaultCanvasInnerShadowEffectRunner);
15
+ }
16
+ function applyInnerShadowEffectToCanvasWithPool(source, dest, pool, effect) {
17
+ const mask = acquireCanvasRenderTarget(pool, source.width, source.height);
18
+ const blurred = acquireCanvasRenderTarget(pool, source.width, source.height);
19
+ const shadow = acquireCanvasRenderTarget(pool, source.width, source.height);
20
+ const strength = effect.strength ?? 1;
21
+ const shadowPasses = Math.max(1, Math.floor(strength));
22
+ const blur = Math.max(0, ((effect.blurX ?? 4) + (effect.blurY ?? 4)) / 2);
23
+ const angle = ((effect.angle ?? 45) * Math.PI) / 180;
24
+ const distance = effect.distance ?? 4;
25
+ const offsetX = Math.cos(angle) * distance;
26
+ const offsetY = Math.sin(angle) * distance;
27
+ drawCanvasInvertedTintedAlphaMask(mask, source, effect.color ?? 0x000000, effect.alpha ?? 1, Math.min(1, strength));
28
+ drawCanvasEffectPass(blurred, mask, blur > 0 ? `blur(${blur}px)` : 'none');
29
+ // The offset is its own pass into a cleared target rather than a shifted draw into `blurred`, because
30
+ // drawing a target onto itself at an offset would read pixels it is concurrently writing.
31
+ clearCanvasTarget(shadow);
32
+ compositeCanvasImage(shadow, blurred, offsetX, offsetY);
33
+ compositeCanvasImage(shadow, source, 0, 0, 'destination-in');
34
+ clearCanvasTarget(dest);
35
+ if ((effect.sourceMode ?? 'draw') !== 'hide')
36
+ compositeCanvasImage(dest, source);
37
+ for (let i = 0; i < shadowPasses; i++)
38
+ compositeCanvasImage(dest, shadow);
39
+ releaseCanvasRenderTarget(pool, mask);
40
+ releaseCanvasRenderTarget(pool, blurred);
41
+ releaseCanvasRenderTarget(pool, shadow);
42
+ }
43
+ //# sourceMappingURL=canvasInnerShadowEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasInnerShadowEffect.js","sourceRoot":"","sources":["../src/canvasInnerShadowEffect.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
- import type { CanvasRenderEffectRunner, CanvasRenderTarget, CanvasRenderTargetPool, OuterGlowEffect } from '@flighthq/types/contract';
1
+ import type { CanvasRenderEffectRunner, CanvasRenderState, CanvasRenderTarget, CanvasRenderTargetPool, OuterGlowEffect } from '@flighthq/types/contract';
2
2
  export declare function applyOuterGlowEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, effect: Readonly<OuterGlowEffect>): void;
3
3
  export declare function applyOuterGlowEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, pool: CanvasRenderTargetPool, effect: Readonly<OuterGlowEffect>): void;
4
4
  export declare const defaultCanvasOuterGlowEffectRunner: CanvasRenderEffectRunner;
5
+ export declare function registerCanvasOuterGlowEffect(state: CanvasRenderState): void;
5
6
  //# sourceMappingURL=canvasOuterGlowEffect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"canvasOuterGlowEffect.d.ts","sourceRoot":"","sources":["../src/canvasOuterGlowEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAmBlC,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,GAChC,IAAI,CAAC;AACR,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,IAAI,EAAE,sBAAsB,EAC5B,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,GAChC,IAAI,CAAC;AAkBR,eAAO,MAAM,kCAAkC,EAAE,wBAEhD,CAAC"}
1
+ {"version":3,"file":"canvasOuterGlowEffect.d.ts","sourceRoot":"","sources":["../src/canvasOuterGlowEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAoBlC,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,GAChC,IAAI,CAAC;AACR,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,IAAI,EAAE,sBAAsB,EAC5B,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,GAChC,IAAI,CAAC;AAkBR,eAAO,MAAM,kCAAkC,EAAE,wBAEhD,CAAC;AAEF,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAE5E"}
@@ -1,6 +1,7 @@
1
1
  import { drawCanvasEffectPass } from './canvasEffectCompositing';
2
2
  import { computeOuterGlowEffectCss } from './canvasEffectDropShadowCss';
3
3
  import { acquireCanvasRenderTarget, createCanvasRenderTargetPool, releaseCanvasRenderTarget, } from './canvasRenderEffectPipeline';
4
+ import { registerCanvasRenderEffect } from './canvasRenderEffectRegistry';
4
5
  import { clearCanvasTarget, compositeCanvasImage, compositeCanvasSourceMode, drawCanvasTintedAlphaMask, } from './canvasSourceModeCompositing';
5
6
  export function applyOuterGlowEffectToCanvas(source, dest, poolOrEffect, maybeEffect) {
6
7
  const effect = maybeEffect ?? poolOrEffect;
@@ -15,6 +16,9 @@ export function applyOuterGlowEffectToCanvas(source, dest, poolOrEffect, maybeEf
15
16
  export const defaultCanvasOuterGlowEffectRunner = (ctx, effect) => {
16
17
  applyOuterGlowEffectToCanvas(ctx.source, ctx.dest, ctx.pool, effect);
17
18
  };
19
+ export function registerCanvasOuterGlowEffect(state) {
20
+ registerCanvasRenderEffect(state, 'OuterGlowEffect', defaultCanvasOuterGlowEffectRunner);
21
+ }
18
22
  function applyOuterGlowEffectToCanvasWithPool(source, dest, pool, effect) {
19
23
  const mask = acquireCanvasRenderTarget(pool, source.width, source.height);
20
24
  const blurred = acquireCanvasRenderTarget(pool, source.width, source.height);
@@ -1 +1 @@
1
- {"version":3,"file":"canvasOuterGlowEffect.js","sourceRoot":"","sources":["../src/canvasOuterGlowEffect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"canvasOuterGlowEffect.js","sourceRoot":"","sources":["../src/canvasOuterGlowEffect.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import type { CanvasRenderEffectRunner, CanvasRenderTarget, CanvasRenderTargetPool, PixelateEffect } from '@flighthq/types/contract';
1
+ import type { CanvasRenderEffectRunner, CanvasRenderState, CanvasRenderTarget, CanvasRenderTargetPool, PixelateEffect } from '@flighthq/types/contract';
2
2
  export declare function applyPixelateEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, pool: CanvasRenderTargetPool, effect: Readonly<PixelateEffect>): void;
3
3
  export declare const defaultCanvasPixelateEffectRunner: CanvasRenderEffectRunner;
4
+ export declare function registerCanvasPixelateEffect(state: CanvasRenderState): void;
4
5
  //# sourceMappingURL=canvasPixelateEffect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"canvasPixelateEffect.d.ts","sourceRoot":"","sources":["../src/canvasPixelateEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,EACf,MAAM,0BAA0B,CAAC;AAOlC,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,IAAI,EAAE,sBAAsB,EAC5B,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,GAC/B,IAAI,CA8BN;AAED,eAAO,MAAM,iCAAiC,EAAE,wBAE/C,CAAC"}
1
+ {"version":3,"file":"canvasPixelateEffect.d.ts","sourceRoot":"","sources":["../src/canvasPixelateEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,EACf,MAAM,0BAA0B,CAAC;AAQlC,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,IAAI,EAAE,sBAAsB,EAC5B,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,GAC/B,IAAI,CA8BN;AAED,eAAO,MAAM,iCAAiC,EAAE,wBAE/C,CAAC;AAEF,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAE3E"}
@@ -1,4 +1,5 @@
1
1
  import { acquireCanvasRenderTarget, releaseCanvasRenderTarget } from './canvasRenderEffectPipeline';
2
+ import { registerCanvasRenderEffect } from './canvasRenderEffectRegistry';
2
3
  // Pixelate (REAL): downscale the scene to (width/size, height/size) on a scratch canvas, then upscale
3
4
  // back to full size with imageSmoothingEnabled=false so the blocks stay hard-edged — the canonical 2D
4
5
  // mosaic.
@@ -33,4 +34,7 @@ export function applyPixelateEffectToCanvas(source, dest, pool, effect) {
33
34
  export const defaultCanvasPixelateEffectRunner = (ctx, effect) => {
34
35
  applyPixelateEffectToCanvas(ctx.source, ctx.dest, ctx.pool, effect);
35
36
  };
37
+ export function registerCanvasPixelateEffect(state) {
38
+ registerCanvasRenderEffect(state, 'PixelateEffect', defaultCanvasPixelateEffectRunner);
39
+ }
36
40
  //# sourceMappingURL=canvasPixelateEffect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"canvasPixelateEffect.js","sourceRoot":"","sources":["../src/canvasPixelateEffect.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAEpG,sGAAsG;AACtG,sGAAsG;AACtG,UAAU;AACV,MAAM,UAAU,2BAA2B,CACzC,MAAoC,EACpC,IAAkC,EAClC,IAA4B,EAC5B,MAAgC;IAEhC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;IAE7D,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC;IAC3B,IAAI,CAAC,IAAI,EAAE,CAAC;IACZ,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACpC,IAAI,CAAC,wBAAwB,GAAG,aAAa,CAAC;IAC9C,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;IACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACrB,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAClC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACvF,IAAI,CAAC,OAAO,EAAE,CAAC;IAEf,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;IACzB,GAAG,CAAC,IAAI,EAAE,CAAC;IACX,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,GAAG,CAAC,wBAAwB,GAAG,aAAa,CAAC;IAC7C,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC;IACpB,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;IACpB,GAAG,CAAC,qBAAqB,GAAG,KAAK,CAAC;IAClC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7C,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACjF,GAAG,CAAC,qBAAqB,GAAG,IAAI,CAAC;IACjC,GAAG,CAAC,OAAO,EAAE,CAAC;IAEd,yBAAyB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,MAAM,iCAAiC,GAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACzF,2BAA2B,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAwB,CAAC,CAAC;AACxF,CAAC,CAAC"}
1
+ {"version":3,"file":"canvasPixelateEffect.js","sourceRoot":"","sources":["../src/canvasPixelateEffect.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"canvasRenderEffectPipeline.d.ts","sourceRoot":"","sources":["../src/canvasRenderEffectPipeline.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,UAAU,EACV,0BAA0B,EAC1B,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,YAAY,EACZ,2BAA2B,EAC5B,MAAM,0BAA0B,CAAC;AAgBlC,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,sBAAsB,EAC5B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,kBAAkB,CAOpB;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,0BAA0B,GAAG,IAAI,CAYpH;AAED,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,iBAAiB,EACzB,OAAO,GAAE,QAAQ,CAAC,2BAA2B,CAAM,GAClD,0BAA0B,CAO5B;AAED,wBAAgB,4BAA4B,IAAI,sBAAsB,CAErE;AAED,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,iBAAiB,EACzB,QAAQ,EAAE,0BAA0B,GACnC,IAAI,CAQN;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,iBAAiB,EACxB,QAAQ,EAAE,0BAA0B,EACpC,UAAU,EAAE,aAAa,CAAC,YAAY,GAAG,UAAU,CAAC,GACnD,IAAI,CAyDN;AAID,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAIxG"}
1
+ {"version":3,"file":"canvasRenderEffectPipeline.d.ts","sourceRoot":"","sources":["../src/canvasRenderEffectPipeline.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,UAAU,EACV,0BAA0B,EAC1B,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,YAAY,EACZ,2BAA2B,EAC5B,MAAM,0BAA0B,CAAC;AAiBlC,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,sBAAsB,EAC5B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,kBAAkB,CAOpB;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,0BAA0B,GAAG,IAAI,CAYpH;AAED,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,iBAAiB,EACzB,OAAO,GAAE,QAAQ,CAAC,2BAA2B,CAAM,GAClD,0BAA0B,CAO5B;AAED,wBAAgB,4BAA4B,IAAI,sBAAsB,CAErE;AAED,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,iBAAiB,EACzB,QAAQ,EAAE,0BAA0B,GACnC,IAAI,CAQN;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,iBAAiB,EACxB,QAAQ,EAAE,0BAA0B,EACpC,UAAU,EAAE,aAAa,CAAC,YAAY,GAAG,UAAU,CAAC,GACnD,IAAI,CA6DN;AAID,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAIxG"}
@@ -2,6 +2,7 @@ import { bakeColorLutForRun, createColorLutCache, fuseColorMatrices, getAdjustme
2
2
  import { beginCanvasRenderPass, createCanvasRenderTarget, endCanvasRenderPass, resizeCanvasRenderTarget, } from '@flighthq/scene2d-canvas/contract';
3
3
  import { applyColorLutPassToCanvas } from './canvasColorLutPass';
4
4
  import { applyColorMatrixPassToCanvas } from './canvasColorMatrixPass';
5
+ import { drawCanvasEffectPass } from './canvasEffectCompositing';
5
6
  import { getCanvasRenderEffectRunner } from './canvasRenderEffectRegistry';
6
7
  // Opt-in Canvas 2D post-process pipeline — the parallel of the Gl effect pipeline. The scene renders
7
8
  // into the pipeline's offscreen canvas between begin/end; end runs the agnostic effect list through the
@@ -100,12 +101,17 @@ export function endCanvasRenderEffectPipeline(state, pipeline, operations) {
100
101
  continue;
101
102
  }
102
103
  const runner = getCanvasRenderEffectRunner(state, operation.kind);
103
- if (runner === null)
104
- continue;
105
104
  flushAdjustments();
106
105
  ensureScratch();
107
106
  const dest = source === scratchA ? scratchB : scratchA;
108
- runner({ state, source, dest, pool }, operation);
107
+ // Registration is the backend's proof that an effect kind is realized. An unregistered effect is
108
+ // therefore a pipeline-level identity operation: copy the current source into the next target so a
109
+ // later pass never reads an uninitialized ping-pong target. Keeping this composition rule here
110
+ // avoids per-kind passthrough registrations that would falsely advertise renderer support.
111
+ if (runner === null)
112
+ drawCanvasEffectPass(dest, source, 'none');
113
+ else
114
+ runner({ state, source, dest, pool }, operation);
109
115
  source = dest;
110
116
  }
111
117
  flushAdjustments();
@@ -1 +1 @@
1
- {"version":3,"file":"canvasRenderEffectPipeline.js","sourceRoot":"","sources":["../src/canvasRenderEffectPipeline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"canvasRenderEffectPipeline.js","sourceRoot":"","sources":["../src/canvasRenderEffectPipeline.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"canvasRenderEffectRegistry.d.ts","sourceRoot":"","sources":["../src/canvasRenderEffectRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAQ5F,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,wBAAwB,GAAG,IAAI,CAEnH;AAKD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3F;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,wBAAwB,GAC/B,IAAI,CAON"}
1
+ {"version":3,"file":"canvasRenderEffectRegistry.d.ts","sourceRoot":"","sources":["../src/canvasRenderEffectRegistry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAS5F,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,wBAAwB,GAAG,IAAI,CAEnH;AAKD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3F;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,wBAAwB,GAC/B,IAAI,CAGN"}
@@ -1,24 +1,21 @@
1
+ import { getCanvasRenderStateRuntime } from '@flighthq/scene2d-canvas/contract';
1
2
  // Per-state registry mapping an effect `kind` string to its Canvas 2D runner — the material-renderer
2
3
  // pattern one tier up, and the Canvas parallel of registerGlRenderEffect. Registration is opt-in
3
4
  // (import a runner only to register it) and dispatch is a Map lookup, so there is no monolithic switch
4
5
  // and unused effect recipes tree-shake away. Register an alternative runner under the same key to swap
5
- // algorithms.
6
+ // algorithms. A built-in registerCanvas<Kind>Effect wrapper is pure ergonomics: it calls this function
7
+ // with the literal kind and public default runner, and installs no padding or shader companions.
6
8
  export function getCanvasRenderEffectRunner(state, kind) {
7
- return _registries.get(state)?.get(kind) ?? null;
9
+ return getCanvasRenderStateRuntime(state).canvasRenderEffectRegistry?.get(kind) ?? null;
8
10
  }
9
11
  // Returns true if a runner is registered for the given kind in this state. Use to validate an effect
10
- // chain before dispatching — the pipeline silently skips unregistered kinds; check up front to apply
11
- // your own policy (warn, filter) rather than relying on silent no-ops.
12
+ // chain before dispatching. The pipeline preserves unregistered operations as initialized identity
13
+ // passes; check up front to apply your own policy (warn, filter) rather than relying on that fallback.
12
14
  export function hasCanvasRenderEffectRunner(state, kind) {
13
- return _registries.get(state)?.has(kind) ?? false;
15
+ return getCanvasRenderStateRuntime(state).canvasRenderEffectRegistry?.has(kind) ?? false;
14
16
  }
15
17
  export function registerCanvasRenderEffect(state, kind, runner) {
16
- let registry = _registries.get(state);
17
- if (registry === undefined) {
18
- registry = new Map();
19
- _registries.set(state, registry);
20
- }
21
- registry.set(kind, runner);
18
+ const runtime = getCanvasRenderStateRuntime(state);
19
+ (runtime.canvasRenderEffectRegistry ??= new Map()).set(kind, runner);
22
20
  }
23
- const _registries = new WeakMap();
24
21
  //# sourceMappingURL=canvasRenderEffectRegistry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"canvasRenderEffectRegistry.js","sourceRoot":"","sources":["../src/canvasRenderEffectRegistry.ts"],"names":[],"mappings":"AAEA,qGAAqG;AACrG,iGAAiG;AACjG,uGAAuG;AACvG,uGAAuG;AACvG,cAAc;AAEd,MAAM,UAAU,2BAA2B,CAAC,KAAwB,EAAE,IAAY;IAChF,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AACnD,CAAC;AAED,qGAAqG;AACrG,qGAAqG;AACrG,uEAAuE;AACvE,MAAM,UAAU,2BAA2B,CAAC,KAAwB,EAAE,IAAY;IAChF,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,KAAwB,EACxB,IAAY,EACZ,MAAgC;IAEhC,IAAI,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QACrB,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IACD,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,WAAW,GAAG,IAAI,OAAO,EAA4D,CAAC"}
1
+ {"version":3,"file":"canvasRenderEffectRegistry.js","sourceRoot":"","sources":["../src/canvasRenderEffectRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAGhF,qGAAqG;AACrG,iGAAiG;AACjG,uGAAuG;AACvG,uGAAuG;AACvG,uGAAuG;AACvG,iGAAiG;AAEjG,MAAM,UAAU,2BAA2B,CAAC,KAAwB,EAAE,IAAY;IAChF,OAAO,2BAA2B,CAAC,KAAK,CAAC,CAAC,0BAA0B,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AAC1F,CAAC;AAED,qGAAqG;AACrG,mGAAmG;AACnG,uGAAuG;AACvG,MAAM,UAAU,2BAA2B,CAAC,KAAwB,EAAE,IAAY;IAChF,OAAO,2BAA2B,CAAC,KAAK,CAAC,CAAC,0BAA0B,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,KAAwB,EACxB,IAAY,EACZ,MAAgC;IAEhC,MAAM,OAAO,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC,OAAO,CAAC,0BAA0B,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACvE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CanvasRenderState, CanvasRenderTexturePool, RenderEffect, RenderTexture } from '@flighthq/types/contract';
2
+ export declare function applyCanvasRenderEffectsToRenderTexture(state: CanvasRenderState, pool: CanvasRenderTexturePool, source: Readonly<RenderTexture>, dest: RenderTexture, scratch: RenderTexture, effects: ReadonlyArray<Readonly<RenderEffect>>): boolean;
3
+ //# sourceMappingURL=canvasRenderTextureEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasRenderTextureEffect.d.ts","sourceRoot":"","sources":["../src/canvasRenderTextureEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAOxH,wBAAgB,uCAAuC,CACrD,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,uBAAuB,EAC7B,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC/B,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,GAC7C,OAAO,CAuBT"}
@@ -0,0 +1,31 @@
1
+ import { getCanvasRenderTextureTarget, writeCanvasRenderTextureTarget } from '@flighthq/scene2d-canvas/contract';
2
+ import { getCanvasRenderEffectRunner } from './canvasRenderEffectRegistry';
3
+ // Applies registered Canvas effect runners from one completed RenderTexture into another. The
4
+ // caller supplies one distinct scratch lease; parity chooses the first destination so the final
5
+ // registered operation always publishes `dest`.
6
+ export function applyCanvasRenderEffectsToRenderTexture(state, pool, source, dest, scratch, effects) {
7
+ if (source === dest || source === scratch || dest === scratch) {
8
+ throw new Error('applyCanvasRenderEffectsToRenderTexture: source, destination, and scratch must be distinct');
9
+ }
10
+ const sourceTarget = getCanvasRenderTextureTarget(state, source);
11
+ if (sourceTarget === null)
12
+ return false;
13
+ const operations = effects.flatMap((effect) => {
14
+ const runner = getCanvasRenderEffectRunner(state, effect.kind);
15
+ return runner === null ? [] : [{ effect, runner }];
16
+ });
17
+ if (operations.length === 0)
18
+ return false;
19
+ let current = sourceTarget;
20
+ for (let index = 0; index < operations.length; index++) {
21
+ const operation = operations[index];
22
+ const remaining = operations.length - index;
23
+ const output = remaining % 2 === 1 ? dest : scratch;
24
+ writeCanvasRenderTextureTarget(state, output, (target) => {
25
+ operation.runner({ state, source: current, dest: target, pool: pool.effectTargets }, operation.effect);
26
+ });
27
+ current = getCanvasRenderTextureTarget(state, output);
28
+ }
29
+ return true;
30
+ }
31
+ //# sourceMappingURL=canvasRenderTextureEffect.js.map