@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,13 @@
1
+ import { applyMotionBlurEffectToCanvas, defaultCanvasMotionBlurEffectRunner } from './canvasMotionBlurEffect';
2
+
3
+ describe('applyMotionBlurEffectToCanvas', () => {
4
+ it('is a function', () => {
5
+ expect(typeof applyMotionBlurEffectToCanvas).toBe('function');
6
+ });
7
+ });
8
+
9
+ describe('defaultCanvasMotionBlurEffectRunner', () => {
10
+ it('is a function', () => {
11
+ expect(typeof defaultCanvasMotionBlurEffectRunner).toBe('function');
12
+ });
13
+ });
@@ -0,0 +1,13 @@
1
+ import { applyOutlineEffectToCanvas, defaultCanvasOutlineEffectRunner } from './canvasOutlineEffect';
2
+
3
+ describe('applyOutlineEffectToCanvas', () => {
4
+ it('is a function', () => {
5
+ expect(typeof applyOutlineEffectToCanvas).toBe('function');
6
+ });
7
+ });
8
+
9
+ describe('defaultCanvasOutlineEffectRunner', () => {
10
+ it('is a function', () => {
11
+ expect(typeof defaultCanvasOutlineEffectRunner).toBe('function');
12
+ });
13
+ });
@@ -0,0 +1,13 @@
1
+ import { applyPixelateEffectToCanvas, defaultCanvasPixelateEffectRunner } from './canvasPixelateEffect';
2
+
3
+ describe('applyPixelateEffectToCanvas', () => {
4
+ it('is a function', () => {
5
+ expect(typeof applyPixelateEffectToCanvas).toBe('function');
6
+ });
7
+ });
8
+
9
+ describe('defaultCanvasPixelateEffectRunner', () => {
10
+ it('is a function', () => {
11
+ expect(typeof defaultCanvasPixelateEffectRunner).toBe('function');
12
+ });
13
+ });
@@ -0,0 +1,13 @@
1
+ import { applyPosterizeEffectToCanvas, defaultCanvasPosterizeEffectRunner } from './canvasPosterizeEffect';
2
+
3
+ describe('applyPosterizeEffectToCanvas', () => {
4
+ it('is a function', () => {
5
+ expect(typeof applyPosterizeEffectToCanvas).toBe('function');
6
+ });
7
+ });
8
+
9
+ describe('defaultCanvasPosterizeEffectRunner', () => {
10
+ it('is a function', () => {
11
+ expect(typeof defaultCanvasPosterizeEffectRunner).toBe('function');
12
+ });
13
+ });
@@ -0,0 +1,13 @@
1
+ import { applyRadialBlurEffectToCanvas, defaultCanvasRadialBlurEffectRunner } from './canvasRadialBlurEffect';
2
+
3
+ describe('applyRadialBlurEffectToCanvas', () => {
4
+ it('is a function', () => {
5
+ expect(typeof applyRadialBlurEffectToCanvas).toBe('function');
6
+ });
7
+ });
8
+
9
+ describe('defaultCanvasRadialBlurEffectRunner', () => {
10
+ it('is a function', () => {
11
+ expect(typeof defaultCanvasRadialBlurEffectRunner).toBe('function');
12
+ });
13
+ });
@@ -0,0 +1,66 @@
1
+ import {
2
+ acquireCanvasRenderTarget,
3
+ beginCanvasRenderEffectPipeline,
4
+ createCanvasRenderEffectPipeline,
5
+ createCanvasRenderTargetPool,
6
+ destroyCanvasRenderEffectPipeline,
7
+ endCanvasRenderEffectPipeline,
8
+ releaseCanvasRenderTarget,
9
+ } from './canvasRenderEffectPipeline';
10
+
11
+ describe('acquireCanvasRenderTarget', () => {
12
+ it('is a function', () => {
13
+ expect(typeof acquireCanvasRenderTarget).toBe('function');
14
+ });
15
+ });
16
+
17
+ describe('beginCanvasRenderEffectPipeline', () => {
18
+ it('is a function', () => {
19
+ expect(typeof beginCanvasRenderEffectPipeline).toBe('function');
20
+ });
21
+ });
22
+
23
+ describe('createCanvasRenderEffectPipeline', () => {
24
+ it('is a function', () => {
25
+ expect(typeof createCanvasRenderEffectPipeline).toBe('function');
26
+ });
27
+ });
28
+
29
+ describe('createCanvasRenderTargetPool', () => {
30
+ it('is a function', () => {
31
+ expect(typeof createCanvasRenderTargetPool).toBe('function');
32
+ });
33
+
34
+ it('returns a pool with empty free and inUse lists', () => {
35
+ const pool = createCanvasRenderTargetPool();
36
+ expect(pool.free).toEqual([]);
37
+ expect(pool.inUse).toEqual([]);
38
+ });
39
+ });
40
+
41
+ describe('destroyCanvasRenderEffectPipeline', () => {
42
+ it('is a function', () => {
43
+ expect(typeof destroyCanvasRenderEffectPipeline).toBe('function');
44
+ });
45
+ });
46
+
47
+ describe('endCanvasRenderEffectPipeline', () => {
48
+ it('is a function', () => {
49
+ expect(typeof endCanvasRenderEffectPipeline).toBe('function');
50
+ });
51
+ });
52
+
53
+ describe('releaseCanvasRenderTarget', () => {
54
+ it('is a function', () => {
55
+ expect(typeof releaseCanvasRenderTarget).toBe('function');
56
+ });
57
+
58
+ it('moves an acquired target back to the free list', () => {
59
+ const pool = createCanvasRenderTargetPool();
60
+ const target = acquireCanvasRenderTarget(pool, 16, 16);
61
+ expect(pool.inUse).toContain(target);
62
+ releaseCanvasRenderTarget(pool, target);
63
+ expect(pool.inUse).not.toContain(target);
64
+ expect(pool.free).toContain(target);
65
+ });
66
+ });
@@ -0,0 +1,162 @@
1
+ import type { CanvasRenderState } from '@flighthq/types';
2
+
3
+ import {
4
+ registerAllCanvasRenderEffects,
5
+ registerBlurCanvasRenderEffects,
6
+ registerColorGradeCanvasRenderEffects,
7
+ registerScreenSpaceCanvasRenderEffects,
8
+ registerStylizeCanvasRenderEffects,
9
+ } from './canvasRenderEffectRegistration';
10
+ import { hasCanvasRenderEffectRunner } from './canvasRenderEffectRegistry';
11
+
12
+ describe('registerAllCanvasRenderEffects', () => {
13
+ it('is a function', () => {
14
+ expect(typeof registerAllCanvasRenderEffects).toBe('function');
15
+ });
16
+ it('registers bloom effect', () => {
17
+ const fakeState = {} as CanvasRenderState;
18
+ registerAllCanvasRenderEffects(fakeState);
19
+ expect(hasCanvasRenderEffectRunner(fakeState, 'BloomEffect')).toBe(true);
20
+ });
21
+ it('registers color-grade effects', () => {
22
+ const fakeState = {} as CanvasRenderState;
23
+ registerAllCanvasRenderEffects(fakeState);
24
+ expect(hasCanvasRenderEffectRunner(fakeState, 'BrightnessContrastEffect')).toBe(true);
25
+ expect(hasCanvasRenderEffectRunner(fakeState, 'GrayscaleEffect')).toBe(true);
26
+ });
27
+ it('registers stylize effects', () => {
28
+ const fakeState = {} as CanvasRenderState;
29
+ registerAllCanvasRenderEffects(fakeState);
30
+ expect(hasCanvasRenderEffectRunner(fakeState, 'VignetteEffect')).toBe(true);
31
+ expect(hasCanvasRenderEffectRunner(fakeState, 'FilmGrainEffect')).toBe(true);
32
+ expect(hasCanvasRenderEffectRunner(fakeState, 'ChromaticAberrationEffect')).toBe(true);
33
+ });
34
+ it('does not register passthrough effects (BokehDepthOfFieldEffect)', () => {
35
+ const fakeState = {} as CanvasRenderState;
36
+ registerAllCanvasRenderEffects(fakeState);
37
+ expect(hasCanvasRenderEffectRunner(fakeState, 'BokehDepthOfFieldEffect')).toBe(false);
38
+ });
39
+ it('does not register passthrough effects (FxaaEffect)', () => {
40
+ const fakeState = {} as CanvasRenderState;
41
+ registerAllCanvasRenderEffects(fakeState);
42
+ expect(hasCanvasRenderEffectRunner(fakeState, 'FxaaEffect')).toBe(false);
43
+ });
44
+ it('does not register passthrough effects (LookupTableGradeEffect)', () => {
45
+ const fakeState = {} as CanvasRenderState;
46
+ registerAllCanvasRenderEffects(fakeState);
47
+ expect(hasCanvasRenderEffectRunner(fakeState, 'LookupTableGradeEffect')).toBe(false);
48
+ });
49
+ });
50
+
51
+ describe('registerBlurCanvasRenderEffects', () => {
52
+ it('is a function', () => {
53
+ expect(typeof registerBlurCanvasRenderEffects).toBe('function');
54
+ });
55
+ it('registers blur-family effects', () => {
56
+ const fakeState = {} as CanvasRenderState;
57
+ registerBlurCanvasRenderEffects(fakeState);
58
+ expect(hasCanvasRenderEffectRunner(fakeState, 'BloomEffect')).toBe(true);
59
+ expect(hasCanvasRenderEffectRunner(fakeState, 'DirectionalBlurEffect')).toBe(true);
60
+ expect(hasCanvasRenderEffectRunner(fakeState, 'RadialBlurEffect')).toBe(true);
61
+ expect(hasCanvasRenderEffectRunner(fakeState, 'TiltShiftEffect')).toBe(true);
62
+ });
63
+ it('does not register color-grade effects', () => {
64
+ const fakeState = {} as CanvasRenderState;
65
+ registerBlurCanvasRenderEffects(fakeState);
66
+ expect(hasCanvasRenderEffectRunner(fakeState, 'GrayscaleEffect')).toBe(false);
67
+ });
68
+ });
69
+
70
+ describe('registerColorGradeCanvasRenderEffects', () => {
71
+ it('is a function', () => {
72
+ expect(typeof registerColorGradeCanvasRenderEffects).toBe('function');
73
+ });
74
+ it('registers color-grade effects', () => {
75
+ const fakeState = {} as CanvasRenderState;
76
+ registerColorGradeCanvasRenderEffects(fakeState);
77
+ expect(hasCanvasRenderEffectRunner(fakeState, 'BrightnessContrastEffect')).toBe(true);
78
+ expect(hasCanvasRenderEffectRunner(fakeState, 'GrayscaleEffect')).toBe(true);
79
+ });
80
+ it('covers every non-passthrough color-grade kind', () => {
81
+ const fakeState = {} as CanvasRenderState;
82
+ registerColorGradeCanvasRenderEffects(fakeState);
83
+ const colorGradeKinds = [
84
+ 'BrightnessContrastEffect',
85
+ 'ChannelMixerEffect',
86
+ 'ColorGradeEffect',
87
+ 'DitherEffect',
88
+ 'ExposureEffect',
89
+ 'GrayscaleEffect',
90
+ 'HueSaturationEffect',
91
+ 'InvertEffect',
92
+ 'LiftGammaGainEffect',
93
+ 'PosterizeEffect',
94
+ 'SepiaEffect',
95
+ 'ToneMapEffect',
96
+ 'WhiteBalanceEffect',
97
+ ];
98
+ for (const kind of colorGradeKinds) {
99
+ expect(hasCanvasRenderEffectRunner(fakeState, kind)).toBe(true);
100
+ }
101
+ });
102
+ });
103
+
104
+ describe('registerScreenSpaceCanvasRenderEffects', () => {
105
+ it('is a function', () => {
106
+ expect(typeof registerScreenSpaceCanvasRenderEffects).toBe('function');
107
+ });
108
+ it('is a no-op on Canvas 2D (all screen-space effects are passthrough)', () => {
109
+ // This just verifies it does not throw and that no runner is registered for
110
+ // any of the screen-space passthrough kinds.
111
+ const fakeState = {} as CanvasRenderState;
112
+ registerScreenSpaceCanvasRenderEffects(fakeState);
113
+ expect(hasCanvasRenderEffectRunner(fakeState, 'FxaaEffect')).toBe(false);
114
+ expect(hasCanvasRenderEffectRunner(fakeState, 'SmaaEffect')).toBe(false);
115
+ expect(hasCanvasRenderEffectRunner(fakeState, 'TaaEffect')).toBe(false);
116
+ });
117
+ });
118
+
119
+ describe('registerStylizeCanvasRenderEffects', () => {
120
+ it('is a function', () => {
121
+ expect(typeof registerStylizeCanvasRenderEffects).toBe('function');
122
+ });
123
+ it('registers stylize effects', () => {
124
+ const fakeState = {} as CanvasRenderState;
125
+ registerStylizeCanvasRenderEffects(fakeState);
126
+ expect(hasCanvasRenderEffectRunner(fakeState, 'VignetteEffect')).toBe(true);
127
+ expect(hasCanvasRenderEffectRunner(fakeState, 'FilmGrainEffect')).toBe(true);
128
+ expect(hasCanvasRenderEffectRunner(fakeState, 'GlitchEffect')).toBe(true);
129
+ });
130
+ it('covers every stylize kind', () => {
131
+ const fakeState = {} as CanvasRenderState;
132
+ registerStylizeCanvasRenderEffects(fakeState);
133
+ const stylizeKinds = [
134
+ 'ChromaticAberrationEffect',
135
+ 'CrtEffect',
136
+ 'DisplacementEffect',
137
+ 'FilmGrainEffect',
138
+ 'GlitchEffect',
139
+ 'GodRaysEffect',
140
+ 'HalftoneEffect',
141
+ 'KuwaharaEffect',
142
+ 'LensDirtEffect',
143
+ 'LensDistortionEffect',
144
+ 'LensFlareEffect',
145
+ 'OutlineEffect',
146
+ 'PixelateEffect',
147
+ 'ScanlinesEffect',
148
+ 'ScreenSpaceFogEffect',
149
+ 'SharpenEffect',
150
+ 'SketchEffect',
151
+ 'VignetteEffect',
152
+ ];
153
+ for (const kind of stylizeKinds) {
154
+ expect(hasCanvasRenderEffectRunner(fakeState, kind)).toBe(true);
155
+ }
156
+ });
157
+ it('does not register blur effects', () => {
158
+ const fakeState = {} as CanvasRenderState;
159
+ registerStylizeCanvasRenderEffects(fakeState);
160
+ expect(hasCanvasRenderEffectRunner(fakeState, 'BloomEffect')).toBe(false);
161
+ });
162
+ });
@@ -0,0 +1,41 @@
1
+ import type { CanvasRenderEffectRunner, CanvasRenderState } from '@flighthq/types';
2
+
3
+ import {
4
+ getCanvasRenderEffectRunner,
5
+ hasCanvasRenderEffectRunner,
6
+ registerCanvasRenderEffect,
7
+ } from './canvasRenderEffectRegistry';
8
+
9
+ describe('getCanvasRenderEffectRunner', () => {
10
+ it('is a function', () => {
11
+ expect(typeof getCanvasRenderEffectRunner).toBe('function');
12
+ });
13
+ });
14
+
15
+ describe('hasCanvasRenderEffectRunner', () => {
16
+ it('is a function', () => {
17
+ expect(typeof hasCanvasRenderEffectRunner).toBe('function');
18
+ });
19
+ it('returns false when state has no registered runners', () => {
20
+ const fakeState = {} as CanvasRenderState;
21
+ expect(hasCanvasRenderEffectRunner(fakeState, 'NotRegisteredEffect')).toBe(false);
22
+ });
23
+ it('returns true after registering a runner for the given kind', () => {
24
+ const fakeState = {} as CanvasRenderState;
25
+ const fakeRunner = (() => {}) as unknown as CanvasRenderEffectRunner;
26
+ registerCanvasRenderEffect(fakeState, 'HasTestEffect', fakeRunner);
27
+ expect(hasCanvasRenderEffectRunner(fakeState, 'HasTestEffect')).toBe(true);
28
+ });
29
+ it('returns false for a different kind on the same state', () => {
30
+ const fakeState = {} as CanvasRenderState;
31
+ const fakeRunner = (() => {}) as unknown as CanvasRenderEffectRunner;
32
+ registerCanvasRenderEffect(fakeState, 'OnlyThisEffect', fakeRunner);
33
+ expect(hasCanvasRenderEffectRunner(fakeState, 'OtherEffect')).toBe(false);
34
+ });
35
+ });
36
+
37
+ describe('registerCanvasRenderEffect', () => {
38
+ it('is a function', () => {
39
+ expect(typeof registerCanvasRenderEffect).toBe('function');
40
+ });
41
+ });
@@ -0,0 +1,13 @@
1
+ import { applyScanlinesEffectToCanvas, defaultCanvasScanlinesEffectRunner } from './canvasScanlinesEffect';
2
+
3
+ describe('applyScanlinesEffectToCanvas', () => {
4
+ it('is a function', () => {
5
+ expect(typeof applyScanlinesEffectToCanvas).toBe('function');
6
+ });
7
+ });
8
+
9
+ describe('defaultCanvasScanlinesEffectRunner', () => {
10
+ it('is a function', () => {
11
+ expect(typeof defaultCanvasScanlinesEffectRunner).toBe('function');
12
+ });
13
+ });
@@ -0,0 +1,16 @@
1
+ import {
2
+ applyScreenSpaceFogEffectToCanvas,
3
+ defaultCanvasScreenSpaceFogEffectRunner,
4
+ } from './canvasScreenSpaceFogEffect';
5
+
6
+ describe('applyScreenSpaceFogEffectToCanvas', () => {
7
+ it('is a function', () => {
8
+ expect(typeof applyScreenSpaceFogEffectToCanvas).toBe('function');
9
+ });
10
+ });
11
+
12
+ describe('defaultCanvasScreenSpaceFogEffectRunner', () => {
13
+ it('is a function', () => {
14
+ expect(typeof defaultCanvasScreenSpaceFogEffectRunner).toBe('function');
15
+ });
16
+ });
@@ -0,0 +1,13 @@
1
+ import { applySepiaEffectToCanvas, defaultCanvasSepiaEffectRunner } from './canvasSepiaEffect';
2
+
3
+ describe('applySepiaEffectToCanvas', () => {
4
+ it('is a function', () => {
5
+ expect(typeof applySepiaEffectToCanvas).toBe('function');
6
+ });
7
+ });
8
+
9
+ describe('defaultCanvasSepiaEffectRunner', () => {
10
+ it('is a function', () => {
11
+ expect(typeof defaultCanvasSepiaEffectRunner).toBe('function');
12
+ });
13
+ });
@@ -0,0 +1,13 @@
1
+ import { applySharpenEffectToCanvas, defaultCanvasSharpenEffectRunner } from './canvasSharpenEffect';
2
+
3
+ describe('applySharpenEffectToCanvas', () => {
4
+ it('is a function', () => {
5
+ expect(typeof applySharpenEffectToCanvas).toBe('function');
6
+ });
7
+ });
8
+
9
+ describe('defaultCanvasSharpenEffectRunner', () => {
10
+ it('is a function', () => {
11
+ expect(typeof defaultCanvasSharpenEffectRunner).toBe('function');
12
+ });
13
+ });
@@ -0,0 +1,13 @@
1
+ import { applySketchEffectToCanvas, defaultCanvasSketchEffectRunner } from './canvasSketchEffect';
2
+
3
+ describe('applySketchEffectToCanvas', () => {
4
+ it('is a function', () => {
5
+ expect(typeof applySketchEffectToCanvas).toBe('function');
6
+ });
7
+ });
8
+
9
+ describe('defaultCanvasSketchEffectRunner', () => {
10
+ it('is a function', () => {
11
+ expect(typeof defaultCanvasSketchEffectRunner).toBe('function');
12
+ });
13
+ });
@@ -0,0 +1,13 @@
1
+ import { applySmaaEffectToCanvas, defaultCanvasSmaaEffectRunner } from './canvasSmaaEffect';
2
+
3
+ describe('applySmaaEffectToCanvas', () => {
4
+ it('is a function', () => {
5
+ expect(typeof applySmaaEffectToCanvas).toBe('function');
6
+ });
7
+ });
8
+
9
+ describe('defaultCanvasSmaaEffectRunner', () => {
10
+ it('is a function', () => {
11
+ expect(typeof defaultCanvasSmaaEffectRunner).toBe('function');
12
+ });
13
+ });
@@ -0,0 +1,13 @@
1
+ import { applySsaoEffectToCanvas, defaultCanvasSsaoEffectRunner } from './canvasSsaoEffect';
2
+
3
+ describe('applySsaoEffectToCanvas', () => {
4
+ it('is a function', () => {
5
+ expect(typeof applySsaoEffectToCanvas).toBe('function');
6
+ });
7
+ });
8
+
9
+ describe('defaultCanvasSsaoEffectRunner', () => {
10
+ it('is a function', () => {
11
+ expect(typeof defaultCanvasSsaoEffectRunner).toBe('function');
12
+ });
13
+ });
@@ -0,0 +1,13 @@
1
+ import { applySsrEffectToCanvas, defaultCanvasSsrEffectRunner } from './canvasSsrEffect';
2
+
3
+ describe('applySsrEffectToCanvas', () => {
4
+ it('is a function', () => {
5
+ expect(typeof applySsrEffectToCanvas).toBe('function');
6
+ });
7
+ });
8
+
9
+ describe('defaultCanvasSsrEffectRunner', () => {
10
+ it('is a function', () => {
11
+ expect(typeof defaultCanvasSsrEffectRunner).toBe('function');
12
+ });
13
+ });
@@ -0,0 +1,13 @@
1
+ import { applyTaaEffectToCanvas, defaultCanvasTaaEffectRunner } from './canvasTaaEffect';
2
+
3
+ describe('applyTaaEffectToCanvas', () => {
4
+ it('is a function', () => {
5
+ expect(typeof applyTaaEffectToCanvas).toBe('function');
6
+ });
7
+ });
8
+
9
+ describe('defaultCanvasTaaEffectRunner', () => {
10
+ it('is a function', () => {
11
+ expect(typeof defaultCanvasTaaEffectRunner).toBe('function');
12
+ });
13
+ });
@@ -0,0 +1,13 @@
1
+ import { applyTiltShiftEffectToCanvas, defaultCanvasTiltShiftEffectRunner } from './canvasTiltShiftEffect';
2
+
3
+ describe('applyTiltShiftEffectToCanvas', () => {
4
+ it('is a function', () => {
5
+ expect(typeof applyTiltShiftEffectToCanvas).toBe('function');
6
+ });
7
+ });
8
+
9
+ describe('defaultCanvasTiltShiftEffectRunner', () => {
10
+ it('is a function', () => {
11
+ expect(typeof defaultCanvasTiltShiftEffectRunner).toBe('function');
12
+ });
13
+ });
@@ -0,0 +1,13 @@
1
+ import { applyToneMapEffectToCanvas, defaultCanvasToneMapEffectRunner } from './canvasToneMapEffect';
2
+
3
+ describe('applyToneMapEffectToCanvas', () => {
4
+ it('is a function', () => {
5
+ expect(typeof applyToneMapEffectToCanvas).toBe('function');
6
+ });
7
+ });
8
+
9
+ describe('defaultCanvasToneMapEffectRunner', () => {
10
+ it('is a function', () => {
11
+ expect(typeof defaultCanvasToneMapEffectRunner).toBe('function');
12
+ });
13
+ });
@@ -0,0 +1,13 @@
1
+ import { applyVignetteEffectToCanvas, defaultCanvasVignetteEffectRunner } from './canvasVignetteEffect';
2
+
3
+ describe('applyVignetteEffectToCanvas', () => {
4
+ it('is a function', () => {
5
+ expect(typeof applyVignetteEffectToCanvas).toBe('function');
6
+ });
7
+ });
8
+
9
+ describe('defaultCanvasVignetteEffectRunner', () => {
10
+ it('is a function', () => {
11
+ expect(typeof defaultCanvasVignetteEffectRunner).toBe('function');
12
+ });
13
+ });
@@ -0,0 +1,13 @@
1
+ import { applyWhiteBalanceEffectToCanvas, defaultCanvasWhiteBalanceEffectRunner } from './canvasWhiteBalanceEffect';
2
+
3
+ describe('applyWhiteBalanceEffectToCanvas', () => {
4
+ it('is a function', () => {
5
+ expect(typeof applyWhiteBalanceEffectToCanvas).toBe('function');
6
+ });
7
+ });
8
+
9
+ describe('defaultCanvasWhiteBalanceEffectRunner', () => {
10
+ it('is a function', () => {
11
+ expect(typeof defaultCanvasWhiteBalanceEffectRunner).toBe('function');
12
+ });
13
+ });