@flighthq/effects-wgpu 0.1.0 → 0.2.1-next.410.a23f189

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 (256) hide show
  1. package/dist/index.d.ts +17 -10
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +17 -10
  4. package/dist/index.js.map +1 -1
  5. package/dist/wgpuBevelEffect.d.ts +4 -0
  6. package/dist/wgpuBevelEffect.d.ts.map +1 -0
  7. package/dist/wgpuBevelEffect.js +124 -0
  8. package/dist/wgpuBevelEffect.js.map +1 -0
  9. package/dist/wgpuBloomEffect.d.ts.map +1 -1
  10. package/dist/wgpuBloomEffect.js +9 -8
  11. package/dist/wgpuBloomEffect.js.map +1 -1
  12. package/dist/wgpuBlurEffect.d.ts +8 -0
  13. package/dist/wgpuBlurEffect.d.ts.map +1 -0
  14. package/dist/wgpuBlurEffect.js +70 -0
  15. package/dist/wgpuBlurEffect.js.map +1 -0
  16. package/dist/wgpuBokehDepthOfFieldEffect.d.ts.map +1 -1
  17. package/dist/wgpuBokehDepthOfFieldEffect.js +2 -2
  18. package/dist/wgpuBokehDepthOfFieldEffect.js.map +1 -1
  19. package/dist/wgpuCameraMotionBlurEffect.d.ts.map +1 -1
  20. package/dist/wgpuCameraMotionBlurEffect.js +2 -2
  21. package/dist/wgpuCameraMotionBlurEffect.js.map +1 -1
  22. package/dist/wgpuChromaticAberrationEffect.d.ts.map +1 -1
  23. package/dist/wgpuChromaticAberrationEffect.js +2 -2
  24. package/dist/wgpuChromaticAberrationEffect.js.map +1 -1
  25. package/dist/wgpuColorLutPass.d.ts +3 -0
  26. package/dist/wgpuColorLutPass.d.ts.map +1 -0
  27. package/dist/wgpuColorLutPass.js +144 -0
  28. package/dist/wgpuColorLutPass.js.map +1 -0
  29. package/dist/wgpuColorMatrixPass.d.ts +3 -0
  30. package/dist/wgpuColorMatrixPass.d.ts.map +1 -0
  31. package/dist/wgpuColorMatrixPass.js +51 -0
  32. package/dist/wgpuColorMatrixPass.js.map +1 -0
  33. package/dist/wgpuConvolutionEffect.d.ts +5 -0
  34. package/dist/wgpuConvolutionEffect.d.ts.map +1 -0
  35. package/dist/wgpuConvolutionEffect.js +108 -0
  36. package/dist/wgpuConvolutionEffect.js.map +1 -0
  37. package/dist/wgpuCrtEffect.d.ts.map +1 -1
  38. package/dist/wgpuCrtEffect.js +2 -2
  39. package/dist/wgpuCrtEffect.js.map +1 -1
  40. package/dist/wgpuDirectionalBlurEffect.d.ts.map +1 -1
  41. package/dist/wgpuDirectionalBlurEffect.js +2 -2
  42. package/dist/wgpuDirectionalBlurEffect.js.map +1 -1
  43. package/dist/wgpuDisplacementEffect.d.ts.map +1 -1
  44. package/dist/wgpuDisplacementEffect.js +2 -2
  45. package/dist/wgpuDisplacementEffect.js.map +1 -1
  46. package/dist/wgpuDitherEffect.d.ts.map +1 -1
  47. package/dist/wgpuDitherEffect.js +2 -2
  48. package/dist/wgpuDitherEffect.js.map +1 -1
  49. package/dist/wgpuDropShadowEffect.d.ts +4 -0
  50. package/dist/wgpuDropShadowEffect.d.ts.map +1 -0
  51. package/dist/wgpuDropShadowEffect.js +50 -0
  52. package/dist/wgpuDropShadowEffect.js.map +1 -0
  53. package/dist/wgpuEffectBlitShader.d.ts +17 -0
  54. package/dist/wgpuEffectBlitShader.d.ts.map +1 -0
  55. package/dist/wgpuEffectBlitShader.js +97 -0
  56. package/dist/wgpuEffectBlitShader.js.map +1 -0
  57. package/dist/wgpuEffectBoxBlur.d.ts +15 -0
  58. package/dist/wgpuEffectBoxBlur.d.ts.map +1 -0
  59. package/dist/wgpuEffectBoxBlur.js +106 -0
  60. package/dist/wgpuEffectBoxBlur.js.map +1 -0
  61. package/dist/wgpuEffectGradientRamp.d.ts +17 -0
  62. package/dist/wgpuEffectGradientRamp.d.ts.map +1 -0
  63. package/dist/wgpuEffectGradientRamp.js +89 -0
  64. package/dist/wgpuEffectGradientRamp.js.map +1 -0
  65. package/dist/wgpuEffectPass.d.ts +42 -0
  66. package/dist/wgpuEffectPass.d.ts.map +1 -0
  67. package/dist/wgpuEffectPass.js +271 -0
  68. package/dist/wgpuEffectPass.js.map +1 -0
  69. package/dist/wgpuEffectProgramCache.d.ts +2 -2
  70. package/dist/wgpuEffectProgramCache.d.ts.map +1 -1
  71. package/dist/wgpuEffectProgramCache.js +5 -5
  72. package/dist/wgpuEffectProgramCache.js.map +1 -1
  73. package/dist/wgpuEffectTintShader.d.ts +8 -0
  74. package/dist/wgpuEffectTintShader.d.ts.map +1 -0
  75. package/dist/wgpuEffectTintShader.js +109 -0
  76. package/dist/wgpuEffectTintShader.js.map +1 -0
  77. package/dist/wgpuFilmGrainEffect.d.ts.map +1 -1
  78. package/dist/wgpuFilmGrainEffect.js +2 -2
  79. package/dist/wgpuFilmGrainEffect.js.map +1 -1
  80. package/dist/wgpuFxaaEffect.d.ts.map +1 -1
  81. package/dist/wgpuFxaaEffect.js +2 -2
  82. package/dist/wgpuFxaaEffect.js.map +1 -1
  83. package/dist/wgpuGlitchEffect.d.ts.map +1 -1
  84. package/dist/wgpuGlitchEffect.js +2 -2
  85. package/dist/wgpuGlitchEffect.js.map +1 -1
  86. package/dist/wgpuGodRaysEffect.d.ts.map +1 -1
  87. package/dist/wgpuGodRaysEffect.js +2 -2
  88. package/dist/wgpuGodRaysEffect.js.map +1 -1
  89. package/dist/wgpuGradientBevelEffect.d.ts +4 -0
  90. package/dist/wgpuGradientBevelEffect.d.ts.map +1 -0
  91. package/dist/wgpuGradientBevelEffect.js +191 -0
  92. package/dist/wgpuGradientBevelEffect.js.map +1 -0
  93. package/dist/wgpuGradientGlowEffect.d.ts +4 -0
  94. package/dist/wgpuGradientGlowEffect.d.ts.map +1 -0
  95. package/dist/wgpuGradientGlowEffect.js +103 -0
  96. package/dist/wgpuGradientGlowEffect.js.map +1 -0
  97. package/dist/wgpuHalftoneEffect.d.ts.map +1 -1
  98. package/dist/wgpuHalftoneEffect.js +2 -2
  99. package/dist/wgpuHalftoneEffect.js.map +1 -1
  100. package/dist/wgpuInnerGlowEffect.d.ts +4 -0
  101. package/dist/wgpuInnerGlowEffect.d.ts.map +1 -0
  102. package/dist/wgpuInnerGlowEffect.js +50 -0
  103. package/dist/wgpuInnerGlowEffect.js.map +1 -0
  104. package/dist/wgpuInnerShadowEffect.d.ts +4 -0
  105. package/dist/wgpuInnerShadowEffect.d.ts.map +1 -0
  106. package/dist/wgpuInnerShadowEffect.js +55 -0
  107. package/dist/wgpuInnerShadowEffect.js.map +1 -0
  108. package/dist/wgpuKuwaharaEffect.d.ts.map +1 -1
  109. package/dist/wgpuKuwaharaEffect.js +2 -2
  110. package/dist/wgpuKuwaharaEffect.js.map +1 -1
  111. package/dist/wgpuLensDirtEffect.d.ts.map +1 -1
  112. package/dist/wgpuLensDirtEffect.js +2 -2
  113. package/dist/wgpuLensDirtEffect.js.map +1 -1
  114. package/dist/wgpuLensDistortionEffect.d.ts.map +1 -1
  115. package/dist/wgpuLensDistortionEffect.js +2 -2
  116. package/dist/wgpuLensDistortionEffect.js.map +1 -1
  117. package/dist/wgpuLensFlareEffect.d.ts.map +1 -1
  118. package/dist/wgpuLensFlareEffect.js +2 -2
  119. package/dist/wgpuLensFlareEffect.js.map +1 -1
  120. package/dist/wgpuMedianEffect.d.ts +5 -0
  121. package/dist/wgpuMedianEffect.d.ts.map +1 -0
  122. package/dist/wgpuMedianEffect.js +74 -0
  123. package/dist/wgpuMedianEffect.js.map +1 -0
  124. package/dist/wgpuMotionBlurEffect.d.ts.map +1 -1
  125. package/dist/wgpuMotionBlurEffect.js +6 -7
  126. package/dist/wgpuMotionBlurEffect.js.map +1 -1
  127. package/dist/wgpuOuterGlowEffect.d.ts +4 -0
  128. package/dist/wgpuOuterGlowEffect.d.ts.map +1 -0
  129. package/dist/wgpuOuterGlowEffect.js +46 -0
  130. package/dist/wgpuOuterGlowEffect.js.map +1 -0
  131. package/dist/wgpuOutlineEffect.d.ts.map +1 -1
  132. package/dist/wgpuOutlineEffect.js +2 -2
  133. package/dist/wgpuOutlineEffect.js.map +1 -1
  134. package/dist/wgpuPixelateEffect.d.ts.map +1 -1
  135. package/dist/wgpuPixelateEffect.js +2 -2
  136. package/dist/wgpuPixelateEffect.js.map +1 -1
  137. package/dist/wgpuPosterizeEffect.d.ts.map +1 -1
  138. package/dist/wgpuPosterizeEffect.js +2 -2
  139. package/dist/wgpuPosterizeEffect.js.map +1 -1
  140. package/dist/wgpuRadialBlurEffect.d.ts.map +1 -1
  141. package/dist/wgpuRadialBlurEffect.js +2 -2
  142. package/dist/wgpuRadialBlurEffect.js.map +1 -1
  143. package/dist/wgpuRenderEffectPipeline.d.ts +2 -2
  144. package/dist/wgpuRenderEffectPipeline.d.ts.map +1 -1
  145. package/dist/wgpuRenderEffectPipeline.js +74 -15
  146. package/dist/wgpuRenderEffectPipeline.js.map +1 -1
  147. package/dist/wgpuRenderEffectRegistrants.d.ts +1 -0
  148. package/dist/wgpuRenderEffectRegistrants.d.ts.map +1 -1
  149. package/dist/wgpuRenderEffectRegistrants.js +39 -28
  150. package/dist/wgpuRenderEffectRegistrants.js.map +1 -1
  151. package/dist/wgpuScanlinesEffect.d.ts.map +1 -1
  152. package/dist/wgpuScanlinesEffect.js +2 -2
  153. package/dist/wgpuScanlinesEffect.js.map +1 -1
  154. package/dist/wgpuScreenSpaceFogEffect.d.ts.map +1 -1
  155. package/dist/wgpuScreenSpaceFogEffect.js +2 -2
  156. package/dist/wgpuScreenSpaceFogEffect.js.map +1 -1
  157. package/dist/wgpuSharpenEffect.d.ts.map +1 -1
  158. package/dist/wgpuSharpenEffect.js +2 -2
  159. package/dist/wgpuSharpenEffect.js.map +1 -1
  160. package/dist/wgpuSketchEffect.d.ts.map +1 -1
  161. package/dist/wgpuSketchEffect.js +2 -2
  162. package/dist/wgpuSketchEffect.js.map +1 -1
  163. package/dist/wgpuSmaaEffect.d.ts.map +1 -1
  164. package/dist/wgpuSmaaEffect.js +2 -2
  165. package/dist/wgpuSmaaEffect.js.map +1 -1
  166. package/dist/wgpuSsaoEffect.d.ts.map +1 -1
  167. package/dist/wgpuSsaoEffect.js +2 -2
  168. package/dist/wgpuSsaoEffect.js.map +1 -1
  169. package/dist/wgpuSsrEffect.d.ts.map +1 -1
  170. package/dist/wgpuSsrEffect.js +2 -2
  171. package/dist/wgpuSsrEffect.js.map +1 -1
  172. package/dist/wgpuTaaEffect.d.ts.map +1 -1
  173. package/dist/wgpuTaaEffect.js +2 -2
  174. package/dist/wgpuTaaEffect.js.map +1 -1
  175. package/dist/wgpuTiltShiftEffect.d.ts.map +1 -1
  176. package/dist/wgpuTiltShiftEffect.js +2 -2
  177. package/dist/wgpuTiltShiftEffect.js.map +1 -1
  178. package/dist/wgpuToneMapEffect.d.ts.map +1 -1
  179. package/dist/wgpuToneMapEffect.js +2 -2
  180. package/dist/wgpuToneMapEffect.js.map +1 -1
  181. package/dist/wgpuVignetteEffect.d.ts.map +1 -1
  182. package/dist/wgpuVignetteEffect.js +2 -2
  183. package/dist/wgpuVignetteEffect.js.map +1 -1
  184. package/dist/wgpuWhiteBalanceEffect.d.ts.map +1 -1
  185. package/dist/wgpuWhiteBalanceEffect.js +2 -2
  186. package/dist/wgpuWhiteBalanceEffect.js.map +1 -1
  187. package/package.json +11 -7
  188. package/src/wgpuBevelEffect.test.ts +13 -0
  189. package/src/wgpuBlurEffect.test.ts +19 -0
  190. package/src/wgpuColorLutPass.test.ts +7 -0
  191. package/src/wgpuColorMatrixPass.test.ts +7 -0
  192. package/src/wgpuConvolutionEffect.test.ts +13 -0
  193. package/src/wgpuDropShadowEffect.test.ts +109 -0
  194. package/src/wgpuEffectBlitShader.test.ts +23 -0
  195. package/src/wgpuEffectBoxBlur.test.ts +75 -0
  196. package/src/wgpuEffectGradientRamp.test.ts +7 -0
  197. package/src/wgpuEffectPass.test.ts +51 -0
  198. package/src/wgpuEffectTintShader.test.ts +66 -0
  199. package/src/wgpuGradientBevelEffect.test.ts +13 -0
  200. package/src/wgpuGradientGlowEffect.test.ts +13 -0
  201. package/src/wgpuInnerGlowEffect.test.ts +137 -0
  202. package/src/wgpuInnerShadowEffect.test.ts +137 -0
  203. package/src/wgpuMedianEffect.test.ts +13 -0
  204. package/src/wgpuOuterGlowEffect.test.ts +108 -0
  205. package/src/wgpuRenderEffectPipeline.test.ts +2 -0
  206. package/src/wgpuRenderEffectRegistrants.test.ts +25 -14
  207. package/dist/wgpuBrightnessContrastEffect.d.ts +0 -4
  208. package/dist/wgpuBrightnessContrastEffect.d.ts.map +0 -1
  209. package/dist/wgpuBrightnessContrastEffect.js +0 -29
  210. package/dist/wgpuBrightnessContrastEffect.js.map +0 -1
  211. package/dist/wgpuChannelMixerEffect.d.ts +0 -4
  212. package/dist/wgpuChannelMixerEffect.d.ts.map +0 -1
  213. package/dist/wgpuChannelMixerEffect.js +0 -34
  214. package/dist/wgpuChannelMixerEffect.js.map +0 -1
  215. package/dist/wgpuColorGradeEffect.d.ts +0 -4
  216. package/dist/wgpuColorGradeEffect.d.ts.map +0 -1
  217. package/dist/wgpuColorGradeEffect.js +0 -52
  218. package/dist/wgpuColorGradeEffect.js.map +0 -1
  219. package/dist/wgpuExposureEffect.d.ts +0 -4
  220. package/dist/wgpuExposureEffect.d.ts.map +0 -1
  221. package/dist/wgpuExposureEffect.js +0 -28
  222. package/dist/wgpuExposureEffect.js.map +0 -1
  223. package/dist/wgpuGrayscaleEffect.d.ts +0 -4
  224. package/dist/wgpuGrayscaleEffect.d.ts.map +0 -1
  225. package/dist/wgpuGrayscaleEffect.js +0 -27
  226. package/dist/wgpuGrayscaleEffect.js.map +0 -1
  227. package/dist/wgpuHueSaturationEffect.d.ts +0 -4
  228. package/dist/wgpuHueSaturationEffect.d.ts.map +0 -1
  229. package/dist/wgpuHueSaturationEffect.js +0 -75
  230. package/dist/wgpuHueSaturationEffect.js.map +0 -1
  231. package/dist/wgpuInvertEffect.d.ts +0 -4
  232. package/dist/wgpuInvertEffect.d.ts.map +0 -1
  233. package/dist/wgpuInvertEffect.js +0 -26
  234. package/dist/wgpuInvertEffect.js.map +0 -1
  235. package/dist/wgpuLiftGammaGainEffect.d.ts +0 -4
  236. package/dist/wgpuLiftGammaGainEffect.d.ts.map +0 -1
  237. package/dist/wgpuLiftGammaGainEffect.js +0 -51
  238. package/dist/wgpuLiftGammaGainEffect.js.map +0 -1
  239. package/dist/wgpuLookupTableGradeEffect.d.ts +0 -4
  240. package/dist/wgpuLookupTableGradeEffect.d.ts.map +0 -1
  241. package/dist/wgpuLookupTableGradeEffect.js +0 -30
  242. package/dist/wgpuLookupTableGradeEffect.js.map +0 -1
  243. package/dist/wgpuSepiaEffect.d.ts +0 -4
  244. package/dist/wgpuSepiaEffect.d.ts.map +0 -1
  245. package/dist/wgpuSepiaEffect.js +0 -31
  246. package/dist/wgpuSepiaEffect.js.map +0 -1
  247. package/src/wgpuBrightnessContrastEffect.test.ts +0 -16
  248. package/src/wgpuChannelMixerEffect.test.ts +0 -13
  249. package/src/wgpuColorGradeEffect.test.ts +0 -13
  250. package/src/wgpuExposureEffect.test.ts +0 -13
  251. package/src/wgpuGrayscaleEffect.test.ts +0 -13
  252. package/src/wgpuHueSaturationEffect.test.ts +0 -13
  253. package/src/wgpuInvertEffect.test.ts +0 -13
  254. package/src/wgpuLiftGammaGainEffect.test.ts +0 -13
  255. package/src/wgpuLookupTableGradeEffect.test.ts +0 -16
  256. package/src/wgpuSepiaEffect.test.ts +0 -13
@@ -0,0 +1,13 @@
1
+ import { applyMedianEffectToWgpu, defaultWgpuMedianEffectRunner } from './wgpuMedianEffect';
2
+
3
+ describe('applyMedianEffectToWgpu', () => {
4
+ it('is a function', () => {
5
+ expect(typeof applyMedianEffectToWgpu).toBe('function');
6
+ });
7
+ });
8
+
9
+ describe('defaultWgpuMedianEffectRunner', () => {
10
+ it('is a function', () => {
11
+ expect(typeof defaultWgpuMedianEffectRunner).toBe('function');
12
+ });
13
+ });
@@ -0,0 +1,108 @@
1
+ vi.hoisted(() => {
2
+ vi.resetModules();
3
+ });
4
+
5
+ vi.mock('@flighthq/render-wgpu', () => {
6
+ let nextTargetId = 0;
7
+ return {
8
+ acquireWgpuRenderTarget: vi.fn((_state, _pool, descriptor) => ({
9
+ ...descriptor,
10
+ id: `scratch-${nextTargetId++}`,
11
+ texture: {},
12
+ })),
13
+ releaseWgpuRenderTarget: vi.fn(),
14
+ };
15
+ });
16
+
17
+ vi.mock('./wgpuEffectBlitShader', () => ({
18
+ applyWgpuEffectBlitPass: vi.fn(),
19
+ applyWgpuEffectErasePass: vi.fn(),
20
+ }));
21
+
22
+ vi.mock('./wgpuEffectBoxBlur', () => ({
23
+ applyWgpuEffectBoxBlur: vi.fn(),
24
+ }));
25
+
26
+ vi.mock('./wgpuEffectPass', () => ({
27
+ clearWgpuEffectTarget: vi.fn(),
28
+ }));
29
+
30
+ vi.mock('./wgpuEffectTintShader', () => ({
31
+ applyWgpuEffectTintPass: vi.fn(),
32
+ }));
33
+
34
+ import { applyWgpuEffectBlitPass, applyWgpuEffectErasePass } from './wgpuEffectBlitShader';
35
+ import { applyOuterGlowEffectToWgpu, defaultWgpuOuterGlowEffectRunner } from './wgpuOuterGlowEffect';
36
+
37
+ describe('applyOuterGlowEffectToWgpu', () => {
38
+ it('is a function', () => {
39
+ expect(typeof applyOuterGlowEffectToWgpu).toBe('function');
40
+ });
41
+
42
+ it('draws the source by default', () => {
43
+ const source = createTarget('source');
44
+ const dest = createTarget('dest');
45
+
46
+ applyOuterGlowEffectToWgpu(createState(), source, dest, createPool(), { kind: 'OuterGlowEffect' });
47
+
48
+ expect(applyWgpuEffectBlitPass).toHaveBeenCalledWith(expect.anything(), source, dest);
49
+ expect(applyWgpuEffectErasePass).not.toHaveBeenCalled();
50
+ });
51
+
52
+ it('hides the source when sourceMode is hide', () => {
53
+ const source = createTarget('source');
54
+ const dest = createTarget('dest');
55
+
56
+ applyOuterGlowEffectToWgpu(createState(), source, dest, createPool(), {
57
+ kind: 'OuterGlowEffect',
58
+ sourceMode: 'hide',
59
+ });
60
+
61
+ expect(applyWgpuEffectBlitPass).not.toHaveBeenCalledWith(expect.anything(), source, dest);
62
+ expect(applyWgpuEffectErasePass).not.toHaveBeenCalled();
63
+ });
64
+
65
+ it('erases the source silhouette when sourceMode is knockout', () => {
66
+ const source = createTarget('source');
67
+ const dest = createTarget('dest');
68
+
69
+ applyOuterGlowEffectToWgpu(createState(), source, dest, createPool(), {
70
+ kind: 'OuterGlowEffect',
71
+ sourceMode: 'knockout',
72
+ });
73
+
74
+ expect(applyWgpuEffectBlitPass).not.toHaveBeenCalledWith(expect.anything(), source, dest);
75
+ expect(applyWgpuEffectErasePass).toHaveBeenCalledWith(expect.anything(), source, dest);
76
+ });
77
+ });
78
+
79
+ describe('defaultWgpuOuterGlowEffectRunner', () => {
80
+ it('is a function', () => {
81
+ expect(typeof defaultWgpuOuterGlowEffectRunner).toBe('function');
82
+ });
83
+ });
84
+
85
+ beforeEach(() => {
86
+ vi.clearAllMocks();
87
+ });
88
+
89
+ afterAll(() => {
90
+ vi.doUnmock('@flighthq/render-wgpu');
91
+ vi.doUnmock('./wgpuEffectBlitShader');
92
+ vi.doUnmock('./wgpuEffectBoxBlur');
93
+ vi.doUnmock('./wgpuEffectPass');
94
+ vi.doUnmock('./wgpuEffectTintShader');
95
+ vi.resetModules();
96
+ });
97
+
98
+ function createState(): never {
99
+ return {} as never;
100
+ }
101
+
102
+ function createPool(): never {
103
+ return { free: [] } as never;
104
+ }
105
+
106
+ function createTarget(id: string): never {
107
+ return { id, width: 32, height: 16, format: 'rgba8', texture: {} } as never;
108
+ }
@@ -36,6 +36,8 @@ describe('setWgpuRenderEffectVelocityTexture', () => {
36
36
  options: {},
37
37
  sceneTarget: null,
38
38
  pool: { free: [] },
39
+ lutCache: { signature: null, lut: null },
40
+ lutTexture: { texture: null, size: 0, lut: null },
39
41
  velocityTexture: null,
40
42
  };
41
43
  const texture = {} as GPUTexture;
@@ -5,6 +5,7 @@ import {
5
5
  registerBloomWgpuRenderEffects,
6
6
  registerBlurWgpuRenderEffects,
7
7
  registerColorWgpuRenderEffects,
8
+ registerCompositeWgpuRenderEffects,
8
9
  registerScreenSpaceWgpuRenderEffects,
9
10
  registerStandardWgpuRenderEffects,
10
11
  registerStylizeWgpuRenderEffects,
@@ -53,22 +54,33 @@ describe('registerBlurWgpuRenderEffects', () => {
53
54
  });
54
55
 
55
56
  describe('registerColorWgpuRenderEffects', () => {
56
- it('registers all color and tone effect runners', async () => {
57
+ it('registers the remaining color and tone effect runners', async () => {
57
58
  const state = await createWgpuRenderStateForTest();
58
59
  registerColorWgpuRenderEffects(state);
59
- expect(getWgpuRenderEffectRunner(state, 'BrightnessContrastEffect')).not.toBe(null);
60
- expect(getWgpuRenderEffectRunner(state, 'ChannelMixerEffect')).not.toBe(null);
61
- expect(getWgpuRenderEffectRunner(state, 'ColorGradeEffect')).not.toBe(null);
62
- expect(getWgpuRenderEffectRunner(state, 'ExposureEffect')).not.toBe(null);
63
- expect(getWgpuRenderEffectRunner(state, 'GrayscaleEffect')).not.toBe(null);
64
- expect(getWgpuRenderEffectRunner(state, 'HueSaturationEffect')).not.toBe(null);
65
- expect(getWgpuRenderEffectRunner(state, 'InvertEffect')).not.toBe(null);
66
- expect(getWgpuRenderEffectRunner(state, 'LiftGammaGainEffect')).not.toBe(null);
67
- expect(getWgpuRenderEffectRunner(state, 'LookupTableGradeEffect')).not.toBe(null);
68
- expect(getWgpuRenderEffectRunner(state, 'PosterizeEffect')).not.toBe(null);
69
- expect(getWgpuRenderEffectRunner(state, 'SepiaEffect')).not.toBe(null);
70
60
  expect(getWgpuRenderEffectRunner(state, 'ToneMapEffect')).not.toBe(null);
71
61
  expect(getWgpuRenderEffectRunner(state, 'WhiteBalanceEffect')).not.toBe(null);
62
+ // The pointwise color ops moved to @flighthq/adjustments and fold through the pipeline, no runner.
63
+ expect(getWgpuRenderEffectRunner(state, 'ColorGradeEffect')).toBe(null);
64
+ expect(getWgpuRenderEffectRunner(state, 'HueSaturationEffect')).toBe(null);
65
+ expect(getWgpuRenderEffectRunner(state, 'LookupTableGradeEffect')).toBe(null);
66
+ });
67
+ });
68
+
69
+ describe('registerCompositeWgpuRenderEffects', () => {
70
+ it('registers the seven former-filter composite effect runners', async () => {
71
+ const state = await createWgpuRenderStateForTest();
72
+ registerCompositeWgpuRenderEffects(state);
73
+ for (const kind of [
74
+ 'BevelEffect',
75
+ 'DropShadowEffect',
76
+ 'GradientBevelEffect',
77
+ 'GradientGlowEffect',
78
+ 'InnerGlowEffect',
79
+ 'InnerShadowEffect',
80
+ 'OuterGlowEffect',
81
+ ]) {
82
+ expect(getWgpuRenderEffectRunner(state, kind)).not.toBe(null);
83
+ }
72
84
  });
73
85
  });
74
86
 
@@ -85,14 +97,13 @@ describe('registerScreenSpaceWgpuRenderEffects', () => {
85
97
  });
86
98
 
87
99
  describe('registerStandardWgpuRenderEffects', () => {
88
- it('registers all 45 standard effect runners', async () => {
100
+ it('registers all 43 standard effect runners', async () => {
89
101
  const state = await createWgpuRenderStateForTest();
90
102
  registerStandardWgpuRenderEffects(state);
91
103
  // Spot-check one from each band.
92
104
  expect(getWgpuRenderEffectRunner(state, 'FxaaEffect')).not.toBe(null);
93
105
  expect(getWgpuRenderEffectRunner(state, 'BloomEffect')).not.toBe(null);
94
106
  expect(getWgpuRenderEffectRunner(state, 'DirectionalBlurEffect')).not.toBe(null);
95
- expect(getWgpuRenderEffectRunner(state, 'GrayscaleEffect')).not.toBe(null);
96
107
  expect(getWgpuRenderEffectRunner(state, 'SsaoEffect')).not.toBe(null);
97
108
  expect(getWgpuRenderEffectRunner(state, 'HalftoneEffect')).not.toBe(null);
98
109
  });
@@ -1,4 +0,0 @@
1
- import type { BrightnessContrastEffect, WgpuRenderEffectRunner, WgpuRenderState, WgpuRenderTarget } from '@flighthq/types';
2
- export declare function applyBrightnessContrastEffectToWgpu(state: WgpuRenderState, source: Readonly<WgpuRenderTarget>, dest: Readonly<WgpuRenderTarget>, effect: Readonly<BrightnessContrastEffect>): void;
3
- export declare const defaultWgpuBrightnessContrastEffectRunner: WgpuRenderEffectRunner;
4
- //# sourceMappingURL=wgpuBrightnessContrastEffect.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wgpuBrightnessContrastEffect.d.ts","sourceRoot":"","sources":["../src/wgpuBrightnessContrastEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,wBAAwB,EACxB,sBAAsB,EACtB,eAAe,EACf,gBAAgB,EACjB,MAAM,iBAAiB,CAAC;AAKzB,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAChC,MAAM,EAAE,QAAQ,CAAC,wBAAwB,CAAC,GACzC,IAAI,CAaN;AAED,eAAO,MAAM,yCAAyC,EAAE,sBAEvD,CAAC"}
@@ -1,29 +0,0 @@
1
- import { drawWgpuFilterPass } from '@flighthq/filters-wgpu';
2
- import { getWgpuEffectPipeline } from './wgpuEffectProgramCache';
3
- // Brightness/contrast: shift then scale about mid-grey.
4
- export function applyBrightnessContrastEffectToWgpu(state, source, dest, effect) {
5
- const brightness = effect.brightness ?? 0;
6
- const contrast = effect.contrast ?? 1;
7
- const pipeline = getWgpuEffectPipeline(state, 'colorGrade.brightnessContrast', BRIGHTNESS_CONTRAST_FRAGMENT_WGSL, 'replace');
8
- drawWgpuFilterPass(state, source, dest, pipeline, (f32) => {
9
- f32[0] = brightness;
10
- f32[1] = contrast;
11
- });
12
- }
13
- export const defaultWgpuBrightnessContrastEffectRunner = (ctx, effect) => {
14
- applyBrightnessContrastEffectToWgpu(ctx.state, ctx.source, ctx.dest, effect);
15
- };
16
- // Slot layout: [0]=brightness, [1]=contrast.
17
- const BRIGHTNESS_CONTRAST_FRAGMENT_WGSL = /* wgsl */ `
18
- struct Uniforms { u_brightness : f32, u_contrast : f32, _pad0 : f32, _pad1 : f32, }
19
- @group(0) @binding(0) var<uniform> uni : Uniforms;
20
- @group(1) @binding(0) var tex : texture_2d<f32>;
21
- @group(1) @binding(1) var smp : sampler;
22
-
23
- @fragment
24
- fn fs_main(@location(0) uv : vec2f) -> @location(0) vec4f {
25
- let c = textureSampleLevel(tex, smp, uv, 0.0);
26
- let rgb = (c.rgb + uni.u_brightness - 0.5) * uni.u_contrast + 0.5;
27
- return vec4f(clamp(rgb, vec3f(0.0), vec3f(1.0)), c.a);
28
- }`;
29
- //# sourceMappingURL=wgpuBrightnessContrastEffect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wgpuBrightnessContrastEffect.js","sourceRoot":"","sources":["../src/wgpuBrightnessContrastEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAQ5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,wDAAwD;AACxD,MAAM,UAAU,mCAAmC,CACjD,KAAsB,EACtB,MAAkC,EAClC,IAAgC,EAChC,MAA0C;IAE1C,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,qBAAqB,CACpC,KAAK,EACL,+BAA+B,EAC/B,iCAAiC,EACjC,SAAS,CACV,CAAC;IACF,kBAAkB,CAAC,KAAK,EAAE,MAA0B,EAAE,IAAwB,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;QAChG,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;QACpB,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,yCAAyC,GAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IAC/F,mCAAmC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAkC,CAAC,CAAC;AAC3G,CAAC,CAAC;AAEF,6CAA6C;AAC7C,MAAM,iCAAiC,GAAG,UAAU,CAAC;;;;;;;;;;;EAWnD,CAAC"}
@@ -1,4 +0,0 @@
1
- import type { ChannelMixerEffect, WgpuRenderEffectRunner, WgpuRenderState, WgpuRenderTarget } from '@flighthq/types';
2
- export declare function applyChannelMixerEffectToWgpu(state: WgpuRenderState, source: Readonly<WgpuRenderTarget>, dest: Readonly<WgpuRenderTarget>, effect: Readonly<ChannelMixerEffect>): void;
3
- export declare const defaultWgpuChannelMixerEffectRunner: WgpuRenderEffectRunner;
4
- //# sourceMappingURL=wgpuChannelMixerEffect.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wgpuChannelMixerEffect.d.ts","sourceRoot":"","sources":["../src/wgpuChannelMixerEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAMrH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAChC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,GACnC,IAAI,CAON;AAED,eAAO,MAAM,mCAAmC,EAAE,sBAEjD,CAAC"}
@@ -1,34 +0,0 @@
1
- import { drawWgpuFilterPass } from '@flighthq/filters-wgpu';
2
- import { getWgpuEffectPipeline } from './wgpuEffectProgramCache';
3
- // Channel mixer: apply a 3x4 row-major RGB->RGB matrix plus per-row offset. The matrix is uploaded as
4
- // three vec4f rows (r/g/b), each 16-byte aligned, so the std140 layout maps a row directly onto a slot.
5
- export function applyChannelMixerEffectToWgpu(state, source, dest, effect) {
6
- const matrix = new Float32Array(12);
7
- for (let i = 0; i < 12; i++)
8
- matrix[i] = effect.matrix[i] ?? IDENTITY_CHANNEL_MIXER[i];
9
- const pipeline = getWgpuEffectPipeline(state, 'colorGrade.channelMixer', CHANNEL_MIXER_FRAGMENT_WGSL, 'replace');
10
- drawWgpuFilterPass(state, source, dest, pipeline, (f32) => {
11
- for (let i = 0; i < 12; i++)
12
- f32[i] = matrix[i];
13
- });
14
- }
15
- export const defaultWgpuChannelMixerEffectRunner = (ctx, effect) => {
16
- applyChannelMixerEffectToWgpu(ctx.state, ctx.source, ctx.dest, effect);
17
- };
18
- const IDENTITY_CHANNEL_MIXER = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0];
19
- // Slot layout: three vec4f rows, each 16-byte aligned — [0..3]=row r, [4..7]=row g, [8..11]=row b.
20
- const CHANNEL_MIXER_FRAGMENT_WGSL = /* wgsl */ `
21
- struct Uniforms { u_row_r : vec4f, u_row_g : vec4f, u_row_b : vec4f, }
22
- @group(0) @binding(0) var<uniform> uni : Uniforms;
23
- @group(1) @binding(0) var tex : texture_2d<f32>;
24
- @group(1) @binding(1) var smp : sampler;
25
-
26
- @fragment
27
- fn fs_main(@location(0) uv : vec2f) -> @location(0) vec4f {
28
- let c = textureSampleLevel(tex, smp, uv, 0.0);
29
- let r = uni.u_row_r.x * c.r + uni.u_row_r.y * c.g + uni.u_row_r.z * c.b + uni.u_row_r.w;
30
- let g = uni.u_row_g.x * c.r + uni.u_row_g.y * c.g + uni.u_row_g.z * c.b + uni.u_row_g.w;
31
- let b = uni.u_row_b.x * c.r + uni.u_row_b.y * c.g + uni.u_row_b.z * c.b + uni.u_row_b.w;
32
- return vec4f(clamp(vec3f(r, g, b), vec3f(0.0), vec3f(1.0)), c.a);
33
- }`;
34
- //# sourceMappingURL=wgpuChannelMixerEffect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wgpuChannelMixerEffect.js","sourceRoot":"","sources":["../src/wgpuChannelMixerEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAG5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,sGAAsG;AACtG,wGAAwG;AACxG,MAAM,UAAU,6BAA6B,CAC3C,KAAsB,EACtB,MAAkC,EAClC,IAAgC,EAChC,MAAoC;IAEpC,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;QAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,sBAAsB,CAAC,CAAC,CAAC,CAAC;IACvF,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,SAAS,CAAC,CAAC;IACjH,kBAAkB,CAAC,KAAK,EAAE,MAA0B,EAAE,IAAwB,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;QAChG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,mCAAmC,GAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACzF,6BAA6B,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAA4B,CAAC,CAAC;AAC/F,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAsB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAEvF,mGAAmG;AACnG,MAAM,2BAA2B,GAAG,UAAU,CAAC;;;;;;;;;;;;;EAa7C,CAAC"}
@@ -1,4 +0,0 @@
1
- import type { ColorGradeEffect, WgpuRenderEffectRunner, WgpuRenderState, WgpuRenderTarget } from '@flighthq/types';
2
- export declare function applyColorGradeEffectToWgpu(state: WgpuRenderState, source: Readonly<WgpuRenderTarget>, dest: Readonly<WgpuRenderTarget>, effect: Readonly<ColorGradeEffect>): void;
3
- export declare const defaultWgpuColorGradeEffectRunner: WgpuRenderEffectRunner;
4
- //# sourceMappingURL=wgpuColorGradeEffect.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wgpuColorGradeEffect.d.ts","sourceRoot":"","sources":["../src/wgpuColorGradeEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAKnH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAChC,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GACjC,IAAI,CAgBN;AAED,eAAO,MAAM,iCAAiC,EAAE,sBAE/C,CAAC"}
@@ -1,52 +0,0 @@
1
- import { drawWgpuFilterPass } from '@flighthq/filters-wgpu';
2
- import { getWgpuEffectPipeline } from './wgpuEffectProgramCache';
3
- // Color grade: combined exposure, brightness, contrast, saturation, and temperature/tint shift.
4
- export function applyColorGradeEffectToWgpu(state, source, dest, effect) {
5
- const exposure = Math.pow(2, effect.exposure ?? 0);
6
- const contrast = effect.contrast ?? 1;
7
- const saturation = effect.saturation ?? 1;
8
- const temperature = effect.temperature ?? 0;
9
- const tint = effect.tint ?? 0;
10
- const brightness = effect.brightness ?? 0;
11
- const pipeline = getWgpuEffectPipeline(state, 'colorGrade.colorGrade', COLOR_GRADE_FRAGMENT_WGSL, 'replace');
12
- drawWgpuFilterPass(state, source, dest, pipeline, (f32) => {
13
- f32[0] = exposure;
14
- f32[1] = contrast;
15
- f32[2] = saturation;
16
- f32[3] = temperature;
17
- f32[4] = tint;
18
- f32[5] = brightness;
19
- });
20
- }
21
- export const defaultWgpuColorGradeEffectRunner = (ctx, effect) => {
22
- applyColorGradeEffectToWgpu(ctx.state, ctx.source, ctx.dest, effect);
23
- };
24
- // Slot layout: [0]=exposure, [1]=contrast, [2]=saturation, [3]=temperature, [4]=tint, [5]=brightness.
25
- const COLOR_GRADE_FRAGMENT_WGSL = /* wgsl */ `
26
- struct Uniforms {
27
- u_exposure : f32,
28
- u_contrast : f32,
29
- u_saturation : f32,
30
- u_temperature : f32,
31
- u_tint : f32,
32
- u_brightness : f32,
33
- _pad0 : f32,
34
- _pad1 : f32,
35
- }
36
- @group(0) @binding(0) var<uniform> uni : Uniforms;
37
- @group(1) @binding(0) var tex : texture_2d<f32>;
38
- @group(1) @binding(1) var smp : sampler;
39
-
40
- @fragment
41
- fn fs_main(@location(0) uv : vec2f) -> @location(0) vec4f {
42
- let c = textureSampleLevel(tex, smp, uv, 0.0);
43
- var rgb = c.rgb * uni.u_exposure + uni.u_brightness;
44
- rgb.r += uni.u_temperature * 0.5;
45
- rgb.b -= uni.u_temperature * 0.5;
46
- rgb.g += uni.u_tint * 0.5;
47
- let l = dot(rgb, vec3f(0.2126, 0.7152, 0.0722));
48
- rgb = mix(vec3f(l), rgb, uni.u_saturation);
49
- rgb = (rgb - 0.5) * uni.u_contrast + 0.5;
50
- return vec4f(clamp(rgb, vec3f(0.0), vec3f(1.0)), c.a);
51
- }`;
52
- //# sourceMappingURL=wgpuColorGradeEffect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wgpuColorGradeEffect.js","sourceRoot":"","sources":["../src/wgpuColorGradeEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAG5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,gGAAgG;AAChG,MAAM,UAAU,2BAA2B,CACzC,KAAsB,EACtB,MAAkC,EAClC,IAAgC,EAChC,MAAkC;IAElC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;IAC9B,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,SAAS,CAAC,CAAC;IAC7G,kBAAkB,CAAC,KAAK,EAAE,MAA0B,EAAE,IAAwB,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;QAChG,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;QAClB,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;QAClB,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;QACpB,GAAG,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;QACrB,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACd,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,iCAAiC,GAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACvF,2BAA2B,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAA0B,CAAC,CAAC;AAC3F,CAAC,CAAC;AAEF,sGAAsG;AACtG,MAAM,yBAAyB,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;EA0B3C,CAAC"}
@@ -1,4 +0,0 @@
1
- import type { ExposureEffect, WgpuRenderEffectRunner, WgpuRenderState, WgpuRenderTarget } from '@flighthq/types';
2
- export declare function applyExposureEffectToWgpu(state: WgpuRenderState, source: Readonly<WgpuRenderTarget>, dest: Readonly<WgpuRenderTarget>, effect: Readonly<ExposureEffect>): void;
3
- export declare const defaultWgpuExposureEffectRunner: WgpuRenderEffectRunner;
4
- //# sourceMappingURL=wgpuExposureEffect.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wgpuExposureEffect.d.ts","sourceRoot":"","sources":["../src/wgpuExposureEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAMjH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAChC,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,GAC/B,IAAI,CAON;AAED,eAAO,MAAM,+BAA+B,EAAE,sBAE7C,CAAC"}
@@ -1,28 +0,0 @@
1
- import { drawWgpuFilterPass } from '@flighthq/filters-wgpu';
2
- import { getWgpuEffectPipeline } from './wgpuEffectProgramCache';
3
- // Exposure: scale linear color by 2^stops. Single-pass reference recipe, the Wgpu mirror of
4
- // effects-gl's applyExposureEffectToGl. The stops are converted to a linear multiplier in JS.
5
- export function applyExposureEffectToWgpu(state, source, dest, effect) {
6
- const exposure = effect.exposure ?? 0;
7
- const multiplier = Math.pow(2, exposure);
8
- const pipeline = getWgpuEffectPipeline(state, 'exposure', EXPOSURE_FRAGMENT_WGSL, 'replace');
9
- drawWgpuFilterPass(state, source, dest, pipeline, (f32) => {
10
- f32[0] = multiplier;
11
- });
12
- }
13
- export const defaultWgpuExposureEffectRunner = (ctx, effect) => {
14
- applyExposureEffectToWgpu(ctx.state, ctx.source, ctx.dest, effect);
15
- };
16
- // Slot [0]=multiplier (2^stops, precomputed in JS); the scalar struct pads to a 16-byte boundary.
17
- const EXPOSURE_FRAGMENT_WGSL = /* wgsl */ `
18
- struct Uniforms { u_exposure : f32, _pad0 : f32, _pad1 : f32, _pad2 : f32, }
19
- @group(0) @binding(0) var<uniform> uni : Uniforms;
20
- @group(1) @binding(0) var tex : texture_2d<f32>;
21
- @group(1) @binding(1) var smp : sampler;
22
-
23
- @fragment
24
- fn fs_main(@location(0) uv : vec2f) -> @location(0) vec4f {
25
- let c = textureSampleLevel(tex, smp, uv, 0.0);
26
- return vec4f(c.rgb * uni.u_exposure, c.a);
27
- }`;
28
- //# sourceMappingURL=wgpuExposureEffect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wgpuExposureEffect.js","sourceRoot":"","sources":["../src/wgpuExposureEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAG5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,4FAA4F;AAC5F,8FAA8F;AAC9F,MAAM,UAAU,yBAAyB,CACvC,KAAsB,EACtB,MAAkC,EAClC,IAAgC,EAChC,MAAgC;IAEhC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,EAAE,UAAU,EAAE,sBAAsB,EAAE,SAAS,CAAC,CAAC;IAC7F,kBAAkB,CAAC,KAAK,EAAE,MAA0B,EAAE,IAAwB,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;QAChG,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,+BAA+B,GAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACrF,yBAAyB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAwB,CAAC,CAAC;AACvF,CAAC,CAAC;AAEF,kGAAkG;AAClG,MAAM,sBAAsB,GAAG,UAAU,CAAC;;;;;;;;;;EAUxC,CAAC"}
@@ -1,4 +0,0 @@
1
- import type { GrayscaleEffect, WgpuRenderEffectRunner, WgpuRenderState, WgpuRenderTarget } from '@flighthq/types';
2
- export declare function applyGrayscaleEffectToWgpu(state: WgpuRenderState, source: Readonly<WgpuRenderTarget>, dest: Readonly<WgpuRenderTarget>, effect: Readonly<GrayscaleEffect>): void;
3
- export declare const defaultWgpuGrayscaleEffectRunner: WgpuRenderEffectRunner;
4
- //# sourceMappingURL=wgpuGrayscaleEffect.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wgpuGrayscaleEffect.d.ts","sourceRoot":"","sources":["../src/wgpuGrayscaleEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,sBAAsB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAKlH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAChC,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,GAChC,IAAI,CAMN;AAED,eAAO,MAAM,gCAAgC,EAAE,sBAE9C,CAAC"}
@@ -1,27 +0,0 @@
1
- import { drawWgpuFilterPass } from '@flighthq/filters-wgpu';
2
- import { getWgpuEffectPipeline } from './wgpuEffectProgramCache';
3
- // Grayscale: mix toward luminance by intensity.
4
- export function applyGrayscaleEffectToWgpu(state, source, dest, effect) {
5
- const intensity = effect.intensity ?? 1;
6
- const pipeline = getWgpuEffectPipeline(state, 'colorGrade.grayscale', GRAYSCALE_FRAGMENT_WGSL, 'replace');
7
- drawWgpuFilterPass(state, source, dest, pipeline, (f32) => {
8
- f32[0] = intensity;
9
- });
10
- }
11
- export const defaultWgpuGrayscaleEffectRunner = (ctx, effect) => {
12
- applyGrayscaleEffectToWgpu(ctx.state, ctx.source, ctx.dest, effect);
13
- };
14
- // Slot layout: [0]=intensity.
15
- const GRAYSCALE_FRAGMENT_WGSL = /* wgsl */ `
16
- struct Uniforms { u_intensity : f32, _pad0 : f32, _pad1 : f32, _pad2 : f32, }
17
- @group(0) @binding(0) var<uniform> uni : Uniforms;
18
- @group(1) @binding(0) var tex : texture_2d<f32>;
19
- @group(1) @binding(1) var smp : sampler;
20
-
21
- @fragment
22
- fn fs_main(@location(0) uv : vec2f) -> @location(0) vec4f {
23
- let c = textureSampleLevel(tex, smp, uv, 0.0);
24
- let l = dot(c.rgb, vec3f(0.2126, 0.7152, 0.0722));
25
- return vec4f(mix(c.rgb, vec3f(l), uni.u_intensity), c.a);
26
- }`;
27
- //# sourceMappingURL=wgpuGrayscaleEffect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wgpuGrayscaleEffect.js","sourceRoot":"","sources":["../src/wgpuGrayscaleEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAG5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,gDAAgD;AAChD,MAAM,UAAU,0BAA0B,CACxC,KAAsB,EACtB,MAAkC,EAClC,IAAgC,EAChC,MAAiC;IAEjC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,SAAS,CAAC,CAAC;IAC1G,kBAAkB,CAAC,KAAK,EAAE,MAA0B,EAAE,IAAwB,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;QAChG,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IACrB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,gCAAgC,GAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACtF,0BAA0B,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAyB,CAAC,CAAC;AACzF,CAAC,CAAC;AAEF,8BAA8B;AAC9B,MAAM,uBAAuB,GAAG,UAAU,CAAC;;;;;;;;;;;EAWzC,CAAC"}
@@ -1,4 +0,0 @@
1
- import type { HueSaturationEffect, WgpuRenderEffectRunner, WgpuRenderState, WgpuRenderTarget } from '@flighthq/types';
2
- export declare function applyHueSaturationEffectToWgpu(state: WgpuRenderState, source: Readonly<WgpuRenderTarget>, dest: Readonly<WgpuRenderTarget>, effect: Readonly<HueSaturationEffect>): void;
3
- export declare const defaultWgpuHueSaturationEffectRunner: WgpuRenderEffectRunner;
4
- //# sourceMappingURL=wgpuHueSaturationEffect.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wgpuHueSaturationEffect.d.ts","sourceRoot":"","sources":["../src/wgpuHueSaturationEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAKtH,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAChC,MAAM,EAAE,QAAQ,CAAC,mBAAmB,CAAC,GACpC,IAAI,CAUN;AAED,eAAO,MAAM,oCAAoC,EAAE,sBAElD,CAAC"}
@@ -1,75 +0,0 @@
1
- import { drawWgpuFilterPass } from '@flighthq/filters-wgpu';
2
- import { getWgpuEffectPipeline } from './wgpuEffectProgramCache';
3
- // Hue/saturation/lightness: convert to HSL, adjust, convert back.
4
- export function applyHueSaturationEffectToWgpu(state, source, dest, effect) {
5
- const hue = (effect.hue ?? 0) / 360;
6
- const saturation = effect.saturation ?? 1;
7
- const lightness = effect.lightness ?? 0;
8
- const pipeline = getWgpuEffectPipeline(state, 'colorGrade.hueSaturation', HUE_SATURATION_FRAGMENT_WGSL, 'replace');
9
- drawWgpuFilterPass(state, source, dest, pipeline, (f32) => {
10
- f32[0] = hue;
11
- f32[1] = saturation;
12
- f32[2] = lightness;
13
- });
14
- }
15
- export const defaultWgpuHueSaturationEffectRunner = (ctx, effect) => {
16
- applyHueSaturationEffectToWgpu(ctx.state, ctx.source, ctx.dest, effect);
17
- };
18
- // Slot layout: [0]=hue (turns), [1]=saturation, [2]=lightness.
19
- const HUE_SATURATION_FRAGMENT_WGSL = /* wgsl */ `
20
- struct Uniforms { u_hue : f32, u_saturation : f32, u_lightness : f32, _pad0 : f32, }
21
- @group(0) @binding(0) var<uniform> uni : Uniforms;
22
- @group(1) @binding(0) var tex : texture_2d<f32>;
23
- @group(1) @binding(1) var smp : sampler;
24
-
25
- fn rgb2hsl(c : vec3f) -> vec3f {
26
- let mx = max(c.r, max(c.g, c.b));
27
- let mn = min(c.r, min(c.g, c.b));
28
- let l = (mx + mn) * 0.5;
29
- var h = 0.0;
30
- var s = 0.0;
31
- let d = mx - mn;
32
- if (d > 0.0001) {
33
- s = select(d / (2.0 - mx - mn), d / (mx + mn), l < 0.5);
34
- if (mx == c.r) {
35
- h = (c.g - c.b) / d + select(0.0, 6.0, c.g < c.b);
36
- } else if (mx == c.g) {
37
- h = (c.b - c.r) / d + 2.0;
38
- } else {
39
- h = (c.r - c.g) / d + 4.0;
40
- }
41
- h /= 6.0;
42
- }
43
- return vec3f(h, s, l);
44
- }
45
-
46
- fn hue2rgb(p : f32, q : f32, t_in : f32) -> f32 {
47
- var t = t_in;
48
- if (t < 0.0) { t += 1.0; }
49
- if (t > 1.0) { t -= 1.0; }
50
- if (t < 1.0 / 6.0) { return p + (q - p) * 6.0 * t; }
51
- if (t < 1.0 / 2.0) { return q; }
52
- if (t < 2.0 / 3.0) { return p + (q - p) * (2.0 / 3.0 - t) * 6.0; }
53
- return p;
54
- }
55
-
56
- fn hsl2rgb(hsl : vec3f) -> vec3f {
57
- let h = hsl.x;
58
- let s = hsl.y;
59
- let l = hsl.z;
60
- if (s <= 0.0) { return vec3f(l); }
61
- let q = select(l + s - l * s, l * (1.0 + s), l < 0.5);
62
- let p = 2.0 * l - q;
63
- return vec3f(hue2rgb(p, q, h + 1.0 / 3.0), hue2rgb(p, q, h), hue2rgb(p, q, h - 1.0 / 3.0));
64
- }
65
-
66
- @fragment
67
- fn fs_main(@location(0) uv : vec2f) -> @location(0) vec4f {
68
- let c = textureSampleLevel(tex, smp, uv, 0.0);
69
- var hsl = rgb2hsl(c.rgb);
70
- hsl.x = fract(hsl.x + uni.u_hue);
71
- hsl.y = clamp(hsl.y * uni.u_saturation, 0.0, 1.0);
72
- hsl.z = clamp(hsl.z + uni.u_lightness, 0.0, 1.0);
73
- return vec4f(hsl2rgb(hsl), c.a);
74
- }`;
75
- //# sourceMappingURL=wgpuHueSaturationEffect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wgpuHueSaturationEffect.js","sourceRoot":"","sources":["../src/wgpuHueSaturationEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAG5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,kEAAkE;AAClE,MAAM,UAAU,8BAA8B,CAC5C,KAAsB,EACtB,MAAkC,EAClC,IAAgC,EAChC,MAAqC;IAErC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;IACpC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,SAAS,CAAC,CAAC;IACnH,kBAAkB,CAAC,KAAK,EAAE,MAA0B,EAAE,IAAwB,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;QAChG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QACb,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;QACpB,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IACrB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,oCAAoC,GAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IAC1F,8BAA8B,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAA6B,CAAC,CAAC;AACjG,CAAC,CAAC;AAEF,+DAA+D;AAC/D,MAAM,4BAA4B,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuD9C,CAAC"}
@@ -1,4 +0,0 @@
1
- import type { InvertEffect, WgpuRenderEffectRunner, WgpuRenderState, WgpuRenderTarget } from '@flighthq/types';
2
- export declare function applyInvertEffectToWgpu(state: WgpuRenderState, source: Readonly<WgpuRenderTarget>, dest: Readonly<WgpuRenderTarget>, effect: Readonly<InvertEffect>): void;
3
- export declare const defaultWgpuInvertEffectRunner: WgpuRenderEffectRunner;
4
- //# sourceMappingURL=wgpuInvertEffect.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wgpuInvertEffect.d.ts","sourceRoot":"","sources":["../src/wgpuInvertEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAK/G,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAChC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,GAC7B,IAAI,CAMN;AAED,eAAO,MAAM,6BAA6B,EAAE,sBAE3C,CAAC"}
@@ -1,26 +0,0 @@
1
- import { drawWgpuFilterPass } from '@flighthq/filters-wgpu';
2
- import { getWgpuEffectPipeline } from './wgpuEffectProgramCache';
3
- // Invert: mix toward 1 - rgb by intensity.
4
- export function applyInvertEffectToWgpu(state, source, dest, effect) {
5
- const intensity = effect.intensity ?? 1;
6
- const pipeline = getWgpuEffectPipeline(state, 'colorGrade.invert', INVERT_FRAGMENT_WGSL, 'replace');
7
- drawWgpuFilterPass(state, source, dest, pipeline, (f32) => {
8
- f32[0] = intensity;
9
- });
10
- }
11
- export const defaultWgpuInvertEffectRunner = (ctx, effect) => {
12
- applyInvertEffectToWgpu(ctx.state, ctx.source, ctx.dest, effect);
13
- };
14
- // Slot layout: [0]=intensity.
15
- const INVERT_FRAGMENT_WGSL = /* wgsl */ `
16
- struct Uniforms { u_intensity : f32, _pad0 : f32, _pad1 : f32, _pad2 : f32, }
17
- @group(0) @binding(0) var<uniform> uni : Uniforms;
18
- @group(1) @binding(0) var tex : texture_2d<f32>;
19
- @group(1) @binding(1) var smp : sampler;
20
-
21
- @fragment
22
- fn fs_main(@location(0) uv : vec2f) -> @location(0) vec4f {
23
- let c = textureSampleLevel(tex, smp, uv, 0.0);
24
- return vec4f(mix(c.rgb, vec3f(1.0) - c.rgb, uni.u_intensity), c.a);
25
- }`;
26
- //# sourceMappingURL=wgpuInvertEffect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wgpuInvertEffect.js","sourceRoot":"","sources":["../src/wgpuInvertEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAG5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,2CAA2C;AAC3C,MAAM,UAAU,uBAAuB,CACrC,KAAsB,EACtB,MAAkC,EAClC,IAAgC,EAChC,MAA8B;IAE9B,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,SAAS,CAAC,CAAC;IACpG,kBAAkB,CAAC,KAAK,EAAE,MAA0B,EAAE,IAAwB,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;QAChG,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IACrB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,6BAA6B,GAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACnF,uBAAuB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAsB,CAAC,CAAC;AACnF,CAAC,CAAC;AAEF,8BAA8B;AAC9B,MAAM,oBAAoB,GAAG,UAAU,CAAC;;;;;;;;;;EAUtC,CAAC"}
@@ -1,4 +0,0 @@
1
- import type { LiftGammaGainEffect, WgpuRenderEffectRunner, WgpuRenderState, WgpuRenderTarget } from '@flighthq/types';
2
- export declare function applyLiftGammaGainEffectToWgpu(state: WgpuRenderState, source: Readonly<WgpuRenderTarget>, dest: Readonly<WgpuRenderTarget>, effect: Readonly<LiftGammaGainEffect>): void;
3
- export declare const defaultWgpuLiftGammaGainEffectRunner: WgpuRenderEffectRunner;
4
- //# sourceMappingURL=wgpuLiftGammaGainEffect.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wgpuLiftGammaGainEffect.d.ts","sourceRoot":"","sources":["../src/wgpuLiftGammaGainEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAOtH,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAChC,MAAM,EAAE,QAAQ,CAAC,mBAAmB,CAAC,GACpC,IAAI,CAsBN;AAED,eAAO,MAAM,oCAAoC,EAAE,sBAElD,CAAC"}