@flighthq/effects-canvas 0.1.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 (245) hide show
  1. package/dist/canvasBloomEffect.d.ts +4 -0
  2. package/dist/canvasBloomEffect.d.ts.map +1 -0
  3. package/dist/canvasBloomEffect.js +43 -0
  4. package/dist/canvasBloomEffect.js.map +1 -0
  5. package/dist/canvasBokehDepthOfFieldEffect.d.ts +4 -0
  6. package/dist/canvasBokehDepthOfFieldEffect.d.ts.map +1 -0
  7. package/dist/canvasBokehDepthOfFieldEffect.js +10 -0
  8. package/dist/canvasBokehDepthOfFieldEffect.js.map +1 -0
  9. package/dist/canvasBrightnessContrastEffect.d.ts +4 -0
  10. package/dist/canvasBrightnessContrastEffect.d.ts.map +1 -0
  11. package/dist/canvasBrightnessContrastEffect.js +13 -0
  12. package/dist/canvasBrightnessContrastEffect.js.map +1 -0
  13. package/dist/canvasCameraMotionBlurEffect.d.ts +4 -0
  14. package/dist/canvasCameraMotionBlurEffect.d.ts.map +1 -0
  15. package/dist/canvasCameraMotionBlurEffect.js +11 -0
  16. package/dist/canvasCameraMotionBlurEffect.js.map +1 -0
  17. package/dist/canvasChannelMixerEffect.d.ts +4 -0
  18. package/dist/canvasChannelMixerEffect.d.ts.map +1 -0
  19. package/dist/canvasChannelMixerEffect.js +11 -0
  20. package/dist/canvasChannelMixerEffect.js.map +1 -0
  21. package/dist/canvasChromaticAberrationEffect.d.ts +4 -0
  22. package/dist/canvasChromaticAberrationEffect.d.ts.map +1 -0
  23. package/dist/canvasChromaticAberrationEffect.js +11 -0
  24. package/dist/canvasChromaticAberrationEffect.js.map +1 -0
  25. package/dist/canvasColorGradeEffect.d.ts +4 -0
  26. package/dist/canvasColorGradeEffect.d.ts.map +1 -0
  27. package/dist/canvasColorGradeEffect.js +21 -0
  28. package/dist/canvasColorGradeEffect.js.map +1 -0
  29. package/dist/canvasCrtEffect.d.ts +4 -0
  30. package/dist/canvasCrtEffect.d.ts.map +1 -0
  31. package/dist/canvasCrtEffect.js +11 -0
  32. package/dist/canvasCrtEffect.js.map +1 -0
  33. package/dist/canvasDirectionalBlurEffect.d.ts +4 -0
  34. package/dist/canvasDirectionalBlurEffect.d.ts.map +1 -0
  35. package/dist/canvasDirectionalBlurEffect.js +11 -0
  36. package/dist/canvasDirectionalBlurEffect.js.map +1 -0
  37. package/dist/canvasDisplacementEffect.d.ts +4 -0
  38. package/dist/canvasDisplacementEffect.d.ts.map +1 -0
  39. package/dist/canvasDisplacementEffect.js +10 -0
  40. package/dist/canvasDisplacementEffect.js.map +1 -0
  41. package/dist/canvasDitherEffect.d.ts +4 -0
  42. package/dist/canvasDitherEffect.d.ts.map +1 -0
  43. package/dist/canvasDitherEffect.js +11 -0
  44. package/dist/canvasDitherEffect.js.map +1 -0
  45. package/dist/canvasEffectCompositing.d.ts +6 -0
  46. package/dist/canvasEffectCompositing.d.ts.map +1 -0
  47. package/dist/canvasEffectCompositing.js +77 -0
  48. package/dist/canvasEffectCompositing.js.map +1 -0
  49. package/dist/canvasExposureEffect.d.ts +4 -0
  50. package/dist/canvasExposureEffect.d.ts.map +1 -0
  51. package/dist/canvasExposureEffect.js +11 -0
  52. package/dist/canvasExposureEffect.js.map +1 -0
  53. package/dist/canvasFilmGrainEffect.d.ts +4 -0
  54. package/dist/canvasFilmGrainEffect.d.ts.map +1 -0
  55. package/dist/canvasFilmGrainEffect.js +50 -0
  56. package/dist/canvasFilmGrainEffect.js.map +1 -0
  57. package/dist/canvasFxaaEffect.d.ts +4 -0
  58. package/dist/canvasFxaaEffect.d.ts.map +1 -0
  59. package/dist/canvasFxaaEffect.js +11 -0
  60. package/dist/canvasFxaaEffect.js.map +1 -0
  61. package/dist/canvasGlitchEffect.d.ts +4 -0
  62. package/dist/canvasGlitchEffect.d.ts.map +1 -0
  63. package/dist/canvasGlitchEffect.js +11 -0
  64. package/dist/canvasGlitchEffect.js.map +1 -0
  65. package/dist/canvasGodRaysEffect.d.ts +4 -0
  66. package/dist/canvasGodRaysEffect.d.ts.map +1 -0
  67. package/dist/canvasGodRaysEffect.js +11 -0
  68. package/dist/canvasGodRaysEffect.js.map +1 -0
  69. package/dist/canvasGrayscaleEffect.d.ts +4 -0
  70. package/dist/canvasGrayscaleEffect.d.ts.map +1 -0
  71. package/dist/canvasGrayscaleEffect.js +10 -0
  72. package/dist/canvasGrayscaleEffect.js.map +1 -0
  73. package/dist/canvasHalftoneEffect.d.ts +4 -0
  74. package/dist/canvasHalftoneEffect.d.ts.map +1 -0
  75. package/dist/canvasHalftoneEffect.js +10 -0
  76. package/dist/canvasHalftoneEffect.js.map +1 -0
  77. package/dist/canvasHueSaturationEffect.d.ts +4 -0
  78. package/dist/canvasHueSaturationEffect.d.ts.map +1 -0
  79. package/dist/canvasHueSaturationEffect.js +13 -0
  80. package/dist/canvasHueSaturationEffect.js.map +1 -0
  81. package/dist/canvasInvertEffect.d.ts +4 -0
  82. package/dist/canvasInvertEffect.d.ts.map +1 -0
  83. package/dist/canvasInvertEffect.js +10 -0
  84. package/dist/canvasInvertEffect.js.map +1 -0
  85. package/dist/canvasKuwaharaEffect.d.ts +4 -0
  86. package/dist/canvasKuwaharaEffect.d.ts.map +1 -0
  87. package/dist/canvasKuwaharaEffect.js +11 -0
  88. package/dist/canvasKuwaharaEffect.js.map +1 -0
  89. package/dist/canvasLensDirtEffect.d.ts +4 -0
  90. package/dist/canvasLensDirtEffect.d.ts.map +1 -0
  91. package/dist/canvasLensDirtEffect.js +11 -0
  92. package/dist/canvasLensDirtEffect.js.map +1 -0
  93. package/dist/canvasLensDistortionEffect.d.ts +4 -0
  94. package/dist/canvasLensDistortionEffect.d.ts.map +1 -0
  95. package/dist/canvasLensDistortionEffect.js +10 -0
  96. package/dist/canvasLensDistortionEffect.js.map +1 -0
  97. package/dist/canvasLensFlareEffect.d.ts +4 -0
  98. package/dist/canvasLensFlareEffect.d.ts.map +1 -0
  99. package/dist/canvasLensFlareEffect.js +11 -0
  100. package/dist/canvasLensFlareEffect.js.map +1 -0
  101. package/dist/canvasLiftGammaGainEffect.d.ts +4 -0
  102. package/dist/canvasLiftGammaGainEffect.d.ts.map +1 -0
  103. package/dist/canvasLiftGammaGainEffect.js +11 -0
  104. package/dist/canvasLiftGammaGainEffect.js.map +1 -0
  105. package/dist/canvasLookupTableGradeEffect.d.ts +4 -0
  106. package/dist/canvasLookupTableGradeEffect.d.ts.map +1 -0
  107. package/dist/canvasLookupTableGradeEffect.js +10 -0
  108. package/dist/canvasLookupTableGradeEffect.js.map +1 -0
  109. package/dist/canvasMotionBlurEffect.d.ts +4 -0
  110. package/dist/canvasMotionBlurEffect.d.ts.map +1 -0
  111. package/dist/canvasMotionBlurEffect.js +11 -0
  112. package/dist/canvasMotionBlurEffect.js.map +1 -0
  113. package/dist/canvasOutlineEffect.d.ts +4 -0
  114. package/dist/canvasOutlineEffect.d.ts.map +1 -0
  115. package/dist/canvasOutlineEffect.js +11 -0
  116. package/dist/canvasOutlineEffect.js.map +1 -0
  117. package/dist/canvasPixelateEffect.d.ts +4 -0
  118. package/dist/canvasPixelateEffect.d.ts.map +1 -0
  119. package/dist/canvasPixelateEffect.js +36 -0
  120. package/dist/canvasPixelateEffect.js.map +1 -0
  121. package/dist/canvasPosterizeEffect.d.ts +4 -0
  122. package/dist/canvasPosterizeEffect.d.ts.map +1 -0
  123. package/dist/canvasPosterizeEffect.js +10 -0
  124. package/dist/canvasPosterizeEffect.js.map +1 -0
  125. package/dist/canvasRadialBlurEffect.d.ts +4 -0
  126. package/dist/canvasRadialBlurEffect.d.ts.map +1 -0
  127. package/dist/canvasRadialBlurEffect.js +11 -0
  128. package/dist/canvasRadialBlurEffect.js.map +1 -0
  129. package/dist/canvasRenderEffectPipeline.d.ts +9 -0
  130. package/dist/canvasRenderEffectPipeline.d.ts.map +1 -0
  131. package/dist/canvasRenderEffectPipeline.js +97 -0
  132. package/dist/canvasRenderEffectPipeline.js.map +1 -0
  133. package/dist/canvasRenderEffectRegistration.d.ts +7 -0
  134. package/dist/canvasRenderEffectRegistration.d.ts.map +1 -0
  135. package/dist/canvasRenderEffectRegistration.js +150 -0
  136. package/dist/canvasRenderEffectRegistration.js.map +1 -0
  137. package/dist/canvasRenderEffectRegistry.d.ts +5 -0
  138. package/dist/canvasRenderEffectRegistry.d.ts.map +1 -0
  139. package/dist/canvasRenderEffectRegistry.js +24 -0
  140. package/dist/canvasRenderEffectRegistry.js.map +1 -0
  141. package/dist/canvasScanlinesEffect.d.ts +4 -0
  142. package/dist/canvasScanlinesEffect.d.ts.map +1 -0
  143. package/dist/canvasScanlinesEffect.js +28 -0
  144. package/dist/canvasScanlinesEffect.js.map +1 -0
  145. package/dist/canvasScreenSpaceFogEffect.d.ts +4 -0
  146. package/dist/canvasScreenSpaceFogEffect.d.ts.map +1 -0
  147. package/dist/canvasScreenSpaceFogEffect.js +10 -0
  148. package/dist/canvasScreenSpaceFogEffect.js.map +1 -0
  149. package/dist/canvasSepiaEffect.d.ts +4 -0
  150. package/dist/canvasSepiaEffect.d.ts.map +1 -0
  151. package/dist/canvasSepiaEffect.js +10 -0
  152. package/dist/canvasSepiaEffect.js.map +1 -0
  153. package/dist/canvasSharpenEffect.d.ts +4 -0
  154. package/dist/canvasSharpenEffect.d.ts.map +1 -0
  155. package/dist/canvasSharpenEffect.js +11 -0
  156. package/dist/canvasSharpenEffect.js.map +1 -0
  157. package/dist/canvasSketchEffect.d.ts +4 -0
  158. package/dist/canvasSketchEffect.d.ts.map +1 -0
  159. package/dist/canvasSketchEffect.js +11 -0
  160. package/dist/canvasSketchEffect.js.map +1 -0
  161. package/dist/canvasSmaaEffect.d.ts +4 -0
  162. package/dist/canvasSmaaEffect.d.ts.map +1 -0
  163. package/dist/canvasSmaaEffect.js +11 -0
  164. package/dist/canvasSmaaEffect.js.map +1 -0
  165. package/dist/canvasSsaoEffect.d.ts +4 -0
  166. package/dist/canvasSsaoEffect.d.ts.map +1 -0
  167. package/dist/canvasSsaoEffect.js +11 -0
  168. package/dist/canvasSsaoEffect.js.map +1 -0
  169. package/dist/canvasSsrEffect.d.ts +4 -0
  170. package/dist/canvasSsrEffect.d.ts.map +1 -0
  171. package/dist/canvasSsrEffect.js +11 -0
  172. package/dist/canvasSsrEffect.js.map +1 -0
  173. package/dist/canvasTaaEffect.d.ts +4 -0
  174. package/dist/canvasTaaEffect.d.ts.map +1 -0
  175. package/dist/canvasTaaEffect.js +11 -0
  176. package/dist/canvasTaaEffect.js.map +1 -0
  177. package/dist/canvasTiltShiftEffect.d.ts +4 -0
  178. package/dist/canvasTiltShiftEffect.d.ts.map +1 -0
  179. package/dist/canvasTiltShiftEffect.js +11 -0
  180. package/dist/canvasTiltShiftEffect.js.map +1 -0
  181. package/dist/canvasToneMapEffect.d.ts +4 -0
  182. package/dist/canvasToneMapEffect.d.ts.map +1 -0
  183. package/dist/canvasToneMapEffect.js +12 -0
  184. package/dist/canvasToneMapEffect.js.map +1 -0
  185. package/dist/canvasVignetteEffect.d.ts +4 -0
  186. package/dist/canvasVignetteEffect.d.ts.map +1 -0
  187. package/dist/canvasVignetteEffect.js +41 -0
  188. package/dist/canvasVignetteEffect.js.map +1 -0
  189. package/dist/canvasWhiteBalanceEffect.d.ts +4 -0
  190. package/dist/canvasWhiteBalanceEffect.d.ts.map +1 -0
  191. package/dist/canvasWhiteBalanceEffect.js +11 -0
  192. package/dist/canvasWhiteBalanceEffect.js.map +1 -0
  193. package/dist/index.d.ts +49 -0
  194. package/dist/index.d.ts.map +1 -0
  195. package/dist/index.js +49 -0
  196. package/dist/index.js.map +1 -0
  197. package/package.json +42 -0
  198. package/src/canvasBloomEffect.test.ts +13 -0
  199. package/src/canvasBokehDepthOfFieldEffect.test.ts +16 -0
  200. package/src/canvasBrightnessContrastEffect.test.ts +16 -0
  201. package/src/canvasCameraMotionBlurEffect.test.ts +16 -0
  202. package/src/canvasChannelMixerEffect.test.ts +13 -0
  203. package/src/canvasChromaticAberrationEffect.test.ts +16 -0
  204. package/src/canvasColorGradeEffect.test.ts +13 -0
  205. package/src/canvasCrtEffect.test.ts +13 -0
  206. package/src/canvasDirectionalBlurEffect.test.ts +16 -0
  207. package/src/canvasDisplacementEffect.test.ts +13 -0
  208. package/src/canvasDitherEffect.test.ts +13 -0
  209. package/src/canvasEffectCompositing.test.ts +63 -0
  210. package/src/canvasExposureEffect.test.ts +13 -0
  211. package/src/canvasFilmGrainEffect.test.ts +13 -0
  212. package/src/canvasFxaaEffect.test.ts +13 -0
  213. package/src/canvasGlitchEffect.test.ts +13 -0
  214. package/src/canvasGodRaysEffect.test.ts +13 -0
  215. package/src/canvasGrayscaleEffect.test.ts +13 -0
  216. package/src/canvasHalftoneEffect.test.ts +13 -0
  217. package/src/canvasHueSaturationEffect.test.ts +13 -0
  218. package/src/canvasInvertEffect.test.ts +13 -0
  219. package/src/canvasKuwaharaEffect.test.ts +13 -0
  220. package/src/canvasLensDirtEffect.test.ts +13 -0
  221. package/src/canvasLensDistortionEffect.test.ts +16 -0
  222. package/src/canvasLensFlareEffect.test.ts +13 -0
  223. package/src/canvasLiftGammaGainEffect.test.ts +13 -0
  224. package/src/canvasLookupTableGradeEffect.test.ts +16 -0
  225. package/src/canvasMotionBlurEffect.test.ts +13 -0
  226. package/src/canvasOutlineEffect.test.ts +13 -0
  227. package/src/canvasPixelateEffect.test.ts +13 -0
  228. package/src/canvasPosterizeEffect.test.ts +13 -0
  229. package/src/canvasRadialBlurEffect.test.ts +13 -0
  230. package/src/canvasRenderEffectPipeline.test.ts +66 -0
  231. package/src/canvasRenderEffectRegistration.test.ts +162 -0
  232. package/src/canvasRenderEffectRegistry.test.ts +41 -0
  233. package/src/canvasScanlinesEffect.test.ts +13 -0
  234. package/src/canvasScreenSpaceFogEffect.test.ts +16 -0
  235. package/src/canvasSepiaEffect.test.ts +13 -0
  236. package/src/canvasSharpenEffect.test.ts +13 -0
  237. package/src/canvasSketchEffect.test.ts +13 -0
  238. package/src/canvasSmaaEffect.test.ts +13 -0
  239. package/src/canvasSsaoEffect.test.ts +13 -0
  240. package/src/canvasSsrEffect.test.ts +13 -0
  241. package/src/canvasTaaEffect.test.ts +13 -0
  242. package/src/canvasTiltShiftEffect.test.ts +13 -0
  243. package/src/canvasToneMapEffect.test.ts +13 -0
  244. package/src/canvasVignetteEffect.test.ts +13 -0
  245. package/src/canvasWhiteBalanceEffect.test.ts +13 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasGlitchEffect.js","sourceRoot":"","sources":["../src/canvasGlitchEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,sFAAsF;AACtF,2GAA2G;AAC3G,6CAA6C;AAC7C,MAAM,UAAU,yBAAyB,CACvC,MAAoC,EACpC,IAAkC,EAClC,OAA+B;IAE/B,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,+BAA+B,GAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACvF,yBAAyB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAsB,CAAC,CAAC;AAC1E,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CanvasRenderEffectRunner, CanvasRenderTarget, GodRaysEffect } from '@flighthq/types';
2
+ export declare function applyGodRaysEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, _effect: Readonly<GodRaysEffect>): void;
3
+ export declare const defaultCanvasGodRaysEffectRunner: CanvasRenderEffectRunner;
4
+ //# sourceMappingURL=canvasGodRaysEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasGodRaysEffect.d.ts","sourceRoot":"","sources":["../src/canvasGodRaysEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAOnG,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,GAC/B,IAAI,CAEN;AAED,eAAO,MAAM,gCAAgC,EAAE,wBAE9C,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { passthroughCanvasEffectPass } from './canvasEffectCompositing';
2
+ // God rays (PASSTHROUGH): radial light scattering marches taps from each fragment toward a light
3
+ // position — a per-pixel multi-tap gather. No CSS filter equivalent, but expressible per-pixel via
4
+ // getImageData/putImageData; not yet implemented — passthrough for now.
5
+ export function applyGodRaysEffectToCanvas(source, dest, _effect) {
6
+ passthroughCanvasEffectPass(dest, source);
7
+ }
8
+ export const defaultCanvasGodRaysEffectRunner = (ctx, effect) => {
9
+ applyGodRaysEffectToCanvas(ctx.source, ctx.dest, effect);
10
+ };
11
+ //# sourceMappingURL=canvasGodRaysEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasGodRaysEffect.js","sourceRoot":"","sources":["../src/canvasGodRaysEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,iGAAiG;AACjG,mGAAmG;AACnG,wEAAwE;AACxE,MAAM,UAAU,0BAA0B,CACxC,MAAoC,EACpC,IAAkC,EAClC,OAAgC;IAEhC,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,gCAAgC,GAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACxF,0BAA0B,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAuB,CAAC,CAAC;AAC5E,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CanvasRenderEffectRunner, CanvasRenderTarget, GrayscaleEffect } from '@flighthq/types';
2
+ export declare function applyGrayscaleEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, effect: Readonly<GrayscaleEffect>): void;
3
+ export declare const defaultCanvasGrayscaleEffectRunner: CanvasRenderEffectRunner;
4
+ //# sourceMappingURL=canvasGrayscaleEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasGrayscaleEffect.d.ts","sourceRoot":"","sources":["../src/canvasGrayscaleEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAKrG,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,CAGN;AAED,eAAO,MAAM,kCAAkC,EAAE,wBAEhD,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { drawCanvasEffectPass } from './canvasEffectCompositing';
2
+ // Grayscale (REAL): CSS grayscale(intensity).
3
+ export function applyGrayscaleEffectToCanvas(source, dest, effect) {
4
+ const intensity = effect.intensity ?? 1;
5
+ drawCanvasEffectPass(dest, source, `grayscale(${intensity})`);
6
+ }
7
+ export const defaultCanvasGrayscaleEffectRunner = (ctx, effect) => {
8
+ applyGrayscaleEffectToCanvas(ctx.source, ctx.dest, effect);
9
+ };
10
+ //# sourceMappingURL=canvasGrayscaleEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasGrayscaleEffect.js","sourceRoot":"","sources":["../src/canvasGrayscaleEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,8CAA8C;AAC9C,MAAM,UAAU,4BAA4B,CAC1C,MAAoC,EACpC,IAAkC,EAClC,MAAiC;IAEjC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;IACxC,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,SAAS,GAAG,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,CAAC,MAAM,kCAAkC,GAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IAC1F,4BAA4B,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAyB,CAAC,CAAC;AAChF,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CanvasRenderEffectRunner, CanvasRenderTarget, HalftoneEffect } from '@flighthq/types';
2
+ export declare function applyHalftoneEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, _effect: Readonly<HalftoneEffect>): void;
3
+ export declare const defaultCanvasHalftoneEffectRunner: CanvasRenderEffectRunner;
4
+ //# sourceMappingURL=canvasHalftoneEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasHalftoneEffect.d.ts","sourceRoot":"","sources":["../src/canvasHalftoneEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAMpG,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,GAChC,IAAI,CAEN;AAED,eAAO,MAAM,iCAAiC,EAAE,wBAE/C,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { passthroughCanvasEffectPass } from './canvasEffectCompositing';
2
+ // Halftone (PASSTHROUGH): a rotated dot grid carved by per-pixel luminance. No CSS filter equivalent,
3
+ // but expressible per-pixel via getImageData/putImageData; not yet implemented — passthrough for now.
4
+ export function applyHalftoneEffectToCanvas(source, dest, _effect) {
5
+ passthroughCanvasEffectPass(dest, source);
6
+ }
7
+ export const defaultCanvasHalftoneEffectRunner = (ctx, effect) => {
8
+ applyHalftoneEffectToCanvas(ctx.source, ctx.dest, effect);
9
+ };
10
+ //# sourceMappingURL=canvasHalftoneEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasHalftoneEffect.js","sourceRoot":"","sources":["../src/canvasHalftoneEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,sGAAsG;AACtG,sGAAsG;AACtG,MAAM,UAAU,2BAA2B,CACzC,MAAoC,EACpC,IAAkC,EAClC,OAAiC;IAEjC,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,iCAAiC,GAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACzF,2BAA2B,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAwB,CAAC,CAAC;AAC9E,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CanvasRenderEffectRunner, CanvasRenderTarget, HueSaturationEffect } from '@flighthq/types';
2
+ export declare function applyHueSaturationEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, effect: Readonly<HueSaturationEffect>): void;
3
+ export declare const defaultCanvasHueSaturationEffectRunner: CanvasRenderEffectRunner;
4
+ //# sourceMappingURL=canvasHueSaturationEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasHueSaturationEffect.d.ts","sourceRoot":"","sources":["../src/canvasHueSaturationEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAMzG,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,CAKN;AAED,eAAO,MAAM,sCAAsC,EAAE,wBAEpD,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { drawCanvasEffectPass } from './canvasEffectCompositing';
2
+ // Hue/saturation (REAL): CSS hue-rotate(degrees) + saturate(). Lightness has no CSS filter equivalent
3
+ // and is folded into brightness() as a coarse approximation (additive lightness ~ brightness offset).
4
+ export function applyHueSaturationEffectToCanvas(source, dest, effect) {
5
+ const hue = effect.hue ?? 0;
6
+ const saturation = effect.saturation ?? 1;
7
+ const lightness = 1 + (effect.lightness ?? 0);
8
+ drawCanvasEffectPass(dest, source, `hue-rotate(${hue}deg) saturate(${saturation}) brightness(${lightness})`);
9
+ }
10
+ export const defaultCanvasHueSaturationEffectRunner = (ctx, effect) => {
11
+ applyHueSaturationEffectToCanvas(ctx.source, ctx.dest, effect);
12
+ };
13
+ //# sourceMappingURL=canvasHueSaturationEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasHueSaturationEffect.js","sourceRoot":"","sources":["../src/canvasHueSaturationEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,sGAAsG;AACtG,sGAAsG;AACtG,MAAM,UAAU,gCAAgC,CAC9C,MAAoC,EACpC,IAAkC,EAClC,MAAqC;IAErC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5B,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;IAC9C,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,GAAG,iBAAiB,UAAU,gBAAgB,SAAS,GAAG,CAAC,CAAC;AAC/G,CAAC;AAED,MAAM,CAAC,MAAM,sCAAsC,GAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IAC9F,gCAAgC,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAA6B,CAAC,CAAC;AACxF,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CanvasRenderEffectRunner, CanvasRenderTarget, InvertEffect } from '@flighthq/types';
2
+ export declare function applyInvertEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, effect: Readonly<InvertEffect>): void;
3
+ export declare const defaultCanvasInvertEffectRunner: CanvasRenderEffectRunner;
4
+ //# sourceMappingURL=canvasInvertEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasInvertEffect.d.ts","sourceRoot":"","sources":["../src/canvasInvertEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAKlG,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,GAC7B,IAAI,CAGN;AAED,eAAO,MAAM,+BAA+B,EAAE,wBAE7C,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { drawCanvasEffectPass } from './canvasEffectCompositing';
2
+ // Invert (REAL): CSS invert(intensity).
3
+ export function applyInvertEffectToCanvas(source, dest, effect) {
4
+ const intensity = effect.intensity ?? 1;
5
+ drawCanvasEffectPass(dest, source, `invert(${intensity})`);
6
+ }
7
+ export const defaultCanvasInvertEffectRunner = (ctx, effect) => {
8
+ applyInvertEffectToCanvas(ctx.source, ctx.dest, effect);
9
+ };
10
+ //# sourceMappingURL=canvasInvertEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasInvertEffect.js","sourceRoot":"","sources":["../src/canvasInvertEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,wCAAwC;AACxC,MAAM,UAAU,yBAAyB,CACvC,MAAoC,EACpC,IAAkC,EAClC,MAA8B;IAE9B,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;IACxC,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,SAAS,GAAG,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,MAAM,+BAA+B,GAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACvF,yBAAyB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAsB,CAAC,CAAC;AAC1E,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CanvasRenderEffectRunner, CanvasRenderTarget, KuwaharaEffect } from '@flighthq/types';
2
+ export declare function applyKuwaharaEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, _effect: Readonly<KuwaharaEffect>): void;
3
+ export declare const defaultCanvasKuwaharaEffectRunner: CanvasRenderEffectRunner;
4
+ //# sourceMappingURL=canvasKuwaharaEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasKuwaharaEffect.d.ts","sourceRoot":"","sources":["../src/canvasKuwaharaEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAOpG,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,GAChC,IAAI,CAEN;AAED,eAAO,MAAM,iCAAiC,EAAE,wBAE/C,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { passthroughCanvasEffectPass } from './canvasEffectCompositing';
2
+ // Kuwahara (PASSTHROUGH): edge-preserving quadrant variance smoothing is a per-pixel neighborhood
3
+ // operation. No CSS filter equivalent, but expressible per-pixel via getImageData/putImageData; not yet
4
+ // implemented — passthrough for now.
5
+ export function applyKuwaharaEffectToCanvas(source, dest, _effect) {
6
+ passthroughCanvasEffectPass(dest, source);
7
+ }
8
+ export const defaultCanvasKuwaharaEffectRunner = (ctx, effect) => {
9
+ applyKuwaharaEffectToCanvas(ctx.source, ctx.dest, effect);
10
+ };
11
+ //# sourceMappingURL=canvasKuwaharaEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasKuwaharaEffect.js","sourceRoot":"","sources":["../src/canvasKuwaharaEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,kGAAkG;AAClG,wGAAwG;AACxG,qCAAqC;AACrC,MAAM,UAAU,2BAA2B,CACzC,MAAoC,EACpC,IAAkC,EAClC,OAAiC;IAEjC,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,iCAAiC,GAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACzF,2BAA2B,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAwB,CAAC,CAAC;AAC9E,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CanvasRenderEffectRunner, CanvasRenderTarget, LensDirtEffect } from '@flighthq/types';
2
+ export declare function applyLensDirtEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, _effect: Readonly<LensDirtEffect>): void;
3
+ export declare const defaultCanvasLensDirtEffectRunner: CanvasRenderEffectRunner;
4
+ //# sourceMappingURL=canvasLensDirtEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasLensDirtEffect.d.ts","sourceRoot":"","sources":["../src/canvasLensDirtEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAOpG,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,GAChC,IAAI,CAEN;AAED,eAAO,MAAM,iCAAiC,EAAE,wBAE/C,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { passthroughCanvasEffectPass } from './canvasEffectCompositing';
2
+ // Lens dirt (PASSTHROUGH): procedural per-pixel smudge blobs gated by scene brightness. No CSS filter
3
+ // equivalent, but expressible per-pixel via getImageData/putImageData; not yet implemented — passthrough
4
+ // for now.
5
+ export function applyLensDirtEffectToCanvas(source, dest, _effect) {
6
+ passthroughCanvasEffectPass(dest, source);
7
+ }
8
+ export const defaultCanvasLensDirtEffectRunner = (ctx, effect) => {
9
+ applyLensDirtEffectToCanvas(ctx.source, ctx.dest, effect);
10
+ };
11
+ //# sourceMappingURL=canvasLensDirtEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasLensDirtEffect.js","sourceRoot":"","sources":["../src/canvasLensDirtEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,sGAAsG;AACtG,yGAAyG;AACzG,WAAW;AACX,MAAM,UAAU,2BAA2B,CACzC,MAAoC,EACpC,IAAkC,EAClC,OAAiC;IAEjC,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,iCAAiC,GAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACzF,2BAA2B,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAwB,CAAC,CAAC;AAC9E,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CanvasRenderEffectRunner, CanvasRenderTarget, LensDistortionEffect } from '@flighthq/types';
2
+ export declare function applyLensDistortionEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, _effect: Readonly<LensDistortionEffect>): void;
3
+ export declare const defaultCanvasLensDistortionEffectRunner: CanvasRenderEffectRunner;
4
+ //# sourceMappingURL=canvasLensDistortionEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasLensDistortionEffect.d.ts","sourceRoot":"","sources":["../src/canvasLensDistortionEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAM1G,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,OAAO,EAAE,QAAQ,CAAC,oBAAoB,CAAC,GACtC,IAAI,CAEN;AAED,eAAO,MAAM,uCAAuC,EAAE,wBAErD,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { passthroughCanvasEffectPass } from './canvasEffectCompositing';
2
+ // Lens distortion (PASSTHROUGH): a radial uv remap (barrel/pincushion). No CSS filter equivalent, but
3
+ // expressible per-pixel via getImageData/putImageData; not yet implemented — passthrough for now.
4
+ export function applyLensDistortionEffectToCanvas(source, dest, _effect) {
5
+ passthroughCanvasEffectPass(dest, source);
6
+ }
7
+ export const defaultCanvasLensDistortionEffectRunner = (ctx, effect) => {
8
+ applyLensDistortionEffectToCanvas(ctx.source, ctx.dest, effect);
9
+ };
10
+ //# sourceMappingURL=canvasLensDistortionEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasLensDistortionEffect.js","sourceRoot":"","sources":["../src/canvasLensDistortionEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,sGAAsG;AACtG,kGAAkG;AAClG,MAAM,UAAU,iCAAiC,CAC/C,MAAoC,EACpC,IAAkC,EAClC,OAAuC;IAEvC,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,uCAAuC,GAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IAC/F,iCAAiC,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAA8B,CAAC,CAAC;AAC1F,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CanvasRenderEffectRunner, CanvasRenderTarget, LensFlareEffect } from '@flighthq/types';
2
+ export declare function applyLensFlareEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, _effect: Readonly<LensFlareEffect>): void;
3
+ export declare const defaultCanvasLensFlareEffectRunner: CanvasRenderEffectRunner;
4
+ //# sourceMappingURL=canvasLensFlareEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasLensFlareEffect.d.ts","sourceRoot":"","sources":["../src/canvasLensFlareEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAOrG,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,OAAO,EAAE,QAAQ,CAAC,eAAe,CAAC,GACjC,IAAI,CAEN;AAED,eAAO,MAAM,kCAAkC,EAAE,wBAEhD,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { passthroughCanvasEffectPass } from './canvasEffectCompositing';
2
+ // Lens flare (PASSTHROUGH): a bright-pass-driven ghost/halo accumulation along the optical axis. No CSS
3
+ // filter equivalent, but expressible per-pixel via getImageData/putImageData; not yet implemented —
4
+ // passthrough for now. (Operates on already-clamped 8-bit input, so the bright-pass is approximate.)
5
+ export function applyLensFlareEffectToCanvas(source, dest, _effect) {
6
+ passthroughCanvasEffectPass(dest, source);
7
+ }
8
+ export const defaultCanvasLensFlareEffectRunner = (ctx, effect) => {
9
+ applyLensFlareEffectToCanvas(ctx.source, ctx.dest, effect);
10
+ };
11
+ //# sourceMappingURL=canvasLensFlareEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasLensFlareEffect.js","sourceRoot":"","sources":["../src/canvasLensFlareEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,wGAAwG;AACxG,oGAAoG;AACpG,qGAAqG;AACrG,MAAM,UAAU,4BAA4B,CAC1C,MAAoC,EACpC,IAAkC,EAClC,OAAkC;IAElC,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,kCAAkC,GAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IAC1F,4BAA4B,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAyB,CAAC,CAAC;AAChF,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CanvasRenderEffectRunner, CanvasRenderTarget, LiftGammaGainEffect } from '@flighthq/types';
2
+ export declare function applyLiftGammaGainEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, _effect: Readonly<LiftGammaGainEffect>): void;
3
+ export declare const defaultCanvasLiftGammaGainEffectRunner: CanvasRenderEffectRunner;
4
+ //# sourceMappingURL=canvasLiftGammaGainEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasLiftGammaGainEffect.d.ts","sourceRoot":"","sources":["../src/canvasLiftGammaGainEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAOzG,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,OAAO,EAAE,QAAQ,CAAC,mBAAmB,CAAC,GACrC,IAAI,CAEN;AAED,eAAO,MAAM,sCAAsC,EAAE,wBAEpD,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { passthroughCanvasEffectPass } from './canvasEffectCompositing';
2
+ // Lift/gamma/gain (PASSTHROUGH): per-channel offset/exponent/multiplier color wheels are per-pixel
3
+ // pow()/mul math. No CSS filter equivalent, but expressible per-pixel via getImageData/putImageData; not
4
+ // yet implemented — passthrough for now.
5
+ export function applyLiftGammaGainEffectToCanvas(source, dest, _effect) {
6
+ passthroughCanvasEffectPass(dest, source);
7
+ }
8
+ export const defaultCanvasLiftGammaGainEffectRunner = (ctx, effect) => {
9
+ applyLiftGammaGainEffectToCanvas(ctx.source, ctx.dest, effect);
10
+ };
11
+ //# sourceMappingURL=canvasLiftGammaGainEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasLiftGammaGainEffect.js","sourceRoot":"","sources":["../src/canvasLiftGammaGainEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,mGAAmG;AACnG,yGAAyG;AACzG,yCAAyC;AACzC,MAAM,UAAU,gCAAgC,CAC9C,MAAoC,EACpC,IAAkC,EAClC,OAAsC;IAEtC,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,sCAAsC,GAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IAC9F,gCAAgC,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAA6B,CAAC,CAAC;AACxF,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CanvasRenderEffectRunner, CanvasRenderTarget, LookupTableGradeEffect } from '@flighthq/types';
2
+ export declare function applyLookupTableGradeEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, _effect: Readonly<LookupTableGradeEffect>): void;
3
+ export declare const defaultCanvasLookupTableGradeEffectRunner: CanvasRenderEffectRunner;
4
+ //# sourceMappingURL=canvasLookupTableGradeEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasLookupTableGradeEffect.d.ts","sourceRoot":"","sources":["../src/canvasLookupTableGradeEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAM5G,wBAAgB,mCAAmC,CACjD,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,OAAO,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GACxC,IAAI,CAEN;AAED,eAAO,MAAM,yCAAyC,EAAE,wBAEvD,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { passthroughCanvasEffectPass } from './canvasEffectCompositing';
2
+ // LUT grade (PASSTHROUGH): sampling a 3D LUT cube per pixel. No CSS filter equivalent, but expressible
3
+ // per-pixel via getImageData/putImageData; not yet implemented — passthrough for now.
4
+ export function applyLookupTableGradeEffectToCanvas(source, dest, _effect) {
5
+ passthroughCanvasEffectPass(dest, source);
6
+ }
7
+ export const defaultCanvasLookupTableGradeEffectRunner = (ctx, effect) => {
8
+ applyLookupTableGradeEffectToCanvas(ctx.source, ctx.dest, effect);
9
+ };
10
+ //# sourceMappingURL=canvasLookupTableGradeEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasLookupTableGradeEffect.js","sourceRoot":"","sources":["../src/canvasLookupTableGradeEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,uGAAuG;AACvG,sFAAsF;AACtF,MAAM,UAAU,mCAAmC,CACjD,MAAoC,EACpC,IAAkC,EAClC,OAAyC;IAEzC,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,yCAAyC,GAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACjG,mCAAmC,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAgC,CAAC,CAAC;AAC9F,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CanvasRenderEffectRunner, CanvasRenderTarget, MotionBlurEffect } from '@flighthq/types';
2
+ export declare function applyMotionBlurEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, _effect: Readonly<MotionBlurEffect>): void;
3
+ export declare const defaultCanvasMotionBlurEffectRunner: CanvasRenderEffectRunner;
4
+ //# sourceMappingURL=canvasMotionBlurEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasMotionBlurEffect.d.ts","sourceRoot":"","sources":["../src/canvasMotionBlurEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAOtG,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,OAAO,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAClC,IAAI,CAEN;AAED,eAAO,MAAM,mCAAmC,EAAE,wBAEjD,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { passthroughCanvasEffectPass } from './canvasEffectCompositing';
2
+ // Motion blur (PASSTHROUGH): per-object smearing accumulates taps along each fragment's motion vector.
3
+ // Genuinely unsupportable on Canvas 2D: needs a per-pixel velocity buffer the 2D context does not
4
+ // expose. Passthrough.
5
+ export function applyMotionBlurEffectToCanvas(source, dest, _effect) {
6
+ passthroughCanvasEffectPass(dest, source);
7
+ }
8
+ export const defaultCanvasMotionBlurEffectRunner = (ctx, effect) => {
9
+ applyMotionBlurEffectToCanvas(ctx.source, ctx.dest, effect);
10
+ };
11
+ //# sourceMappingURL=canvasMotionBlurEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasMotionBlurEffect.js","sourceRoot":"","sources":["../src/canvasMotionBlurEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,uGAAuG;AACvG,kGAAkG;AAClG,uBAAuB;AACvB,MAAM,UAAU,6BAA6B,CAC3C,MAAoC,EACpC,IAAkC,EAClC,OAAmC;IAEnC,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,mCAAmC,GAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IAC3F,6BAA6B,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAA0B,CAAC,CAAC;AAClF,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CanvasRenderEffectRunner, CanvasRenderTarget, OutlineEffect } from '@flighthq/types';
2
+ export declare function applyOutlineEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, _effect: Readonly<OutlineEffect>): void;
3
+ export declare const defaultCanvasOutlineEffectRunner: CanvasRenderEffectRunner;
4
+ //# sourceMappingURL=canvasOutlineEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasOutlineEffect.d.ts","sourceRoot":"","sources":["../src/canvasOutlineEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAOnG,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,GAC/B,IAAI,CAEN;AAED,eAAO,MAAM,gCAAgC,EAAE,wBAE9C,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { passthroughCanvasEffectPass } from './canvasEffectCompositing';
2
+ // Outline (PASSTHROUGH): Sobel edge detection on luminance is per-pixel neighbor sampling. No CSS filter
3
+ // equivalent, but expressible per-pixel via getImageData/putImageData; not yet implemented — passthrough
4
+ // for now.
5
+ export function applyOutlineEffectToCanvas(source, dest, _effect) {
6
+ passthroughCanvasEffectPass(dest, source);
7
+ }
8
+ export const defaultCanvasOutlineEffectRunner = (ctx, effect) => {
9
+ applyOutlineEffectToCanvas(ctx.source, ctx.dest, effect);
10
+ };
11
+ //# sourceMappingURL=canvasOutlineEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasOutlineEffect.js","sourceRoot":"","sources":["../src/canvasOutlineEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,yGAAyG;AACzG,yGAAyG;AACzG,WAAW;AACX,MAAM,UAAU,0BAA0B,CACxC,MAAoC,EACpC,IAAkC,EAClC,OAAgC;IAEhC,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,gCAAgC,GAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACxF,0BAA0B,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAuB,CAAC,CAAC;AAC5E,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CanvasRenderEffectRunner, CanvasRenderTarget, CanvasRenderTargetPool, PixelateEffect } from '@flighthq/types';
2
+ export declare function applyPixelateEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, pool: CanvasRenderTargetPool, effect: Readonly<PixelateEffect>): void;
3
+ export declare const defaultCanvasPixelateEffectRunner: CanvasRenderEffectRunner;
4
+ //# sourceMappingURL=canvasPixelateEffect.d.ts.map
@@ -0,0 +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,iBAAiB,CAAC;AAOzB,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"}
@@ -0,0 +1,36 @@
1
+ import { acquireCanvasRenderTarget, releaseCanvasRenderTarget } from './canvasRenderEffectPipeline';
2
+ // Pixelate (REAL): downscale the scene to (width/size, height/size) on a scratch canvas, then upscale
3
+ // back to full size with imageSmoothingEnabled=false so the blocks stay hard-edged — the canonical 2D
4
+ // mosaic.
5
+ export function applyPixelateEffectToCanvas(source, dest, pool, effect) {
6
+ const size = Math.max(1, Math.round(effect.size ?? 8));
7
+ const smallW = Math.max(1, Math.floor(source.width / size));
8
+ const smallH = Math.max(1, Math.floor(source.height / size));
9
+ const small = acquireCanvasRenderTarget(pool, smallW, smallH);
10
+ const sctx = small.context;
11
+ sctx.save();
12
+ sctx.setTransform(1, 0, 0, 1, 0, 0);
13
+ sctx.globalCompositeOperation = 'source-over';
14
+ sctx.globalAlpha = 1;
15
+ sctx.filter = 'none';
16
+ sctx.imageSmoothingEnabled = true;
17
+ sctx.clearRect(0, 0, smallW, smallH);
18
+ sctx.drawImage(source.canvas, 0, 0, source.width, source.height, 0, 0, smallW, smallH);
19
+ sctx.restore();
20
+ const ctx = dest.context;
21
+ ctx.save();
22
+ ctx.setTransform(1, 0, 0, 1, 0, 0);
23
+ ctx.globalCompositeOperation = 'source-over';
24
+ ctx.globalAlpha = 1;
25
+ ctx.filter = 'none';
26
+ ctx.imageSmoothingEnabled = false;
27
+ ctx.clearRect(0, 0, dest.width, dest.height);
28
+ ctx.drawImage(small.canvas, 0, 0, smallW, smallH, 0, 0, dest.width, dest.height);
29
+ ctx.imageSmoothingEnabled = true;
30
+ ctx.restore();
31
+ releaseCanvasRenderTarget(pool, small);
32
+ }
33
+ export const defaultCanvasPixelateEffectRunner = (ctx, effect) => {
34
+ applyPixelateEffectToCanvas(ctx.source, ctx.dest, ctx.pool, effect);
35
+ };
36
+ //# sourceMappingURL=canvasPixelateEffect.js.map
@@ -0,0 +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"}
@@ -0,0 +1,4 @@
1
+ import type { CanvasRenderEffectRunner, CanvasRenderTarget, PosterizeEffect } from '@flighthq/types';
2
+ export declare function applyPosterizeEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, _effect: Readonly<PosterizeEffect>): void;
3
+ export declare const defaultCanvasPosterizeEffectRunner: CanvasRenderEffectRunner;
4
+ //# sourceMappingURL=canvasPosterizeEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasPosterizeEffect.d.ts","sourceRoot":"","sources":["../src/canvasPosterizeEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAMrG,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,OAAO,EAAE,QAAQ,CAAC,eAAe,CAAC,GACjC,IAAI,CAEN;AAED,eAAO,MAAM,kCAAkC,EAAE,wBAEhD,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { passthroughCanvasEffectPass } from './canvasEffectCompositing';
2
+ // Posterize (PASSTHROUGH): per-channel quantization to discrete levels. No CSS filter equivalent, but
3
+ // expressible per-pixel via getImageData/putImageData; not yet implemented — passthrough for now.
4
+ export function applyPosterizeEffectToCanvas(source, dest, _effect) {
5
+ passthroughCanvasEffectPass(dest, source);
6
+ }
7
+ export const defaultCanvasPosterizeEffectRunner = (ctx, effect) => {
8
+ applyPosterizeEffectToCanvas(ctx.source, ctx.dest, effect);
9
+ };
10
+ //# sourceMappingURL=canvasPosterizeEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasPosterizeEffect.js","sourceRoot":"","sources":["../src/canvasPosterizeEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,sGAAsG;AACtG,kGAAkG;AAClG,MAAM,UAAU,4BAA4B,CAC1C,MAAoC,EACpC,IAAkC,EAClC,OAAkC;IAElC,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,kCAAkC,GAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IAC1F,4BAA4B,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAyB,CAAC,CAAC;AAChF,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CanvasRenderEffectRunner, CanvasRenderTarget, RadialBlurEffect } from '@flighthq/types';
2
+ export declare function applyRadialBlurEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, _effect: Readonly<RadialBlurEffect>): void;
3
+ export declare const defaultCanvasRadialBlurEffectRunner: CanvasRenderEffectRunner;
4
+ //# sourceMappingURL=canvasRadialBlurEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasRadialBlurEffect.d.ts","sourceRoot":"","sources":["../src/canvasRadialBlurEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAOtG,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,OAAO,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAClC,IAAI,CAEN;AAED,eAAO,MAAM,mCAAmC,EAAE,wBAEjD,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { passthroughCanvasEffectPass } from './canvasEffectCompositing';
2
+ // Radial blur (PASSTHROUGH): accumulating taps toward a center point is a per-pixel multi-tap gather. No
3
+ // CSS filter equivalent, but expressible per-pixel via getImageData/putImageData; not yet implemented —
4
+ // passthrough for now.
5
+ export function applyRadialBlurEffectToCanvas(source, dest, _effect) {
6
+ passthroughCanvasEffectPass(dest, source);
7
+ }
8
+ export const defaultCanvasRadialBlurEffectRunner = (ctx, effect) => {
9
+ applyRadialBlurEffectToCanvas(ctx.source, ctx.dest, effect);
10
+ };
11
+ //# sourceMappingURL=canvasRadialBlurEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasRadialBlurEffect.js","sourceRoot":"","sources":["../src/canvasRadialBlurEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,yGAAyG;AACzG,wGAAwG;AACxG,uBAAuB;AACvB,MAAM,UAAU,6BAA6B,CAC3C,MAAoC,EACpC,IAAkC,EAClC,OAAmC;IAEnC,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,mCAAmC,GAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IAC3F,6BAA6B,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAA0B,CAAC,CAAC;AAClF,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { CanvasRenderEffectPipeline, CanvasRenderState, CanvasRenderTarget, CanvasRenderTargetPool, RenderEffect, RenderEffectPipelineOptions } from '@flighthq/types';
2
+ export declare function acquireCanvasRenderTarget(pool: CanvasRenderTargetPool, width: number, height: number): CanvasRenderTarget;
3
+ export declare function beginCanvasRenderEffectPipeline(state: CanvasRenderState, pipeline: CanvasRenderEffectPipeline): void;
4
+ export declare function createCanvasRenderEffectPipeline(_state: CanvasRenderState, options?: Readonly<RenderEffectPipelineOptions>): CanvasRenderEffectPipeline;
5
+ export declare function createCanvasRenderTargetPool(): CanvasRenderTargetPool;
6
+ export declare function destroyCanvasRenderEffectPipeline(_state: CanvasRenderState, pipeline: CanvasRenderEffectPipeline): void;
7
+ export declare function endCanvasRenderEffectPipeline(state: CanvasRenderState, pipeline: CanvasRenderEffectPipeline, effects: ReadonlyArray<RenderEffect>): void;
8
+ export declare function releaseCanvasRenderTarget(pool: CanvasRenderTargetPool, target: CanvasRenderTarget): void;
9
+ //# sourceMappingURL=canvasRenderEffectPipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasRenderEffectPipeline.d.ts","sourceRoot":"","sources":["../src/canvasRenderEffectPipeline.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,0BAA0B,EAC1B,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,YAAY,EACZ,2BAA2B,EAC5B,MAAM,iBAAiB,CAAC;AAczB,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,CAapH;AAED,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,iBAAiB,EACzB,OAAO,GAAE,QAAQ,CAAC,2BAA2B,CAAM,GAClD,0BAA0B,CAE5B;AAED,wBAAgB,4BAA4B,IAAI,sBAAsB,CAErE;AAED,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,iBAAiB,EACzB,QAAQ,EAAE,0BAA0B,GACnC,IAAI,CAMN;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,iBAAiB,EACxB,QAAQ,EAAE,0BAA0B,EACpC,OAAO,EAAE,aAAa,CAAC,YAAY,CAAC,GACnC,IAAI,CAyBN;AAID,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAIxG"}
@@ -0,0 +1,97 @@
1
+ import { beginCanvasRenderTarget, createCanvasRenderTarget, endCanvasRenderTarget, resizeCanvasRenderTarget, } from '@flighthq/displayobject-canvas';
2
+ import { createMatrix } from '@flighthq/geometry';
3
+ import { getCanvasRenderEffectRunner } from './canvasRenderEffectRegistry';
4
+ // Opt-in Canvas 2D post-process pipeline — the parallel of the Gl effect pipeline. The scene renders
5
+ // into the pipeline's offscreen canvas between begin/end; end runs the agnostic effect list through the
6
+ // per-state registry, ping-ponging pooled offscreen canvases via ctx.filter / draw-op compositing, then
7
+ // presents the result to the main canvas. The default render loop imports none of this. The effect list
8
+ // is per-frame data; only the scene target and pool are retained. `options.sampleCount`/`format`/`depth`
9
+ // are accepted for parity with the Gl pipeline but have no Canvas 2D realization and are ignored.
10
+ // Acquires a scratch offscreen canvas from the pool sized to (width, height), or allocates one if none
11
+ // are free. Multi-pass effect recipes (bloom) borrow scratch canvases with this and return them with
12
+ // releaseCanvasRenderTarget. Every acquire must be matched by a release.
13
+ export function acquireCanvasRenderTarget(pool, width, height) {
14
+ const w = Math.max(1, Math.ceil(width));
15
+ const h = Math.max(1, Math.ceil(height));
16
+ const target = pool.free.pop() ?? createCanvasRenderTarget(w, h);
17
+ if (target.width !== w || target.height !== h)
18
+ resizeCanvasRenderTarget(target, w, h);
19
+ pool.inUse.push(target);
20
+ return target;
21
+ }
22
+ export function beginCanvasRenderEffectPipeline(state, pipeline) {
23
+ const w = state.canvas.width;
24
+ const h = state.canvas.height;
25
+ if (pipeline.sceneTarget === null) {
26
+ pipeline.sceneTarget = createCanvasRenderTarget(w, h);
27
+ }
28
+ else {
29
+ resizeCanvasRenderTarget(pipeline.sceneTarget, w, h);
30
+ }
31
+ // Clear the offscreen scene canvas before redirecting render into it; resize already clears on the
32
+ // grow path, but an unchanged size keeps last frame's pixels otherwise.
33
+ pipeline.sceneTarget.context.clearRect(0, 0, pipeline.sceneTarget.width, pipeline.sceneTarget.height);
34
+ beginCanvasRenderTarget(state, pipeline.sceneTarget, state.renderTransform2D ?? createMatrix());
35
+ }
36
+ export function createCanvasRenderEffectPipeline(_state, options = {}) {
37
+ return { options: { ...options }, sceneTarget: null, pool: createCanvasRenderTargetPool() };
38
+ }
39
+ export function createCanvasRenderTargetPool() {
40
+ return { free: [], inUse: [] };
41
+ }
42
+ export function destroyCanvasRenderEffectPipeline(_state, pipeline) {
43
+ // Canvas elements are plain GC-managed memory with no GPU handles to free; drop references so the
44
+ // pool and scene canvas become eligible for collection.
45
+ pipeline.sceneTarget = null;
46
+ pipeline.pool.free.length = 0;
47
+ pipeline.pool.inUse.length = 0;
48
+ }
49
+ export function endCanvasRenderEffectPipeline(state, pipeline, effects) {
50
+ const scene = pipeline.sceneTarget;
51
+ if (scene === null)
52
+ return;
53
+ endCanvasRenderTarget(state);
54
+ const pool = pipeline.pool;
55
+ let source = scene;
56
+ let scratchA = null;
57
+ let scratchB = null;
58
+ for (const effect of effects) {
59
+ const runner = getCanvasRenderEffectRunner(state, effect.kind);
60
+ if (runner === null)
61
+ continue;
62
+ if (scratchA === null)
63
+ scratchA = acquireCanvasRenderTarget(pool, scene.width, scene.height);
64
+ if (scratchB === null)
65
+ scratchB = acquireCanvasRenderTarget(pool, scene.width, scene.height);
66
+ const dest = source === scratchA ? scratchB : scratchA;
67
+ runner({ state, source, dest, pool }, effect);
68
+ source = dest;
69
+ }
70
+ presentCanvasRenderEffectResult(state, source);
71
+ if (scratchA !== null)
72
+ releaseCanvasRenderTarget(pool, scratchA);
73
+ if (scratchB !== null)
74
+ releaseCanvasRenderTarget(pool, scratchB);
75
+ }
76
+ // Returns a scratch canvas to the pool so a later acquire can reuse it. Pairs with
77
+ // acquireCanvasRenderTarget like a bracket.
78
+ export function releaseCanvasRenderTarget(pool, target) {
79
+ const index = pool.inUse.indexOf(target);
80
+ if (index !== -1)
81
+ pool.inUse.splice(index, 1);
82
+ pool.free.push(target);
83
+ }
84
+ // Blits the final effect result to the main canvas. Clears first so a transparent scene composites
85
+ // correctly, then draws the offscreen source 1:1.
86
+ function presentCanvasRenderEffectResult(state, source) {
87
+ const context = state.context;
88
+ context.save();
89
+ context.setTransform(1, 0, 0, 1, 0, 0);
90
+ context.globalCompositeOperation = 'source-over';
91
+ context.globalAlpha = 1;
92
+ context.filter = 'none';
93
+ context.clearRect(0, 0, state.canvas.width, state.canvas.height);
94
+ context.drawImage(source.canvas, 0, 0);
95
+ context.restore();
96
+ }
97
+ //# sourceMappingURL=canvasRenderEffectPipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasRenderEffectPipeline.js","sourceRoot":"","sources":["../src/canvasRenderEffectPipeline.ts"],"names":[],"mappings":"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"}