@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,7 @@
1
+ import type { CanvasRenderState } from '@flighthq/types';
2
+ export declare function registerAllCanvasRenderEffects(state: CanvasRenderState): void;
3
+ export declare function registerBlurCanvasRenderEffects(state: CanvasRenderState): void;
4
+ export declare function registerColorGradeCanvasRenderEffects(state: CanvasRenderState): void;
5
+ export declare function registerScreenSpaceCanvasRenderEffects(state: CanvasRenderState): void;
6
+ export declare function registerStylizeCanvasRenderEffects(state: CanvasRenderState): void;
7
+ //# sourceMappingURL=canvasRenderEffectRegistration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasRenderEffectRegistration.d.ts","sourceRoot":"","sources":["../src/canvasRenderEffectRegistration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA4B,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAiDnF,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAK7E;AAOD,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAI9E;AAQD,wBAAgB,qCAAqC,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAIpF;AAOD,wBAAgB,sCAAsC,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAIrF;AAOD,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAIjF"}
@@ -0,0 +1,150 @@
1
+ import { defaultCanvasBloomEffectRunner } from './canvasBloomEffect';
2
+ import { defaultCanvasBrightnessContrastEffectRunner } from './canvasBrightnessContrastEffect';
3
+ import { defaultCanvasChannelMixerEffectRunner } from './canvasChannelMixerEffect';
4
+ import { defaultCanvasChromaticAberrationEffectRunner } from './canvasChromaticAberrationEffect';
5
+ import { defaultCanvasColorGradeEffectRunner } from './canvasColorGradeEffect';
6
+ import { defaultCanvasCrtEffectRunner } from './canvasCrtEffect';
7
+ import { defaultCanvasDirectionalBlurEffectRunner } from './canvasDirectionalBlurEffect';
8
+ import { defaultCanvasDisplacementEffectRunner } from './canvasDisplacementEffect';
9
+ import { defaultCanvasDitherEffectRunner } from './canvasDitherEffect';
10
+ import { defaultCanvasExposureEffectRunner } from './canvasExposureEffect';
11
+ import { defaultCanvasFilmGrainEffectRunner } from './canvasFilmGrainEffect';
12
+ import { defaultCanvasGlitchEffectRunner } from './canvasGlitchEffect';
13
+ import { defaultCanvasGodRaysEffectRunner } from './canvasGodRaysEffect';
14
+ import { defaultCanvasGrayscaleEffectRunner } from './canvasGrayscaleEffect';
15
+ import { defaultCanvasHalftoneEffectRunner } from './canvasHalftoneEffect';
16
+ import { defaultCanvasHueSaturationEffectRunner } from './canvasHueSaturationEffect';
17
+ import { defaultCanvasInvertEffectRunner } from './canvasInvertEffect';
18
+ import { defaultCanvasKuwaharaEffectRunner } from './canvasKuwaharaEffect';
19
+ import { defaultCanvasLensDirtEffectRunner } from './canvasLensDirtEffect';
20
+ import { defaultCanvasLensDistortionEffectRunner } from './canvasLensDistortionEffect';
21
+ import { defaultCanvasLensFlareEffectRunner } from './canvasLensFlareEffect';
22
+ import { defaultCanvasLiftGammaGainEffectRunner } from './canvasLiftGammaGainEffect';
23
+ import { defaultCanvasOutlineEffectRunner } from './canvasOutlineEffect';
24
+ import { defaultCanvasPixelateEffectRunner } from './canvasPixelateEffect';
25
+ import { defaultCanvasPosterizeEffectRunner } from './canvasPosterizeEffect';
26
+ import { defaultCanvasRadialBlurEffectRunner } from './canvasRadialBlurEffect';
27
+ import { registerCanvasRenderEffect } from './canvasRenderEffectRegistry';
28
+ import { defaultCanvasScanlinesEffectRunner } from './canvasScanlinesEffect';
29
+ import { defaultCanvasScreenSpaceFogEffectRunner } from './canvasScreenSpaceFogEffect';
30
+ import { defaultCanvasSepiaEffectRunner } from './canvasSepiaEffect';
31
+ import { defaultCanvasSharpenEffectRunner } from './canvasSharpenEffect';
32
+ import { defaultCanvasSketchEffectRunner } from './canvasSketchEffect';
33
+ import { defaultCanvasTiltShiftEffectRunner } from './canvasTiltShiftEffect';
34
+ import { defaultCanvasToneMapEffectRunner } from './canvasToneMapEffect';
35
+ import { defaultCanvasVignetteEffectRunner } from './canvasVignetteEffect';
36
+ import { defaultCanvasWhiteBalanceEffectRunner } from './canvasWhiteBalanceEffect';
37
+ // Registers all default effect runners into a CanvasRenderState, covering all three real/approximate
38
+ // categories (blur, color-grade, stylize). Passthrough effects are intentionally omitted — registering
39
+ // them would only confirm that they produce no visual change, and leaving them unregistered lets the
40
+ // pipeline skip them cheaply. This is the opt-in "register the standard set" entry for applications
41
+ // that want every available Canvas 2D effect without cherry-picking. For full tree-shaking, call
42
+ // `registerCanvasRenderEffect` for each runner individually or use a category registrar.
43
+ //
44
+ // Import this function separately — it is NOT re-exported from the root barrel by default so it
45
+ // cannot be accidentally included in tree-shaken imports. Use it in application-level setup code
46
+ // only when all effects are needed.
47
+ export function registerAllCanvasRenderEffects(state) {
48
+ registerBlurCanvasRenderEffects(state);
49
+ registerColorGradeCanvasRenderEffects(state);
50
+ registerScreenSpaceCanvasRenderEffects(state);
51
+ registerStylizeCanvasRenderEffects(state);
52
+ }
53
+ // Registers all blur-family default runners into a CanvasRenderState: bloom, directional blur,
54
+ // radial blur, and tilt-shift. BokehDepthOfFieldEffect, CameraMotionBlurEffect, and
55
+ // MotionBlurEffect are passthrough on Canvas 2D (require depth/velocity buffers) and are
56
+ // excluded. Importing only this function pulls those runners into the bundle — use
57
+ // `registerCanvasRenderEffect` per-runner for full tree-shaking.
58
+ export function registerBlurCanvasRenderEffects(state) {
59
+ for (const [kind, runner] of BLUR_CANVAS_EFFECT_KINDS) {
60
+ registerCanvasRenderEffect(state, kind, runner);
61
+ }
62
+ }
63
+ // Registers all color-grade default runners into a CanvasRenderState: brightness-contrast,
64
+ // channel-mixer, color-grade, dither, exposure (approximate), grayscale, hue-saturation, invert,
65
+ // lift-gamma-gain, posterize, sepia, tone-map (approximate), and white-balance.
66
+ // LookupTableGradeEffect is excluded (passthrough — descriptor carries no cube data array).
67
+ // Importing only this function pulls those runners into the bundle — use
68
+ // `registerCanvasRenderEffect` per-runner for full tree-shaking.
69
+ export function registerColorGradeCanvasRenderEffects(state) {
70
+ for (const [kind, runner] of COLOR_GRADE_CANVAS_EFFECT_KINDS) {
71
+ registerCanvasRenderEffect(state, kind, runner);
72
+ }
73
+ }
74
+ // Registers all screen-space and anti-aliasing default runners into a CanvasRenderState. On
75
+ // Canvas 2D all screen-space effects (FxaaEffect, SmaaEffect, SsaoEffect, SsrEffect, TaaEffect,
76
+ // ScreenSpaceShadowsEffect) are passthrough — they require GPU AA samples, depth, or velocity
77
+ // buffers that Canvas 2D never produces. This function is a no-op on Canvas 2D and exists for
78
+ // API symmetry with registerScreenSpaceGlRenderEffects and registerScreenSpaceWgpuRenderEffects.
79
+ export function registerScreenSpaceCanvasRenderEffects(state) {
80
+ for (const [kind, runner] of SCREENSPACE_CANVAS_EFFECT_KINDS) {
81
+ registerCanvasRenderEffect(state, kind, runner);
82
+ }
83
+ }
84
+ // Registers all stylize-family default runners into a CanvasRenderState: chromatic aberration,
85
+ // CRT, displacement, film grain, glitch, god rays, halftone, kuwahara, lens-dirt, lens-distortion,
86
+ // lens-flare, outline, pixelate, scanlines, screen-space fog, sharpen, sketch, and vignette.
87
+ // Importing only this function pulls those runners into the bundle — use
88
+ // `registerCanvasRenderEffect` per-runner for full tree-shaking.
89
+ export function registerStylizeCanvasRenderEffects(state) {
90
+ for (const [kind, runner] of STYLIZE_CANVAS_EFFECT_KINDS) {
91
+ registerCanvasRenderEffect(state, kind, runner);
92
+ }
93
+ }
94
+ // The kind strings for the four category groups. Kept as local constants so the individual
95
+ // register* functions above have a single source of truth for the loop.
96
+ // Blur effects: multi-pass or directional blurs operating on the color buffer.
97
+ // BokehDepthOfFieldEffect, CameraMotionBlurEffect, and MotionBlurEffect are passthrough on Canvas
98
+ // (require a depth or velocity buffer that Canvas 2D does not produce) and are omitted here.
99
+ const BLUR_CANVAS_EFFECT_KINDS = [
100
+ ['BloomEffect', defaultCanvasBloomEffectRunner],
101
+ ['DirectionalBlurEffect', defaultCanvasDirectionalBlurEffectRunner],
102
+ ['RadialBlurEffect', defaultCanvasRadialBlurEffectRunner],
103
+ ['TiltShiftEffect', defaultCanvasTiltShiftEffectRunner],
104
+ ];
105
+ // Color-grade effects: per-pixel color transforms with no multi-pass or geometry dependency.
106
+ // LookupTableGradeEffect is passthrough on Canvas (descriptor carries no cube data array) and is
107
+ // omitted here. ExposureEffect and ToneMapEffect are included as approximate LDR implementations.
108
+ const COLOR_GRADE_CANVAS_EFFECT_KINDS = [
109
+ ['BrightnessContrastEffect', defaultCanvasBrightnessContrastEffectRunner],
110
+ ['ChannelMixerEffect', defaultCanvasChannelMixerEffectRunner],
111
+ ['ColorGradeEffect', defaultCanvasColorGradeEffectRunner],
112
+ ['DitherEffect', defaultCanvasDitherEffectRunner],
113
+ ['ExposureEffect', defaultCanvasExposureEffectRunner],
114
+ ['GrayscaleEffect', defaultCanvasGrayscaleEffectRunner],
115
+ ['HueSaturationEffect', defaultCanvasHueSaturationEffectRunner],
116
+ ['InvertEffect', defaultCanvasInvertEffectRunner],
117
+ ['LiftGammaGainEffect', defaultCanvasLiftGammaGainEffectRunner],
118
+ ['PosterizeEffect', defaultCanvasPosterizeEffectRunner],
119
+ ['SepiaEffect', defaultCanvasSepiaEffectRunner],
120
+ ['ToneMapEffect', defaultCanvasToneMapEffectRunner],
121
+ ['WhiteBalanceEffect', defaultCanvasWhiteBalanceEffectRunner],
122
+ ];
123
+ // Screen-space / anti-aliasing effects. All screen-space effects (FxaaEffect, SmaaEffect,
124
+ // SsaoEffect, SsrEffect, TaaEffect, ScreenSpaceShadowsEffect) are passthrough on Canvas 2D —
125
+ // they require pre-rasterization GPU AA samples, depth, or velocity buffers that Canvas 2D
126
+ // never produces. This band is kept for API symmetry with effects-gl and effects-wgpu; it
127
+ // registers no runners.
128
+ const SCREENSPACE_CANVAS_EFFECT_KINDS = [];
129
+ // Stylize effects: artistic transforms, screen-space overlays, and film emulation.
130
+ const STYLIZE_CANVAS_EFFECT_KINDS = [
131
+ ['ChromaticAberrationEffect', defaultCanvasChromaticAberrationEffectRunner],
132
+ ['CrtEffect', defaultCanvasCrtEffectRunner],
133
+ ['DisplacementEffect', defaultCanvasDisplacementEffectRunner],
134
+ ['FilmGrainEffect', defaultCanvasFilmGrainEffectRunner],
135
+ ['GlitchEffect', defaultCanvasGlitchEffectRunner],
136
+ ['GodRaysEffect', defaultCanvasGodRaysEffectRunner],
137
+ ['HalftoneEffect', defaultCanvasHalftoneEffectRunner],
138
+ ['KuwaharaEffect', defaultCanvasKuwaharaEffectRunner],
139
+ ['LensDirtEffect', defaultCanvasLensDirtEffectRunner],
140
+ ['LensDistortionEffect', defaultCanvasLensDistortionEffectRunner],
141
+ ['LensFlareEffect', defaultCanvasLensFlareEffectRunner],
142
+ ['OutlineEffect', defaultCanvasOutlineEffectRunner],
143
+ ['PixelateEffect', defaultCanvasPixelateEffectRunner],
144
+ ['ScanlinesEffect', defaultCanvasScanlinesEffectRunner],
145
+ ['ScreenSpaceFogEffect', defaultCanvasScreenSpaceFogEffectRunner],
146
+ ['SharpenEffect', defaultCanvasSharpenEffectRunner],
147
+ ['SketchEffect', defaultCanvasSketchEffectRunner],
148
+ ['VignetteEffect', defaultCanvasVignetteEffectRunner],
149
+ ];
150
+ //# sourceMappingURL=canvasRenderEffectRegistration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasRenderEffectRegistration.js","sourceRoot":"","sources":["../src/canvasRenderEffectRegistration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { CanvasRenderEffectRunner, CanvasRenderState } from '@flighthq/types';
2
+ export declare function getCanvasRenderEffectRunner(state: CanvasRenderState, kind: string): CanvasRenderEffectRunner | null;
3
+ export declare function hasCanvasRenderEffectRunner(state: CanvasRenderState, kind: string): boolean;
4
+ export declare function registerCanvasRenderEffect(state: CanvasRenderState, kind: string, runner: CanvasRenderEffectRunner): void;
5
+ //# sourceMappingURL=canvasRenderEffectRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasRenderEffectRegistry.d.ts","sourceRoot":"","sources":["../src/canvasRenderEffectRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAQnF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,wBAAwB,GAAG,IAAI,CAEnH;AAKD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3F;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,wBAAwB,GAC/B,IAAI,CAON"}
@@ -0,0 +1,24 @@
1
+ // Per-state registry mapping an effect `kind` string to its Canvas 2D runner — the material-renderer
2
+ // pattern one tier up, and the Canvas parallel of registerGlRenderEffect. Registration is opt-in
3
+ // (import a runner only to register it) and dispatch is a Map lookup, so there is no monolithic switch
4
+ // and unused effect recipes tree-shake away. Register an alternative runner under the same key to swap
5
+ // algorithms.
6
+ export function getCanvasRenderEffectRunner(state, kind) {
7
+ return _registries.get(state)?.get(kind) ?? null;
8
+ }
9
+ // Returns true if a runner is registered for the given kind in this state. Use to validate an effect
10
+ // chain before dispatching — the pipeline silently skips unregistered kinds; check up front to apply
11
+ // your own policy (warn, filter) rather than relying on silent no-ops.
12
+ export function hasCanvasRenderEffectRunner(state, kind) {
13
+ return _registries.get(state)?.has(kind) ?? false;
14
+ }
15
+ export function registerCanvasRenderEffect(state, kind, runner) {
16
+ let registry = _registries.get(state);
17
+ if (registry === undefined) {
18
+ registry = new Map();
19
+ _registries.set(state, registry);
20
+ }
21
+ registry.set(kind, runner);
22
+ }
23
+ const _registries = new WeakMap();
24
+ //# sourceMappingURL=canvasRenderEffectRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasRenderEffectRegistry.js","sourceRoot":"","sources":["../src/canvasRenderEffectRegistry.ts"],"names":[],"mappings":"AAEA,qGAAqG;AACrG,iGAAiG;AACjG,uGAAuG;AACvG,uGAAuG;AACvG,cAAc;AAEd,MAAM,UAAU,2BAA2B,CAAC,KAAwB,EAAE,IAAY;IAChF,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AACnD,CAAC;AAED,qGAAqG;AACrG,qGAAqG;AACrG,uEAAuE;AACvE,MAAM,UAAU,2BAA2B,CAAC,KAAwB,EAAE,IAAY;IAChF,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,KAAwB,EACxB,IAAY,EACZ,MAAgC;IAEhC,IAAI,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QACrB,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IACD,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,WAAW,GAAG,IAAI,OAAO,EAA4D,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CanvasRenderEffectRunner, CanvasRenderTarget, ScanlinesEffect } from '@flighthq/types';
2
+ export declare function applyScanlinesEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, effect: Readonly<ScanlinesEffect>): void;
3
+ export declare const defaultCanvasScanlinesEffectRunner: CanvasRenderEffectRunner;
4
+ //# sourceMappingURL=canvasScanlinesEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasScanlinesEffect.d.ts","sourceRoot":"","sources":["../src/canvasScanlinesEffect.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,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,GAChC,IAAI,CAuBN;AAED,eAAO,MAAM,kCAAkC,EAAE,wBAEhD,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { drawCanvasEffectPass } from './canvasEffectCompositing';
2
+ // Scanlines (REAL): draw the scene, then overlay evenly spaced darkening bands. `count` horizontal
3
+ // lines span the frame; each darkens its row by `intensity` via a 'multiply' fill.
4
+ export function applyScanlinesEffectToCanvas(source, dest, effect) {
5
+ const count = Math.max(1, Math.round(effect.count ?? 240));
6
+ const intensity = Math.max(0, Math.min(1, effect.intensity ?? 0.3));
7
+ drawCanvasEffectPass(dest, source, 'none');
8
+ const ctx = dest.context;
9
+ const w = dest.width;
10
+ const h = dest.height;
11
+ const spacing = h / count;
12
+ const lineHeight = Math.max(1, spacing * 0.5);
13
+ ctx.save();
14
+ ctx.setTransform(1, 0, 0, 1, 0, 0);
15
+ ctx.globalCompositeOperation = 'multiply';
16
+ ctx.filter = 'none';
17
+ const dark = 1 - intensity;
18
+ const channel = Math.round(dark * 255);
19
+ ctx.fillStyle = `rgb(${channel},${channel},${channel})`;
20
+ for (let y = 0; y < h; y += spacing) {
21
+ ctx.fillRect(0, Math.round(y), w, lineHeight);
22
+ }
23
+ ctx.restore();
24
+ }
25
+ export const defaultCanvasScanlinesEffectRunner = (ctx, effect) => {
26
+ applyScanlinesEffectToCanvas(ctx.source, ctx.dest, effect);
27
+ };
28
+ //# sourceMappingURL=canvasScanlinesEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasScanlinesEffect.js","sourceRoot":"","sources":["../src/canvasScanlinesEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,mGAAmG;AACnG,mFAAmF;AACnF,MAAM,UAAU,4BAA4B,CAC1C,MAAoC,EACpC,IAAkC,EAClC,MAAiC;IAEjC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC,CAAC;IAEpE,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAE3C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;IACzB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;IACrB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC;IAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,GAAG,CAAC,CAAC;IAE9C,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,UAAU,CAAC;IAC1C,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;IACpB,MAAM,IAAI,GAAG,CAAC,GAAG,SAAS,CAAC;IAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;IACvC,GAAG,CAAC,SAAS,GAAG,OAAO,OAAO,IAAI,OAAO,IAAI,OAAO,GAAG,CAAC;IACxD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC;QACpC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;IAChD,CAAC;IACD,GAAG,CAAC,OAAO,EAAE,CAAC;AAChB,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, ScreenSpaceFogEffect } from '@flighthq/types';
2
+ export declare function applyScreenSpaceFogEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, _effect: Readonly<ScreenSpaceFogEffect>): void;
3
+ export declare const defaultCanvasScreenSpaceFogEffectRunner: CanvasRenderEffectRunner;
4
+ //# sourceMappingURL=canvasScreenSpaceFogEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasScreenSpaceFogEffect.d.ts","sourceRoot":"","sources":["../src/canvasScreenSpaceFogEffect.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
+ // Screen-space fog (PASSTHROUGH): exponential fog attenuated by per-pixel scene depth.
3
+ // Genuinely unsupportable on Canvas 2D: needs a depth buffer the 2D context does not expose. Passthrough.
4
+ export function applyScreenSpaceFogEffectToCanvas(source, dest, _effect) {
5
+ passthroughCanvasEffectPass(dest, source);
6
+ }
7
+ export const defaultCanvasScreenSpaceFogEffectRunner = (ctx, effect) => {
8
+ applyScreenSpaceFogEffectToCanvas(ctx.source, ctx.dest, effect);
9
+ };
10
+ //# sourceMappingURL=canvasScreenSpaceFogEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasScreenSpaceFogEffect.js","sourceRoot":"","sources":["../src/canvasScreenSpaceFogEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,uFAAuF;AACvF,0GAA0G;AAC1G,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, SepiaEffect } from '@flighthq/types';
2
+ export declare function applySepiaEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, effect: Readonly<SepiaEffect>): void;
3
+ export declare const defaultCanvasSepiaEffectRunner: CanvasRenderEffectRunner;
4
+ //# sourceMappingURL=canvasSepiaEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasSepiaEffect.d.ts","sourceRoot":"","sources":["../src/canvasSepiaEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAKjG,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,CAGN;AAED,eAAO,MAAM,8BAA8B,EAAE,wBAE5C,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { drawCanvasEffectPass } from './canvasEffectCompositing';
2
+ // Sepia (REAL): CSS sepia(intensity).
3
+ export function applySepiaEffectToCanvas(source, dest, effect) {
4
+ const intensity = effect.intensity ?? 1;
5
+ drawCanvasEffectPass(dest, source, `sepia(${intensity})`);
6
+ }
7
+ export const defaultCanvasSepiaEffectRunner = (ctx, effect) => {
8
+ applySepiaEffectToCanvas(ctx.source, ctx.dest, effect);
9
+ };
10
+ //# sourceMappingURL=canvasSepiaEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasSepiaEffect.js","sourceRoot":"","sources":["../src/canvasSepiaEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,sCAAsC;AACtC,MAAM,UAAU,wBAAwB,CACtC,MAAoC,EACpC,IAAkC,EAClC,MAA6B;IAE7B,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;IACxC,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAS,GAAG,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,MAAM,8BAA8B,GAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACtF,wBAAwB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAqB,CAAC,CAAC;AACxE,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CanvasRenderEffectRunner, CanvasRenderTarget, SharpenEffect } from '@flighthq/types';
2
+ export declare function applySharpenEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, _effect: Readonly<SharpenEffect>): void;
3
+ export declare const defaultCanvasSharpenEffectRunner: CanvasRenderEffectRunner;
4
+ //# sourceMappingURL=canvasSharpenEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasSharpenEffect.d.ts","sourceRoot":"","sources":["../src/canvasSharpenEffect.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
+ // Sharpen (PASSTHROUGH): a Laplacian unsharp-mask kernel is per-pixel neighbor math. No CSS filter
3
+ // equivalent, but expressible per-pixel via getImageData/putImageData; not yet implemented — passthrough
4
+ // for now.
5
+ export function applySharpenEffectToCanvas(source, dest, _effect) {
6
+ passthroughCanvasEffectPass(dest, source);
7
+ }
8
+ export const defaultCanvasSharpenEffectRunner = (ctx, effect) => {
9
+ applySharpenEffectToCanvas(ctx.source, ctx.dest, effect);
10
+ };
11
+ //# sourceMappingURL=canvasSharpenEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasSharpenEffect.js","sourceRoot":"","sources":["../src/canvasSharpenEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,mGAAmG;AACnG,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, SketchEffect } from '@flighthq/types';
2
+ export declare function applySketchEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, _effect: Readonly<SketchEffect>): void;
3
+ export declare const defaultCanvasSketchEffectRunner: CanvasRenderEffectRunner;
4
+ //# sourceMappingURL=canvasSketchEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasSketchEffect.d.ts","sourceRoot":"","sources":["../src/canvasSketchEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAOlG,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,GAC9B,IAAI,CAEN;AAED,eAAO,MAAM,+BAA+B,EAAE,wBAE7C,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { passthroughCanvasEffectPass } from './canvasEffectCompositing';
2
+ // Sketch (PASSTHROUGH): luminance edge detection inverted into pencil strokes is per-pixel neighbor
3
+ // sampling. No CSS filter equivalent, but expressible per-pixel via getImageData/putImageData; not yet
4
+ // implemented — passthrough for now.
5
+ export function applySketchEffectToCanvas(source, dest, _effect) {
6
+ passthroughCanvasEffectPass(dest, source);
7
+ }
8
+ export const defaultCanvasSketchEffectRunner = (ctx, effect) => {
9
+ applySketchEffectToCanvas(ctx.source, ctx.dest, effect);
10
+ };
11
+ //# sourceMappingURL=canvasSketchEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasSketchEffect.js","sourceRoot":"","sources":["../src/canvasSketchEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,oGAAoG;AACpG,uGAAuG;AACvG,qCAAqC;AACrC,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, SmaaEffect } from '@flighthq/types';
2
+ export declare function applySmaaEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, _effect: Readonly<SmaaEffect>): void;
3
+ export declare const defaultCanvasSmaaEffectRunner: CanvasRenderEffectRunner;
4
+ //# sourceMappingURL=canvasSmaaEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasSmaaEffect.d.ts","sourceRoot":"","sources":["../src/canvasSmaaEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAOhG,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,GAC5B,IAAI,CAEN;AAED,eAAO,MAAM,6BAA6B,EAAE,wBAE3C,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { passthroughCanvasEffectPass } from './canvasEffectCompositing';
2
+ // SMAA (PASSTHROUGH): edge-aware blend weights against lookup textures are per-pixel neighbor work. No
3
+ // CSS filter equivalent, but expressible per-pixel via getImageData/putImageData; not yet implemented —
4
+ // passthrough for now.
5
+ export function applySmaaEffectToCanvas(source, dest, _effect) {
6
+ passthroughCanvasEffectPass(dest, source);
7
+ }
8
+ export const defaultCanvasSmaaEffectRunner = (ctx, effect) => {
9
+ applySmaaEffectToCanvas(ctx.source, ctx.dest, effect);
10
+ };
11
+ //# sourceMappingURL=canvasSmaaEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasSmaaEffect.js","sourceRoot":"","sources":["../src/canvasSmaaEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,uGAAuG;AACvG,wGAAwG;AACxG,uBAAuB;AACvB,MAAM,UAAU,uBAAuB,CACrC,MAAoC,EACpC,IAAkC,EAClC,OAA6B;IAE7B,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5C,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"}
@@ -0,0 +1,4 @@
1
+ import type { CanvasRenderEffectRunner, CanvasRenderTarget, SsaoEffect } from '@flighthq/types';
2
+ export declare function applySsaoEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, _effect: Readonly<SsaoEffect>): void;
3
+ export declare const defaultCanvasSsaoEffectRunner: CanvasRenderEffectRunner;
4
+ //# sourceMappingURL=canvasSsaoEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasSsaoEffect.d.ts","sourceRoot":"","sources":["../src/canvasSsaoEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAOhG,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,GAC5B,IAAI,CAEN;AAED,eAAO,MAAM,6BAA6B,EAAE,wBAE3C,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { passthroughCanvasEffectPass } from './canvasEffectCompositing';
2
+ // SSAO (PASSTHROUGH): ambient occlusion reconstructs view-space position/normals and accumulates a
3
+ // sampling kernel. Genuinely unsupportable on Canvas 2D: needs a depth/normal G-buffer the 2D context
4
+ // does not expose. Passthrough.
5
+ export function applySsaoEffectToCanvas(source, dest, _effect) {
6
+ passthroughCanvasEffectPass(dest, source);
7
+ }
8
+ export const defaultCanvasSsaoEffectRunner = (ctx, effect) => {
9
+ applySsaoEffectToCanvas(ctx.source, ctx.dest, effect);
10
+ };
11
+ //# sourceMappingURL=canvasSsaoEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasSsaoEffect.js","sourceRoot":"","sources":["../src/canvasSsaoEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,mGAAmG;AACnG,sGAAsG;AACtG,gCAAgC;AAChC,MAAM,UAAU,uBAAuB,CACrC,MAAoC,EACpC,IAAkC,EAClC,OAA6B;IAE7B,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5C,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"}
@@ -0,0 +1,4 @@
1
+ import type { CanvasRenderEffectRunner, CanvasRenderTarget, SsrEffect } from '@flighthq/types';
2
+ export declare function applySsrEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, _effect: Readonly<SsrEffect>): void;
3
+ export declare const defaultCanvasSsrEffectRunner: CanvasRenderEffectRunner;
4
+ //# sourceMappingURL=canvasSsrEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasSsrEffect.d.ts","sourceRoot":"","sources":["../src/canvasSsrEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAO/F,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,GAC3B,IAAI,CAEN;AAED,eAAO,MAAM,4BAA4B,EAAE,wBAE1C,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { passthroughCanvasEffectPass } from './canvasEffectCompositing';
2
+ // SSR (PASSTHROUGH): screen-space reflections ray-march against depth using view-space normals.
3
+ // Genuinely unsupportable on Canvas 2D: needs a depth buffer plus scene reprojection the 2D context does
4
+ // not expose. Passthrough.
5
+ export function applySsrEffectToCanvas(source, dest, _effect) {
6
+ passthroughCanvasEffectPass(dest, source);
7
+ }
8
+ export const defaultCanvasSsrEffectRunner = (ctx, effect) => {
9
+ applySsrEffectToCanvas(ctx.source, ctx.dest, effect);
10
+ };
11
+ //# sourceMappingURL=canvasSsrEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasSsrEffect.js","sourceRoot":"","sources":["../src/canvasSsrEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,gGAAgG;AAChG,yGAAyG;AACzG,2BAA2B;AAC3B,MAAM,UAAU,sBAAsB,CACpC,MAAoC,EACpC,IAAkC,EAClC,OAA4B;IAE5B,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,4BAA4B,GAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACpF,sBAAsB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAmB,CAAC,CAAC;AACpE,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CanvasRenderEffectRunner, CanvasRenderTarget, TaaEffect } from '@flighthq/types';
2
+ export declare function applyTaaEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, _effect: Readonly<TaaEffect>): void;
3
+ export declare const defaultCanvasTaaEffectRunner: CanvasRenderEffectRunner;
4
+ //# sourceMappingURL=canvasTaaEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasTaaEffect.d.ts","sourceRoot":"","sources":["../src/canvasTaaEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAO/F,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,GAC3B,IAAI,CAEN;AAED,eAAO,MAAM,4BAA4B,EAAE,wBAE1C,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { passthroughCanvasEffectPass } from './canvasEffectCompositing';
2
+ // TAA (PASSTHROUGH): temporal accumulation blends the current frame with reprojected prior frames.
3
+ // Genuinely unsupportable on Canvas 2D: needs temporal history (prior frames) plus jitter the
4
+ // single-frame 2D context does not retain. Passthrough.
5
+ export function applyTaaEffectToCanvas(source, dest, _effect) {
6
+ passthroughCanvasEffectPass(dest, source);
7
+ }
8
+ export const defaultCanvasTaaEffectRunner = (ctx, effect) => {
9
+ applyTaaEffectToCanvas(ctx.source, ctx.dest, effect);
10
+ };
11
+ //# sourceMappingURL=canvasTaaEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasTaaEffect.js","sourceRoot":"","sources":["../src/canvasTaaEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,mGAAmG;AACnG,8FAA8F;AAC9F,wDAAwD;AACxD,MAAM,UAAU,sBAAsB,CACpC,MAAoC,EACpC,IAAkC,EAClC,OAA4B;IAE5B,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,4BAA4B,GAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACpF,sBAAsB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAmB,CAAC,CAAC;AACpE,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CanvasRenderEffectRunner, CanvasRenderTarget, TiltShiftEffect } from '@flighthq/types';
2
+ export declare function applyTiltShiftEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, _effect: Readonly<TiltShiftEffect>): void;
3
+ export declare const defaultCanvasTiltShiftEffectRunner: CanvasRenderEffectRunner;
4
+ //# sourceMappingURL=canvasTiltShiftEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasTiltShiftEffect.d.ts","sourceRoot":"","sources":["../src/canvasTiltShiftEffect.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
+ // Tilt-shift (PASSTHROUGH): a focus band with blur ramping outside it needs per-pixel variable blur the
3
+ // uniform CSS blur() cannot express. Expressible per-pixel via getImageData/putImageData; not yet
4
+ // implemented — passthrough for now.
5
+ export function applyTiltShiftEffectToCanvas(source, dest, _effect) {
6
+ passthroughCanvasEffectPass(dest, source);
7
+ }
8
+ export const defaultCanvasTiltShiftEffectRunner = (ctx, effect) => {
9
+ applyTiltShiftEffectToCanvas(ctx.source, ctx.dest, effect);
10
+ };
11
+ //# sourceMappingURL=canvasTiltShiftEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasTiltShiftEffect.js","sourceRoot":"","sources":["../src/canvasTiltShiftEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,wGAAwG;AACxG,kGAAkG;AAClG,qCAAqC;AACrC,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, ToneMapEffect } from '@flighthq/types';
2
+ export declare function applyToneMapEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, _effect: Readonly<ToneMapEffect>): void;
3
+ export declare const defaultCanvasToneMapEffectRunner: CanvasRenderEffectRunner;
4
+ //# sourceMappingURL=canvasToneMapEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasToneMapEffect.d.ts","sourceRoot":"","sources":["../src/canvasToneMapEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAQnG,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,12 @@
1
+ import { passthroughCanvasEffectPass } from './canvasEffectCompositing';
2
+ // Tone map (PASSTHROUGH): tone-mapping operators compress HDR linear light to displayable range. No CSS
3
+ // filter equivalent, but expressible per-pixel via getImageData/putImageData; not yet implemented —
4
+ // passthrough for now. (The Canvas source is already clamped 8-bit with little HDR to compress, so the
5
+ // result is approximate.)
6
+ export function applyToneMapEffectToCanvas(source, dest, _effect) {
7
+ passthroughCanvasEffectPass(dest, source);
8
+ }
9
+ export const defaultCanvasToneMapEffectRunner = (ctx, effect) => {
10
+ applyToneMapEffectToCanvas(ctx.source, ctx.dest, effect);
11
+ };
12
+ //# sourceMappingURL=canvasToneMapEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasToneMapEffect.js","sourceRoot":"","sources":["../src/canvasToneMapEffect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,wGAAwG;AACxG,oGAAoG;AACpG,uGAAuG;AACvG,0BAA0B;AAC1B,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, VignetteEffect } from '@flighthq/types';
2
+ export declare function applyVignetteEffectToCanvas(source: Readonly<CanvasRenderTarget>, dest: Readonly<CanvasRenderTarget>, effect: Readonly<VignetteEffect>): void;
3
+ export declare const defaultCanvasVignetteEffectRunner: CanvasRenderEffectRunner;
4
+ //# sourceMappingURL=canvasVignetteEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasVignetteEffect.d.ts","sourceRoot":"","sources":["../src/canvasVignetteEffect.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,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,GAC/B,IAAI,CAoCN;AAED,eAAO,MAAM,iCAAiC,EAAE,wBAE/C,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { drawCanvasEffectPass } from './canvasEffectCompositing';
2
+ // Vignette (REAL): draw the scene, then overlay a radial gradient — transparent inside `radius`,
3
+ // ramping to the vignette color over `softness` toward the corners — using the 'multiply' composite op
4
+ // so the edges darken toward the color. Intensity and the color's alpha scale the darkening.
5
+ export function applyVignetteEffectToCanvas(source, dest, effect) {
6
+ const intensity = effect.intensity ?? 1;
7
+ const radius = effect.radius ?? 0.75;
8
+ const softness = effect.softness ?? 0.45;
9
+ const color = effect.color ?? 0x000000ff;
10
+ const colorAlpha = (color & 0xff) / 255;
11
+ const darken = Math.max(0, Math.min(1, intensity * colorAlpha));
12
+ drawCanvasEffectPass(dest, source, 'none');
13
+ const ctx = dest.context;
14
+ const w = dest.width;
15
+ const h = dest.height;
16
+ const cx = w * 0.5;
17
+ const cy = h * 0.5;
18
+ // The vignette math measures distance to the corner as 1.0 (matching the Gl recipe's diagonal
19
+ // normalization), so the gradient's outer radius is half the diagonal.
20
+ const outer = Math.sqrt(cx * cx + cy * cy);
21
+ const inner = Math.max(0, Math.min(radius, 1)) * outer;
22
+ const ramp = Math.max(0, inner - softness * outer);
23
+ const gradient = ctx.createRadialGradient(cx, cy, ramp, cx, cy, outer);
24
+ // Opaque-at-center color string with alpha replaced by the darken amount at the rim.
25
+ const r = (color >>> 24) & 0xff;
26
+ const g = (color >>> 16) & 0xff;
27
+ const b = (color >>> 8) & 0xff;
28
+ gradient.addColorStop(0, `rgba(${r},${g},${b},0)`);
29
+ gradient.addColorStop(1, `rgba(${r},${g},${b},${darken.toFixed(4)})`);
30
+ ctx.save();
31
+ ctx.setTransform(1, 0, 0, 1, 0, 0);
32
+ ctx.globalCompositeOperation = 'multiply';
33
+ ctx.filter = 'none';
34
+ ctx.fillStyle = gradient;
35
+ ctx.fillRect(0, 0, w, h);
36
+ ctx.restore();
37
+ }
38
+ export const defaultCanvasVignetteEffectRunner = (ctx, effect) => {
39
+ applyVignetteEffectToCanvas(ctx.source, ctx.dest, effect);
40
+ };
41
+ //# sourceMappingURL=canvasVignetteEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasVignetteEffect.js","sourceRoot":"","sources":["../src/canvasVignetteEffect.ts"],"names":[],"mappings":"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"}