@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,7 @@
1
+ import type { BevelEffect, CanvasRenderEffectRunner, CanvasRenderState, CanvasRenderTarget, CanvasRenderTargetPool } from '@flighthq/types/contract';
2
+ export declare function applyBevelEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, effect: Readonly<BevelEffect>): void;
3
+ export declare function applyBevelEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, pool: CanvasRenderTargetPool, effect: Readonly<BevelEffect>): void;
4
+ export declare function clipCanvasBevelBand(band: Readonly<CanvasRenderTarget>, source: Readonly<CanvasRenderTarget>, bevelType: BevelEffect['bevelType']): void;
5
+ export declare const defaultCanvasBevelEffectRunner: CanvasRenderEffectRunner;
6
+ export declare function registerCanvasBevelEffect(state: CanvasRenderState): void;
7
+ //# sourceMappingURL=canvasBevelEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasBevelEffect.d.ts","sourceRoot":"","sources":["../src/canvasBevelEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AA0BlC,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,GAC5B,IAAI,CAAC;AACR,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,IAAI,EAAE,sBAAsB,EAC5B,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,GAC5B,IAAI,CAAC;AAeR,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,SAAS,EAAE,WAAW,CAAC,WAAW,CAAC,GAClC,IAAI,CAON;AAED,eAAO,MAAM,8BAA8B,EAAE,wBAE5C,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAExE"}
@@ -0,0 +1,76 @@
1
+ import { drawCanvasEffectPass } from './canvasEffectCompositing';
2
+ import { acquireCanvasRenderTarget, createCanvasRenderTargetPool, releaseCanvasRenderTarget, } from './canvasRenderEffectPipeline';
3
+ import { registerCanvasRenderEffect } from './canvasRenderEffectRegistry';
4
+ import { clearCanvasTarget, compositeCanvasImage, drawCanvasTintedAlphaMask } from './canvasSourceModeCompositing';
5
+ export function applyBevelEffectToCanvas(source, dest, poolOrEffect, maybeEffect) {
6
+ const effect = maybeEffect ?? poolOrEffect;
7
+ const pool = maybeEffect === undefined ? createCanvasRenderTargetPool() : poolOrEffect;
8
+ applyBevelEffectToCanvasWithPool(source, dest, pool, effect);
9
+ }
10
+ // Clips the assembled band to the region `bevelType` keeps: inside the shape for 'inner', outside it for
11
+ // 'outer', everywhere for 'full'. Exported because the gradient bevel applies the identical rule to a
12
+ // ramp-tinted band, and one clip is easier to keep honest than two.
13
+ export function clipCanvasBevelBand(band, source, bevelType) {
14
+ if (bevelType === 'outer') {
15
+ compositeCanvasImage(band, source, 0, 0, 'destination-out');
16
+ return;
17
+ }
18
+ // 'inner' is the default, matching the GL pass; 'full' deliberately clips nothing.
19
+ if (bevelType !== 'full')
20
+ compositeCanvasImage(band, source, 0, 0, 'destination-in');
21
+ }
22
+ export const defaultCanvasBevelEffectRunner = (ctx, effect) => {
23
+ applyBevelEffectToCanvas(ctx.source, ctx.dest, ctx.pool, effect);
24
+ };
25
+ export function registerCanvasBevelEffect(state) {
26
+ registerCanvasRenderEffect(state, 'BevelEffect', defaultCanvasBevelEffectRunner);
27
+ }
28
+ function applyBevelEffectToCanvasWithPool(source, dest, pool, effect) {
29
+ const blurred = acquireCanvasRenderTarget(pool, source.width, source.height);
30
+ const lit = acquireCanvasRenderTarget(pool, source.width, source.height);
31
+ const shade = acquireCanvasRenderTarget(pool, source.width, source.height);
32
+ const side = acquireCanvasRenderTarget(pool, source.width, source.height);
33
+ const tinted = acquireCanvasRenderTarget(pool, source.width, source.height);
34
+ const band = acquireCanvasRenderTarget(pool, source.width, source.height);
35
+ const strength = Math.min(1, effect.strength ?? 1);
36
+ const blur = Math.max(0, ((effect.blurX ?? 4) + (effect.blurY ?? 4)) / 2);
37
+ const angle = ((effect.angle ?? 45) * Math.PI) / 180;
38
+ const distance = effect.distance ?? 4;
39
+ const offsetX = Math.cos(angle) * distance;
40
+ const offsetY = Math.sin(angle) * distance;
41
+ drawCanvasEffectPass(blurred, source, blur > 0 ? `blur(${blur}px)` : 'none');
42
+ // The two offset copies. `lit` is shifted TOWARD the light and `shade` away from it, so the region one
43
+ // covers and the other does not is the edge band facing that direction.
44
+ clearCanvasTarget(lit);
45
+ compositeCanvasImage(lit, blurred, -offsetX, -offsetY);
46
+ clearCanvasTarget(shade);
47
+ compositeCanvasImage(shade, blurred, offsetX, offsetY);
48
+ clearCanvasTarget(band);
49
+ // Highlight side: lit with shade knocked out of it. The knockout must precede the tint — tinting first
50
+ // would fill the whole offset silhouette and the "band" would cover the shape rather than its edge.
51
+ // Both sides are built into `side` and tinted into `tinted`, so neither offset copy is ever written
52
+ // over while the other side still needs to read it.
53
+ clearCanvasTarget(side);
54
+ compositeCanvasImage(side, lit);
55
+ compositeCanvasImage(side, shade, 0, 0, 'destination-out');
56
+ drawCanvasTintedAlphaMask(tinted, side, effect.highlightColor ?? 0xffffff, effect.highlightAlpha ?? 1, strength);
57
+ compositeCanvasImage(band, tinted);
58
+ // Shadow side: the same difference the other way round.
59
+ clearCanvasTarget(side);
60
+ compositeCanvasImage(side, shade);
61
+ compositeCanvasImage(side, lit, 0, 0, 'destination-out');
62
+ drawCanvasTintedAlphaMask(tinted, side, effect.shadowColor ?? 0x000000, effect.shadowAlpha ?? 1, strength);
63
+ compositeCanvasImage(band, tinted);
64
+ clipCanvasBevelBand(band, source, effect.bevelType);
65
+ clearCanvasTarget(dest);
66
+ if ((effect.sourceMode ?? 'draw') !== 'hide')
67
+ compositeCanvasImage(dest, source);
68
+ compositeCanvasImage(dest, band);
69
+ releaseCanvasRenderTarget(pool, band);
70
+ releaseCanvasRenderTarget(pool, tinted);
71
+ releaseCanvasRenderTarget(pool, side);
72
+ releaseCanvasRenderTarget(pool, shade);
73
+ releaseCanvasRenderTarget(pool, lit);
74
+ releaseCanvasRenderTarget(pool, blurred);
75
+ }
76
+ //# sourceMappingURL=canvasBevelEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasBevelEffect.js","sourceRoot":"","sources":["../src/canvasBevelEffect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { AdvancedBlendMode, BlendEffect, CanvasRenderEffectRunner, CanvasRenderState, CanvasRenderTarget } from '@flighthq/types/contract';
2
+ export declare function applyBlendEffectToCanvas(state: CanvasRenderState, source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, effect: Readonly<BlendEffect>): void;
3
+ export declare const defaultCanvasBlendEffectRunner: CanvasRenderEffectRunner;
4
+ export declare function getCanvasBlendEffectBackdrop(state: CanvasRenderState, backdropKey: string | null): CanvasRenderTarget | null;
5
+ export declare function getCanvasBlendEffectCompositeOperation(mode: AdvancedBlendMode): GlobalCompositeOperation;
6
+ export declare function registerCanvasBlendEffect(state: CanvasRenderState): void;
7
+ export declare function registerCanvasBlendEffectBackdrop(state: CanvasRenderState, backdropKey: string, target: CanvasRenderTarget): void;
8
+ export declare function unregisterCanvasBlendEffectBackdrop(state: CanvasRenderState, backdropKey: string): boolean;
9
+ //# sourceMappingURL=canvasBlendEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasBlendEffect.d.ts","sourceRoot":"","sources":["../src/canvasBlendEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAmBlC,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,GAC5B,IAAI,CAuBN;AAED,eAAO,MAAM,8BAA8B,EAAE,wBAE5C,CAAC;AAKF,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,iBAAiB,EACxB,WAAW,EAAE,MAAM,GAAG,IAAI,GACzB,kBAAkB,GAAG,IAAI,CAG3B;AAMD,wBAAgB,sCAAsC,CAAC,IAAI,EAAE,iBAAiB,GAAG,wBAAwB,CAExG;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAExE;AAKD,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,iBAAiB,EACxB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,kBAAkB,GACzB,IAAI,CAGN;AAID,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAE1G"}
@@ -0,0 +1,89 @@
1
+ import { getCanvasRenderStateRuntime } from '@flighthq/scene2d-canvas/contract';
2
+ import { drawCanvasEffectPass } from './canvasEffectCompositing';
3
+ import { registerCanvasRenderEffect } from './canvasRenderEffectRegistry';
4
+ // Advanced-blend composite pass: draw a registered backdrop, then draw the incoming layer over it with
5
+ // the Canvas 2D compositing operation named by the effect's `mode`. This is the Canvas realization of the
6
+ // `BlendEffect` recipe — the escape hatch for the AdvancedBlendMode set the fixed-function BlendMode enum
7
+ // cannot express.
8
+ //
9
+ // Canvas 2D is the one backend where this is native rather than emulated. Its blend
10
+ // globalCompositeOperation values implement the same W3C formula the GL pass spells out in GLSL —
11
+ // cs' = (1 - ab) * cs + ab * B(cb, cs), then Porter-Duff source-over — so there is no shader, no
12
+ // offscreen bounce beyond the one the pipeline already provides, and no per-pixel readback. `opacity`
13
+ // maps to globalAlpha, which scales the source alpha ahead of compositing exactly as the GL pass's
14
+ // `layer.a * u_opacity` does.
15
+ //
16
+ // An unregistered or absent `backdropKey` composites the layer over an implicit transparent backdrop,
17
+ // which reduces to a source-over passthrough rather than erroring — matching the GL contract.
18
+ export function applyBlendEffectToCanvas(state, source, dest, effect) {
19
+ const backdrop = getCanvasBlendEffectBackdrop(state, effect.backdropKey ?? null);
20
+ if (backdrop === null) {
21
+ drawCanvasEffectPass(dest, source, 'none');
22
+ return;
23
+ }
24
+ const operation = getCanvasBlendEffectCompositeOperation(effect.mode);
25
+ const ctx = dest.context;
26
+ ctx.save();
27
+ ctx.setTransform(1, 0, 0, 1, 0, 0);
28
+ ctx.globalAlpha = 1;
29
+ ctx.globalCompositeOperation = 'source-over';
30
+ ctx.filter = 'none';
31
+ ctx.clearRect(0, 0, dest.width, dest.height);
32
+ // The backdrop goes down first and unblended: it is the destination the mode reads, so it has to be
33
+ // present in `dest` before the layer is drawn. Drawing the layer first and the backdrop second would
34
+ // blend in the opposite direction, which is a different image for every non-commutative mode.
35
+ ctx.drawImage(backdrop.canvas, 0, 0);
36
+ ctx.globalAlpha = effect.opacity ?? 1;
37
+ ctx.globalCompositeOperation = operation;
38
+ ctx.drawImage(source.canvas, 0, 0);
39
+ ctx.restore();
40
+ }
41
+ export const defaultCanvasBlendEffectRunner = (ctx, effect) => {
42
+ applyBlendEffectToCanvas(ctx.state, ctx.source, ctx.dest, effect);
43
+ };
44
+ // Returns the backdrop registered under `backdropKey` for this state, or null when the key is null or
45
+ // nothing is registered. Doubles as the introspection query behind the passthrough fallback: a caller
46
+ // that wants to know whether a blend will actually blend asks here rather than inferring it from pixels.
47
+ export function getCanvasBlendEffectBackdrop(state, backdropKey) {
48
+ if (backdropKey === null)
49
+ return null;
50
+ return getCanvasRenderStateRuntime(state).canvasBlendEffectBackdrops?.get(backdropKey) ?? null;
51
+ }
52
+ // Maps an AdvancedBlendMode to the Canvas 2D globalCompositeOperation that realizes it. Every one of the
53
+ // eleven modes has a native operation, including the four non-separable HSL ones, which is why this
54
+ // backend needs no blend math of its own. An unrecognized mode — a vendor-prefixed kind Canvas has never
55
+ // heard of — falls back to 'source-over', the same Normal passthrough the GL pass gives an unknown mode.
56
+ export function getCanvasBlendEffectCompositeOperation(mode) {
57
+ return BLEND_MODE_OPERATION[mode] ?? 'source-over';
58
+ }
59
+ export function registerCanvasBlendEffect(state) {
60
+ registerCanvasRenderEffect(state, 'BlendEffect', defaultCanvasBlendEffectRunner);
61
+ }
62
+ // Registers a backdrop target under `backdropKey` for this state, so a BlendEffect naming that key blends
63
+ // its layer over the target. Last write wins. The registry holds the target only and never owns or frees
64
+ // it — the caller keeps ownership of the canvas, as with the GL texture registry.
65
+ export function registerCanvasBlendEffectBackdrop(state, backdropKey, target) {
66
+ const runtime = getCanvasRenderStateRuntime(state);
67
+ (runtime.canvasBlendEffectBackdrops ??= new Map()).set(backdropKey, target);
68
+ }
69
+ // Removes the backdrop registered under `backdropKey`, returning true when one was present. The target
70
+ // itself is the caller's to dispose; this only drops the registry reference.
71
+ export function unregisterCanvasBlendEffectBackdrop(state, backdropKey) {
72
+ return getCanvasRenderStateRuntime(state).canvasBlendEffectBackdrops?.delete(backdropKey) ?? false;
73
+ }
74
+ // AdvancedBlendMode → Canvas 2D globalCompositeOperation. Alphabetical by mode, matching the value order
75
+ // in the AdvancedBlendMode namespace.
76
+ const BLEND_MODE_OPERATION = {
77
+ Color: 'color',
78
+ ColorBurn: 'color-burn',
79
+ ColorDodge: 'color-dodge',
80
+ Difference: 'difference',
81
+ Exclusion: 'exclusion',
82
+ HardLight: 'hard-light',
83
+ Hue: 'hue',
84
+ Luminosity: 'luminosity',
85
+ Overlay: 'overlay',
86
+ Saturation: 'saturation',
87
+ SoftLight: 'soft-light',
88
+ };
89
+ //# sourceMappingURL=canvasBlendEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasBlendEffect.js","sourceRoot":"","sources":["../src/canvasBlendEffect.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import type { BloomEffect, CanvasRenderEffectRunner, CanvasRenderTarget, CanvasRenderTargetPool } from '@flighthq/types/contract';
1
+ import type { BloomEffect, CanvasRenderEffectRunner, CanvasRenderState, CanvasRenderTarget, CanvasRenderTargetPool } from '@flighthq/types/contract';
2
2
  export declare function applyBloomEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, pool: CanvasRenderTargetPool, effect: Readonly<BloomEffect>): void;
3
3
  export declare const defaultCanvasBloomEffectRunner: CanvasRenderEffectRunner;
4
+ export declare function registerCanvasBloomEffect(state: CanvasRenderState): void;
4
5
  //# sourceMappingURL=canvasBloomEffect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"canvasBloomEffect.d.ts","sourceRoot":"","sources":["../src/canvasBloomEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,wBAAwB,EACxB,kBAAkB,EAClB,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AASlC,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,IAAI,EAAE,sBAAsB,EAC5B,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,GAC5B,IAAI,CAkCN;AAED,eAAO,MAAM,8BAA8B,EAAE,wBAE5C,CAAC"}
1
+ {"version":3,"file":"canvasBloomEffect.d.ts","sourceRoot":"","sources":["../src/canvasBloomEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAUlC,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,IAAI,EAAE,sBAAsB,EAC5B,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,GAC5B,IAAI,CAkCN;AAED,eAAO,MAAM,8BAA8B,EAAE,wBAE5C,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAExE"}
@@ -1,6 +1,7 @@
1
1
  import { computeBloomBlurRadius } from '@flighthq/effects/contract';
2
2
  import { drawCanvasEffectPass } from './canvasEffectCompositing';
3
3
  import { acquireCanvasRenderTarget, releaseCanvasRenderTarget } from './canvasRenderEffectPipeline';
4
+ import { registerCanvasRenderEffect } from './canvasRenderEffectRegistry';
4
5
  // Bloom (REAL): bright-pass → blur the bright branch → additively composite back. Multi-pass: it
5
6
  // acquires a scratch canvas from the pool, isolates bright pixels by pushing contrast hard so dim
6
7
  // pixels crush to black, blurs that branch, then draws it over the scene with the 'lighter'
@@ -40,4 +41,7 @@ export function applyBloomEffectToCanvas(source, dest, pool, effect) {
40
41
  export const defaultCanvasBloomEffectRunner = (ctx, effect) => {
41
42
  applyBloomEffectToCanvas(ctx.source, ctx.dest, ctx.pool, effect);
42
43
  };
44
+ export function registerCanvasBloomEffect(state) {
45
+ registerCanvasRenderEffect(state, 'BloomEffect', defaultCanvasBloomEffectRunner);
46
+ }
43
47
  //# sourceMappingURL=canvasBloomEffect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"canvasBloomEffect.js","sourceRoot":"","sources":["../src/canvasBloomEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAQpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAEpG,iGAAiG;AACjG,kGAAkG;AAClG,4FAA4F;AAC5F,2FAA2F;AAC3F,MAAM,UAAU,wBAAwB,CACtC,MAAoC,EACpC,IAAkC,EAClC,IAA4B,EAC5B,MAA6B;IAE7B,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,GAAG,CAAC;IAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE9C,iGAAiG;IACjG,oGAAoG;IACpG,6CAA6C;IAC7C,MAAM,QAAQ,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC;IACnC,MAAM,eAAe,GAAG,CAAC,GAAG,SAAS,CAAC;IACtC,MAAM,MAAM,GAAG,yBAAyB,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5E,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,QAAQ,gBAAgB,eAAe,GAAG,CAAC,CAAC;IAE7F,mGAAmG;IACnG,MAAM,OAAO,GAAG,yBAAyB,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7E,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,MAAM,KAAK,CAAC,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAED,wGAAwG;IACxG,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,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,SAAS,CAAC;IACzC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IACtD,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;IACpB,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACpC,GAAG,CAAC,OAAO,EAAE,CAAC;IAEd,yBAAyB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxC,yBAAyB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,MAAM,8BAA8B,GAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACtF,wBAAwB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAqB,CAAC,CAAC;AAClF,CAAC,CAAC"}
1
+ {"version":3,"file":"canvasBloomEffect.js","sourceRoot":"","sources":["../src/canvasBloomEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AASpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACpG,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,iGAAiG;AACjG,kGAAkG;AAClG,4FAA4F;AAC5F,2FAA2F;AAC3F,MAAM,UAAU,wBAAwB,CACtC,MAAoC,EACpC,IAAkC,EAClC,IAA4B,EAC5B,MAA6B;IAE7B,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,GAAG,CAAC;IAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE9C,iGAAiG;IACjG,oGAAoG;IACpG,6CAA6C;IAC7C,MAAM,QAAQ,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC;IACnC,MAAM,eAAe,GAAG,CAAC,GAAG,SAAS,CAAC;IACtC,MAAM,MAAM,GAAG,yBAAyB,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5E,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,QAAQ,gBAAgB,eAAe,GAAG,CAAC,CAAC;IAE7F,mGAAmG;IACnG,MAAM,OAAO,GAAG,yBAAyB,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7E,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,MAAM,KAAK,CAAC,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAED,wGAAwG;IACxG,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,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,SAAS,CAAC;IACzC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IACtD,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;IACpB,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACpC,GAAG,CAAC,OAAO,EAAE,CAAC;IAEd,yBAAyB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxC,yBAAyB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,MAAM,8BAA8B,GAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACtF,wBAAwB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAqB,CAAC,CAAC;AAClF,CAAC,CAAC;AAEF,MAAM,UAAU,yBAAyB,CAAC,KAAwB;IAChE,0BAA0B,CAAC,KAAK,EAAE,aAAa,EAAE,8BAA8B,CAAC,CAAC;AACnF,CAAC"}
@@ -1,4 +1,5 @@
1
- import type { BlurEffect, CanvasRenderEffectRunner, CanvasRenderTarget } from '@flighthq/types/contract';
1
+ import type { BlurEffect, CanvasRenderEffectRunner, CanvasRenderState, CanvasRenderTarget } from '@flighthq/types/contract';
2
2
  export declare function applyBlurEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, effect: Readonly<BlurEffect>): void;
3
3
  export declare const defaultCanvasBlurEffectRunner: CanvasRenderEffectRunner;
4
+ export declare function registerCanvasBlurEffect(state: CanvasRenderState): void;
4
5
  //# sourceMappingURL=canvasBlurEffect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"canvasBlurEffect.d.ts","sourceRoot":"","sources":["../src/canvasBlurEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAOzG,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,GAC3B,IAAI,CAKN;AAED,eAAO,MAAM,6BAA6B,EAAE,wBAE3C,CAAC"}
1
+ {"version":3,"file":"canvasBlurEffect.d.ts","sourceRoot":"","sources":["../src/canvasBlurEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAQlC,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,GAC3B,IAAI,CAKN;AAED,eAAO,MAAM,6BAA6B,EAAE,wBAE3C,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAEvE"}
@@ -1,4 +1,5 @@
1
1
  import { drawCanvasEffectPass } from './canvasEffectCompositing';
2
+ import { registerCanvasRenderEffect } from './canvasRenderEffectRegistry';
2
3
  // Plain Gaussian blur via the Canvas 2D `blur()` CSS filter — the same primitive the canvas bloom
3
4
  // branch uses. Canvas `blur()` is isotropic (a single radius), so the per-axis `blurX`/`blurY` sigmas
4
5
  // are averaged into one radius; a non-positive radius passes the image through unchanged.
@@ -11,4 +12,7 @@ export function applyBlurEffectToCanvas(source, dest, effect) {
11
12
  export const defaultCanvasBlurEffectRunner = (ctx, effect) => {
12
13
  applyBlurEffectToCanvas(ctx.source, ctx.dest, effect);
13
14
  };
15
+ export function registerCanvasBlurEffect(state) {
16
+ registerCanvasRenderEffect(state, 'BlurEffect', defaultCanvasBlurEffectRunner);
17
+ }
14
18
  //# sourceMappingURL=canvasBlurEffect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"canvasBlurEffect.js","sourceRoot":"","sources":["../src/canvasBlurEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,kGAAkG;AAClG,sGAAsG;AACtG,0FAA0F;AAC1F,MAAM,UAAU,uBAAuB,CACrC,MAAoC,EACpC,IAAkC,EAClC,MAA4B;IAE5B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAChD,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,MAAM,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,CAAC,MAAM,6BAA6B,GAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACrF,uBAAuB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAoB,CAAC,CAAC;AACtE,CAAC,CAAC"}
1
+ {"version":3,"file":"canvasBlurEffect.js","sourceRoot":"","sources":["../src/canvasBlurEffect.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,kGAAkG;AAClG,sGAAsG;AACtG,0FAA0F;AAC1F,MAAM,UAAU,uBAAuB,CACrC,MAAoC,EACpC,IAAkC,EAClC,MAA4B;IAE5B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAChD,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,MAAM,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,CAAC,MAAM,6BAA6B,GAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACrF,uBAAuB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAoB,CAAC,CAAC;AACtE,CAAC,CAAC;AAEF,MAAM,UAAU,wBAAwB,CAAC,KAAwB;IAC/D,0BAA0B,CAAC,KAAK,EAAE,YAAY,EAAE,6BAA6B,CAAC,CAAC;AACjF,CAAC"}
@@ -1,3 +1,4 @@
1
1
  import type { CanvasRenderTarget } from '@flighthq/types/contract';
2
2
  export declare function applyColorMatrixPassToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, matrix: ReadonlyArray<number>): void;
3
+ export declare function applyColorMatrixToImageDataBytes(data: Uint8ClampedArray, pixelCount: number, matrix: ReadonlyArray<number>): void;
3
4
  //# sourceMappingURL=canvasColorMatrixPass.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"canvasColorMatrixPass.d.ts","sourceRoot":"","sources":["../src/canvasColorMatrixPass.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AASnE,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,GAC5B,IAAI,CAmCN"}
1
+ {"version":3,"file":"canvasColorMatrixPass.d.ts","sourceRoot":"","sources":["../src/canvasColorMatrixPass.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAQnE,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,GAC5B,IAAI,CAIN;AAMD,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,iBAAiB,EACvB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,GAC5B,IAAI,CAiCN"}
@@ -2,9 +2,17 @@ import { drawCanvasImageDataPass } from './canvasEffectCompositing';
2
2
  // Generic pointwise color-matrix pass — the single fold-in realization for the whole matrix-tier
3
3
  // Adjustment family on Canvas 2D. A run of consecutive matrix-tier adjustments fuses to ONE 4×5 matrix
4
4
  // (in the adjustments colorMatrixMath convention: linear RGBA coefficients + normalized-linear bias
5
- // column) and runs through this one per-pixel pass instead of one pass per op. ImageData channels are
6
- // byte-domain, so only the normalized bias column is scaled by 255 before the clamped store.
5
+ // column) and runs through this one per-pixel pass instead of one pass per op.
7
6
  export function applyColorMatrixPassToCanvas(source, dest, matrix) {
7
+ drawCanvasImageDataPass(dest, source, (data, pixelCount) => {
8
+ applyColorMatrixToImageDataBytes(data, pixelCount, matrix);
9
+ });
10
+ }
11
+ // The pure per-pixel kernel of the color-matrix pass, exported separately so the matrix math can be
12
+ // exercised against a plain byte array with no canvas context and no module substitution. ImageData
13
+ // channels are byte-domain, so only the normalized-linear bias column is scaled by 255 before the
14
+ // clamped store.
15
+ export function applyColorMatrixToImageDataBytes(data, pixelCount, matrix) {
8
16
  const m0 = matrix[0] ?? 0;
9
17
  const m1 = matrix[1] ?? 0;
10
18
  const m2 = matrix[2] ?? 0;
@@ -25,19 +33,17 @@ export function applyColorMatrixPassToCanvas(source, dest, matrix) {
25
33
  const m17 = matrix[17] ?? 0;
26
34
  const m18 = matrix[18] ?? 0;
27
35
  const m19 = matrix[19] ?? 0;
28
- drawCanvasImageDataPass(dest, source, (data, pixelCount) => {
29
- for (let i = 0; i < pixelCount; i++) {
30
- const p = i * 4;
31
- const r = data[p];
32
- const g = data[p + 1];
33
- const b = data[p + 2];
34
- const a = data[p + 3];
35
- // Uint8ClampedArray clamps stores to 0–255, so an explicit clamp is unnecessary.
36
- data[p] = m0 * r + m1 * g + m2 * b + m3 * a + m4 * 255;
37
- data[p + 1] = m5 * r + m6 * g + m7 * b + m8 * a + m9 * 255;
38
- data[p + 2] = m10 * r + m11 * g + m12 * b + m13 * a + m14 * 255;
39
- data[p + 3] = m15 * r + m16 * g + m17 * b + m18 * a + m19 * 255;
40
- }
41
- });
36
+ for (let i = 0; i < pixelCount; i++) {
37
+ const p = i * 4;
38
+ const r = data[p];
39
+ const g = data[p + 1];
40
+ const b = data[p + 2];
41
+ const a = data[p + 3];
42
+ // Uint8ClampedArray clamps stores to 0–255, so an explicit clamp is unnecessary.
43
+ data[p] = m0 * r + m1 * g + m2 * b + m3 * a + m4 * 255;
44
+ data[p + 1] = m5 * r + m6 * g + m7 * b + m8 * a + m9 * 255;
45
+ data[p + 2] = m10 * r + m11 * g + m12 * b + m13 * a + m14 * 255;
46
+ data[p + 3] = m15 * r + m16 * g + m17 * b + m18 * a + m19 * 255;
47
+ }
42
48
  }
43
49
  //# sourceMappingURL=canvasColorMatrixPass.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"canvasColorMatrixPass.js","sourceRoot":"","sources":["../src/canvasColorMatrixPass.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"canvasColorMatrixPass.js","sourceRoot":"","sources":["../src/canvasColorMatrixPass.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { CanvasRenderEffectRunner, CanvasRenderState, CanvasRenderTarget, CompositeEffect, CompositeOperator } from '@flighthq/types/contract';
2
+ export declare function applyCompositeEffectToCanvas(state: CanvasRenderState, source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, effect: Readonly<CompositeEffect>): void;
3
+ export declare const defaultCanvasCompositeEffectRunner: CanvasRenderEffectRunner;
4
+ export declare function getCanvasCompositeEffectOperation(operator: CompositeOperator): GlobalCompositeOperation;
5
+ export declare function registerCanvasCompositeEffect(state: CanvasRenderState): void;
6
+ //# sourceMappingURL=canvasCompositeEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasCompositeEffect.d.ts","sourceRoot":"","sources":["../src/canvasCompositeEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EAClB,MAAM,0BAA0B,CAAC;AAsBlC,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,GAChC,IAAI,CAqBN;AAED,eAAO,MAAM,kCAAkC,EAAE,wBAEhD,CAAC;AASF,wBAAgB,iCAAiC,CAAC,QAAQ,EAAE,iBAAiB,GAAG,wBAAwB,CAEvG;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAE5E"}
@@ -0,0 +1,71 @@
1
+ import { CompositeOperator as CompositeOperatorValues } from '@flighthq/types/contract';
2
+ import { getCanvasBlendEffectBackdrop } from './canvasBlendEffect';
3
+ import { registerCanvasRenderEffect } from './canvasRenderEffectRegistry';
4
+ // Porter-Duff composite pass: lay down a registered backdrop, then draw the incoming layer over it under
5
+ // the Canvas 2D operation named by the effect's `operator`. This is the Canvas realization of the
6
+ // CompositeEffect — the coverage-combining sibling of the color-mixing BlendEffect.
7
+ //
8
+ // Canvas 2D owns this vocabulary outright: `globalCompositeOperation` IS the Porter-Duff set, and the
9
+ // CompositeOperator names were taken from it, so ten of the eleven operators are a direct rename and the
10
+ // GL pass's `Fa*layer + Fb*backdrop` factor maths has no counterpart here. `Clear` is the exception —
11
+ // Canvas has no 'clear' operation — and it is realized by clearing the target and drawing neither input,
12
+ // which is what both coverage factors being zero means.
13
+ //
14
+ // The backdrop registry is shared with BlendEffect, matching GL, where both effects read
15
+ // getGlBlendEffectBackdrop. A null or unregistered key composites against an implicit TRANSPARENT
16
+ // backdrop rather than erroring, and that is load-bearing rather than a fallback: it is what makes the
17
+ // operator still meaningful with nothing registered. SourceOver reduces to a passthrough, while the
18
+ // masking operators (SourceIn, DestinationIn, DestinationAtop) reduce to a clear, because compositing
19
+ // against zero coverage is exactly what they are defined to do.
20
+ export function applyCompositeEffectToCanvas(state, source, dest, effect) {
21
+ const ctx = dest.context;
22
+ ctx.save();
23
+ ctx.setTransform(1, 0, 0, 1, 0, 0);
24
+ ctx.globalAlpha = 1;
25
+ ctx.globalCompositeOperation = 'source-over';
26
+ ctx.filter = 'none';
27
+ ctx.clearRect(0, 0, dest.width, dest.height);
28
+ // Clear discards both inputs by definition, so it must not draw the backdrop either — the cleared
29
+ // target IS the result. Returning before the backdrop draw is the whole implementation.
30
+ if (effect.operator !== CompositeOperatorValues.Clear) {
31
+ const backdrop = getCanvasBlendEffectBackdrop(state, effect.backdropKey ?? null);
32
+ // The backdrop is the DESTINATION every operator is defined against, so it has to be in the target
33
+ // before the layer lands. Its absence is a transparent destination, not a skipped composite.
34
+ if (backdrop !== null)
35
+ ctx.drawImage(backdrop.canvas, 0, 0);
36
+ ctx.globalCompositeOperation = getCanvasCompositeEffectOperation(effect.operator);
37
+ ctx.drawImage(source.canvas, 0, 0);
38
+ }
39
+ ctx.restore();
40
+ }
41
+ export const defaultCanvasCompositeEffectRunner = (ctx, effect) => {
42
+ applyCompositeEffectToCanvas(ctx.state, ctx.source, ctx.dest, effect);
43
+ };
44
+ // Maps a CompositeOperator to the Canvas 2D globalCompositeOperation that realizes it. An unrecognized
45
+ // operator — a vendor-prefixed one Canvas has never heard of — falls back to 'source-over', matching the
46
+ // GL pass, which maps an unknown operator to the SourceOver branch.
47
+ //
48
+ // `Clear` is deliberately absent from the table: Canvas has no 'clear' operation, and the caller above
49
+ // handles it by clearing rather than by drawing. Asking for it here returns the SourceOver fallback,
50
+ // which is why that branch must never reach this function.
51
+ export function getCanvasCompositeEffectOperation(operator) {
52
+ return COMPOSITE_OPERATOR_OPERATION[operator] ?? 'source-over';
53
+ }
54
+ export function registerCanvasCompositeEffect(state) {
55
+ registerCanvasRenderEffect(state, 'CompositeEffect', defaultCanvasCompositeEffectRunner);
56
+ }
57
+ // CompositeOperator → Canvas 2D globalCompositeOperation. Ten of the eleven operators are a direct
58
+ // rename of the same Porter-Duff term; `Clear` has no Canvas operation and is handled by the caller.
59
+ const COMPOSITE_OPERATOR_OPERATION = {
60
+ [CompositeOperatorValues.Copy]: 'copy',
61
+ [CompositeOperatorValues.DestinationAtop]: 'destination-atop',
62
+ [CompositeOperatorValues.DestinationIn]: 'destination-in',
63
+ [CompositeOperatorValues.DestinationOut]: 'destination-out',
64
+ [CompositeOperatorValues.DestinationOver]: 'destination-over',
65
+ [CompositeOperatorValues.SourceAtop]: 'source-atop',
66
+ [CompositeOperatorValues.SourceIn]: 'source-in',
67
+ [CompositeOperatorValues.SourceOut]: 'source-out',
68
+ [CompositeOperatorValues.SourceOver]: 'source-over',
69
+ [CompositeOperatorValues.Xor]: 'xor',
70
+ };
71
+ //# sourceMappingURL=canvasCompositeEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasCompositeEffect.js","sourceRoot":"","sources":["../src/canvasCompositeEffect.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
- import type { CanvasRenderEffectRunner, CanvasRenderTarget, CanvasRenderTargetPool, DropShadowEffect } from '@flighthq/types/contract';
1
+ import type { CanvasRenderEffectRunner, CanvasRenderState, CanvasRenderTarget, CanvasRenderTargetPool, DropShadowEffect } from '@flighthq/types/contract';
2
2
  export declare function applyDropShadowEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, effect: Readonly<DropShadowEffect>): void;
3
3
  export declare function applyDropShadowEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, pool: CanvasRenderTargetPool, effect: Readonly<DropShadowEffect>): void;
4
4
  export declare const defaultCanvasDropShadowEffectRunner: CanvasRenderEffectRunner;
5
+ export declare function registerCanvasDropShadowEffect(state: CanvasRenderState): void;
5
6
  //# sourceMappingURL=canvasDropShadowEffect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"canvasDropShadowEffect.d.ts","sourceRoot":"","sources":["../src/canvasDropShadowEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EACjB,MAAM,0BAA0B,CAAC;AAmBlC,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GACjC,IAAI,CAAC;AACR,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,IAAI,EAAE,sBAAsB,EAC5B,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GACjC,IAAI,CAAC;AAkBR,eAAO,MAAM,mCAAmC,EAAE,wBAEjD,CAAC"}
1
+ {"version":3,"file":"canvasDropShadowEffect.d.ts","sourceRoot":"","sources":["../src/canvasDropShadowEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EACjB,MAAM,0BAA0B,CAAC;AAoBlC,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GACjC,IAAI,CAAC;AACR,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,IAAI,EAAE,sBAAsB,EAC5B,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GACjC,IAAI,CAAC;AAkBR,eAAO,MAAM,mCAAmC,EAAE,wBAEjD,CAAC;AAEF,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAE7E"}
@@ -1,6 +1,7 @@
1
1
  import { drawCanvasEffectPass } from './canvasEffectCompositing';
2
2
  import { computeDropShadowEffectCss } 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 applyDropShadowEffectToCanvas(source, dest, poolOrEffect, maybeEffect) {
6
7
  const effect = maybeEffect ?? poolOrEffect;
@@ -15,6 +16,9 @@ export function applyDropShadowEffectToCanvas(source, dest, poolOrEffect, maybeE
15
16
  export const defaultCanvasDropShadowEffectRunner = (ctx, effect) => {
16
17
  applyDropShadowEffectToCanvas(ctx.source, ctx.dest, ctx.pool, effect);
17
18
  };
19
+ export function registerCanvasDropShadowEffect(state) {
20
+ registerCanvasRenderEffect(state, 'DropShadowEffect', defaultCanvasDropShadowEffectRunner);
21
+ }
18
22
  function applyDropShadowEffectToCanvasWithPool(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":"canvasDropShadowEffect.js","sourceRoot":"","sources":["../src/canvasDropShadowEffect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"canvasDropShadowEffect.js","sourceRoot":"","sources":["../src/canvasDropShadowEffect.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import type { CanvasRenderEffectRunner, CanvasRenderTarget, CanvasRenderTargetPool, FilmGrainEffect } from '@flighthq/types/contract';
1
+ import type { CanvasRenderEffectRunner, CanvasRenderState, CanvasRenderTarget, CanvasRenderTargetPool, FilmGrainEffect } from '@flighthq/types/contract';
2
2
  export declare function applyFilmGrainEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, pool: CanvasRenderTargetPool, effect: Readonly<FilmGrainEffect>): void;
3
3
  export declare const defaultCanvasFilmGrainEffectRunner: CanvasRenderEffectRunner;
4
+ export declare function registerCanvasFilmGrainEffect(state: CanvasRenderState): void;
4
5
  //# sourceMappingURL=canvasFilmGrainEffect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"canvasFilmGrainEffect.d.ts","sourceRoot":"","sources":["../src/canvasFilmGrainEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAQlC,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,CA4CN;AAED,eAAO,MAAM,kCAAkC,EAAE,wBAEhD,CAAC"}
1
+ {"version":3,"file":"canvasFilmGrainEffect.d.ts","sourceRoot":"","sources":["../src/canvasFilmGrainEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,EAChB,MAAM,0BAA0B,CAAC;AASlC,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,CA4CN;AAED,eAAO,MAAM,kCAAkC,EAAE,wBAEhD,CAAC;AAEF,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAE5E"}
@@ -1,5 +1,6 @@
1
1
  import { drawCanvasEffectPass } from './canvasEffectCompositing';
2
2
  import { acquireCanvasRenderTarget, releaseCanvasRenderTarget } from './canvasRenderEffectPipeline';
3
+ import { registerCanvasRenderEffect } from './canvasRenderEffectRegistry';
3
4
  // Film grain (REAL): draw the scene, then overlay a tiled noise pattern at `intensity` via the
4
5
  // 'overlay' composite op. The noise is generated once into a small scratch canvas (cell size from
5
6
  // `size`, jittered by `seed`) and tiled across the frame as a repeating fill pattern.
@@ -47,4 +48,7 @@ export function applyFilmGrainEffectToCanvas(source, dest, pool, effect) {
47
48
  export const defaultCanvasFilmGrainEffectRunner = (ctx, effect) => {
48
49
  applyFilmGrainEffectToCanvas(ctx.source, ctx.dest, ctx.pool, effect);
49
50
  };
51
+ export function registerCanvasFilmGrainEffect(state) {
52
+ registerCanvasRenderEffect(state, 'FilmGrainEffect', defaultCanvasFilmGrainEffectRunner);
53
+ }
50
54
  //# sourceMappingURL=canvasFilmGrainEffect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"canvasFilmGrainEffect.js","sourceRoot":"","sources":["../src/canvasFilmGrainEffect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"canvasFilmGrainEffect.js","sourceRoot":"","sources":["../src/canvasFilmGrainEffect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { CanvasRenderEffectRunner, CanvasRenderState, CanvasRenderTarget, CanvasRenderTargetPool, GradientBevelEffect } from '@flighthq/types/contract';
2
+ export declare function applyGradientBevelEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, effect: Readonly<GradientBevelEffect>): void;
3
+ export declare function applyGradientBevelEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, pool: CanvasRenderTargetPool, effect: Readonly<GradientBevelEffect>): void;
4
+ export declare const defaultCanvasGradientBevelEffectRunner: CanvasRenderEffectRunner;
5
+ export declare function registerCanvasGradientBevelEffect(state: CanvasRenderState): void;
6
+ //# sourceMappingURL=canvasGradientBevelEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasGradientBevelEffect.d.ts","sourceRoot":"","sources":["../src/canvasGradientBevelEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAwBlC,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,MAAM,EAAE,QAAQ,CAAC,mBAAmB,CAAC,GACpC,IAAI,CAAC;AACR,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,IAAI,EAAE,sBAAsB,EAC5B,MAAM,EAAE,QAAQ,CAAC,mBAAmB,CAAC,GACpC,IAAI,CAAC;AAYR,eAAO,MAAM,sCAAsC,EAAE,wBAEpD,CAAC;AAEF,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAEhF"}