@flighthq/effects-gl 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 (250) hide show
  1. package/dist/glBloomEffect.d.ts +4 -0
  2. package/dist/glBloomEffect.d.ts.map +1 -0
  3. package/dist/glBloomEffect.js +56 -0
  4. package/dist/glBloomEffect.js.map +1 -0
  5. package/dist/glBokehDepthOfFieldEffect.d.ts +4 -0
  6. package/dist/glBokehDepthOfFieldEffect.d.ts.map +1 -0
  7. package/dist/glBokehDepthOfFieldEffect.js +55 -0
  8. package/dist/glBokehDepthOfFieldEffect.js.map +1 -0
  9. package/dist/glBrightnessContrastEffect.d.ts +4 -0
  10. package/dist/glBrightnessContrastEffect.d.ts.map +1 -0
  11. package/dist/glBrightnessContrastEffect.js +28 -0
  12. package/dist/glBrightnessContrastEffect.js.map +1 -0
  13. package/dist/glCameraMotionBlurEffect.d.ts +4 -0
  14. package/dist/glCameraMotionBlurEffect.d.ts.map +1 -0
  15. package/dist/glCameraMotionBlurEffect.js +41 -0
  16. package/dist/glCameraMotionBlurEffect.js.map +1 -0
  17. package/dist/glChannelMixerEffect.d.ts +4 -0
  18. package/dist/glChannelMixerEffect.d.ts.map +1 -0
  19. package/dist/glChannelMixerEffect.js +30 -0
  20. package/dist/glChannelMixerEffect.js.map +1 -0
  21. package/dist/glChromaticAberrationEffect.d.ts +4 -0
  22. package/dist/glChromaticAberrationEffect.d.ts.map +1 -0
  23. package/dist/glChromaticAberrationEffect.js +36 -0
  24. package/dist/glChromaticAberrationEffect.js.map +1 -0
  25. package/dist/glColorGradeEffect.d.ts +4 -0
  26. package/dist/glColorGradeEffect.d.ts.map +1 -0
  27. package/dist/glColorGradeEffect.js +46 -0
  28. package/dist/glColorGradeEffect.js.map +1 -0
  29. package/dist/glCrtEffect.d.ts +4 -0
  30. package/dist/glCrtEffect.d.ts.map +1 -0
  31. package/dist/glCrtEffect.js +55 -0
  32. package/dist/glCrtEffect.js.map +1 -0
  33. package/dist/glCustomShaderEffect.d.ts +6 -0
  34. package/dist/glCustomShaderEffect.d.ts.map +1 -0
  35. package/dist/glCustomShaderEffect.js +87 -0
  36. package/dist/glCustomShaderEffect.js.map +1 -0
  37. package/dist/glDirectionalBlurEffect.d.ts +4 -0
  38. package/dist/glDirectionalBlurEffect.d.ts.map +1 -0
  39. package/dist/glDirectionalBlurEffect.js +44 -0
  40. package/dist/glDirectionalBlurEffect.js.map +1 -0
  41. package/dist/glDisplacementEffect.d.ts +4 -0
  42. package/dist/glDisplacementEffect.d.ts.map +1 -0
  43. package/dist/glDisplacementEffect.js +37 -0
  44. package/dist/glDisplacementEffect.js.map +1 -0
  45. package/dist/glDitherEffect.d.ts +4 -0
  46. package/dist/glDitherEffect.d.ts.map +1 -0
  47. package/dist/glDitherEffect.js +37 -0
  48. package/dist/glDitherEffect.js.map +1 -0
  49. package/dist/glEffectProgramCache.d.ts +4 -0
  50. package/dist/glEffectProgramCache.d.ts.map +1 -0
  51. package/dist/glEffectProgramCache.js +42 -0
  52. package/dist/glEffectProgramCache.js.map +1 -0
  53. package/dist/glExposureEffect.d.ts +4 -0
  54. package/dist/glExposureEffect.d.ts.map +1 -0
  55. package/dist/glExposureEffect.js +24 -0
  56. package/dist/glExposureEffect.js.map +1 -0
  57. package/dist/glFilmGrainEffect.d.ts +4 -0
  58. package/dist/glFilmGrainEffect.d.ts.map +1 -0
  59. package/dist/glFilmGrainEffect.js +36 -0
  60. package/dist/glFilmGrainEffect.js.map +1 -0
  61. package/dist/glFxaaEffect.d.ts +4 -0
  62. package/dist/glFxaaEffect.d.ts.map +1 -0
  63. package/dist/glFxaaEffect.js +61 -0
  64. package/dist/glFxaaEffect.js.map +1 -0
  65. package/dist/glGlitchEffect.d.ts +4 -0
  66. package/dist/glGlitchEffect.d.ts.map +1 -0
  67. package/dist/glGlitchEffect.js +50 -0
  68. package/dist/glGlitchEffect.js.map +1 -0
  69. package/dist/glGodRaysEffect.d.ts +4 -0
  70. package/dist/glGodRaysEffect.d.ts.map +1 -0
  71. package/dist/glGodRaysEffect.js +59 -0
  72. package/dist/glGodRaysEffect.js.map +1 -0
  73. package/dist/glGrayscaleEffect.d.ts +4 -0
  74. package/dist/glGrayscaleEffect.d.ts.map +1 -0
  75. package/dist/glGrayscaleEffect.js +25 -0
  76. package/dist/glGrayscaleEffect.js.map +1 -0
  77. package/dist/glHalftoneEffect.d.ts +4 -0
  78. package/dist/glHalftoneEffect.d.ts.map +1 -0
  79. package/dist/glHalftoneEffect.js +38 -0
  80. package/dist/glHalftoneEffect.js.map +1 -0
  81. package/dist/glHueSaturationEffect.d.ts +4 -0
  82. package/dist/glHueSaturationEffect.d.ts.map +1 -0
  83. package/dist/glHueSaturationEffect.js +67 -0
  84. package/dist/glHueSaturationEffect.js.map +1 -0
  85. package/dist/glInvertEffect.d.ts +4 -0
  86. package/dist/glInvertEffect.d.ts.map +1 -0
  87. package/dist/glInvertEffect.js +24 -0
  88. package/dist/glInvertEffect.js.map +1 -0
  89. package/dist/glKuwaharaEffect.d.ts +4 -0
  90. package/dist/glKuwaharaEffect.d.ts.map +1 -0
  91. package/dist/glKuwaharaEffect.js +61 -0
  92. package/dist/glKuwaharaEffect.js.map +1 -0
  93. package/dist/glLensDirtEffect.d.ts +4 -0
  94. package/dist/glLensDirtEffect.d.ts.map +1 -0
  95. package/dist/glLensDirtEffect.js +45 -0
  96. package/dist/glLensDirtEffect.js.map +1 -0
  97. package/dist/glLensDistortionEffect.d.ts +4 -0
  98. package/dist/glLensDistortionEffect.d.ts.map +1 -0
  99. package/dist/glLensDistortionEffect.js +34 -0
  100. package/dist/glLensDistortionEffect.js.map +1 -0
  101. package/dist/glLensFlareEffect.d.ts +4 -0
  102. package/dist/glLensFlareEffect.d.ts.map +1 -0
  103. package/dist/glLensFlareEffect.js +56 -0
  104. package/dist/glLensFlareEffect.js.map +1 -0
  105. package/dist/glLiftGammaGainEffect.d.ts +4 -0
  106. package/dist/glLiftGammaGainEffect.d.ts.map +1 -0
  107. package/dist/glLiftGammaGainEffect.js +44 -0
  108. package/dist/glLiftGammaGainEffect.js.map +1 -0
  109. package/dist/glLookupTableGradeEffect.d.ts +4 -0
  110. package/dist/glLookupTableGradeEffect.d.ts.map +1 -0
  111. package/dist/glLookupTableGradeEffect.js +28 -0
  112. package/dist/glLookupTableGradeEffect.js.map +1 -0
  113. package/dist/glMotionBlurEffect.d.ts +4 -0
  114. package/dist/glMotionBlurEffect.d.ts.map +1 -0
  115. package/dist/glMotionBlurEffect.js +61 -0
  116. package/dist/glMotionBlurEffect.js.map +1 -0
  117. package/dist/glOutlineEffect.d.ts +4 -0
  118. package/dist/glOutlineEffect.d.ts.map +1 -0
  119. package/dist/glOutlineEffect.js +49 -0
  120. package/dist/glOutlineEffect.js.map +1 -0
  121. package/dist/glPixelateEffect.d.ts +4 -0
  122. package/dist/glPixelateEffect.d.ts.map +1 -0
  123. package/dist/glPixelateEffect.js +27 -0
  124. package/dist/glPixelateEffect.js.map +1 -0
  125. package/dist/glPosterizeEffect.d.ts +4 -0
  126. package/dist/glPosterizeEffect.d.ts.map +1 -0
  127. package/dist/glPosterizeEffect.js +25 -0
  128. package/dist/glPosterizeEffect.js.map +1 -0
  129. package/dist/glRadialBlurEffect.d.ts +4 -0
  130. package/dist/glRadialBlurEffect.d.ts.map +1 -0
  131. package/dist/glRadialBlurEffect.js +43 -0
  132. package/dist/glRadialBlurEffect.js.map +1 -0
  133. package/dist/glRenderEffectPipeline.d.ts +7 -0
  134. package/dist/glRenderEffectPipeline.d.ts.map +1 -0
  135. package/dist/glRenderEffectPipeline.js +86 -0
  136. package/dist/glRenderEffectPipeline.js.map +1 -0
  137. package/dist/glRenderEffectRegistrar.d.ts +13 -0
  138. package/dist/glRenderEffectRegistrar.d.ts.map +1 -0
  139. package/dist/glRenderEffectRegistrar.js +222 -0
  140. package/dist/glRenderEffectRegistrar.js.map +1 -0
  141. package/dist/glRenderEffectRegistry.d.ts +5 -0
  142. package/dist/glRenderEffectRegistry.d.ts.map +1 -0
  143. package/dist/glRenderEffectRegistry.js +23 -0
  144. package/dist/glRenderEffectRegistry.js.map +1 -0
  145. package/dist/glScanlinesEffect.d.ts +4 -0
  146. package/dist/glScanlinesEffect.d.ts.map +1 -0
  147. package/dist/glScanlinesEffect.js +28 -0
  148. package/dist/glScanlinesEffect.js.map +1 -0
  149. package/dist/glScreenSpaceFogEffect.d.ts +4 -0
  150. package/dist/glScreenSpaceFogEffect.d.ts.map +1 -0
  151. package/dist/glScreenSpaceFogEffect.js +55 -0
  152. package/dist/glScreenSpaceFogEffect.js.map +1 -0
  153. package/dist/glSepiaEffect.d.ts +4 -0
  154. package/dist/glSepiaEffect.d.ts.map +1 -0
  155. package/dist/glSepiaEffect.js +29 -0
  156. package/dist/glSepiaEffect.js.map +1 -0
  157. package/dist/glSharpenEffect.d.ts +4 -0
  158. package/dist/glSharpenEffect.d.ts.map +1 -0
  159. package/dist/glSharpenEffect.js +33 -0
  160. package/dist/glSharpenEffect.js.map +1 -0
  161. package/dist/glSketchEffect.d.ts +4 -0
  162. package/dist/glSketchEffect.d.ts.map +1 -0
  163. package/dist/glSketchEffect.js +43 -0
  164. package/dist/glSketchEffect.js.map +1 -0
  165. package/dist/glSmaaEffect.d.ts +4 -0
  166. package/dist/glSmaaEffect.d.ts.map +1 -0
  167. package/dist/glSmaaEffect.js +48 -0
  168. package/dist/glSmaaEffect.js.map +1 -0
  169. package/dist/glSsaoEffect.d.ts +4 -0
  170. package/dist/glSsaoEffect.d.ts.map +1 -0
  171. package/dist/glSsaoEffect.js +45 -0
  172. package/dist/glSsaoEffect.js.map +1 -0
  173. package/dist/glSsrEffect.d.ts +4 -0
  174. package/dist/glSsrEffect.d.ts.map +1 -0
  175. package/dist/glSsrEffect.js +24 -0
  176. package/dist/glSsrEffect.js.map +1 -0
  177. package/dist/glTaaEffect.d.ts +4 -0
  178. package/dist/glTaaEffect.d.ts.map +1 -0
  179. package/dist/glTaaEffect.js +22 -0
  180. package/dist/glTaaEffect.js.map +1 -0
  181. package/dist/glTiltShiftEffect.d.ts +4 -0
  182. package/dist/glTiltShiftEffect.d.ts.map +1 -0
  183. package/dist/glTiltShiftEffect.js +45 -0
  184. package/dist/glTiltShiftEffect.js.map +1 -0
  185. package/dist/glToneMapEffect.d.ts +4 -0
  186. package/dist/glToneMapEffect.d.ts.map +1 -0
  187. package/dist/glToneMapEffect.js +51 -0
  188. package/dist/glToneMapEffect.js.map +1 -0
  189. package/dist/glVignetteEffect.d.ts +4 -0
  190. package/dist/glVignetteEffect.d.ts.map +1 -0
  191. package/dist/glVignetteEffect.js +42 -0
  192. package/dist/glVignetteEffect.js.map +1 -0
  193. package/dist/glWhiteBalanceEffect.d.ts +4 -0
  194. package/dist/glWhiteBalanceEffect.d.ts.map +1 -0
  195. package/dist/glWhiteBalanceEffect.js +31 -0
  196. package/dist/glWhiteBalanceEffect.js.map +1 -0
  197. package/dist/index.d.ts +50 -0
  198. package/dist/index.d.ts.map +1 -0
  199. package/dist/index.js +50 -0
  200. package/dist/index.js.map +1 -0
  201. package/package.json +41 -0
  202. package/src/glBloomEffect.test.ts +13 -0
  203. package/src/glBokehDepthOfFieldEffect.test.ts +13 -0
  204. package/src/glBrightnessContrastEffect.test.ts +16 -0
  205. package/src/glCameraMotionBlurEffect.test.ts +13 -0
  206. package/src/glChannelMixerEffect.test.ts +13 -0
  207. package/src/glChromaticAberrationEffect.test.ts +16 -0
  208. package/src/glColorGradeEffect.test.ts +13 -0
  209. package/src/glCrtEffect.test.ts +13 -0
  210. package/src/glCustomShaderEffect.test.ts +68 -0
  211. package/src/glDirectionalBlurEffect.test.ts +13 -0
  212. package/src/glDisplacementEffect.test.ts +13 -0
  213. package/src/glDitherEffect.test.ts +13 -0
  214. package/src/glEffectProgramCache.test.ts +13 -0
  215. package/src/glExposureEffect.test.ts +13 -0
  216. package/src/glFilmGrainEffect.test.ts +13 -0
  217. package/src/glFxaaEffect.test.ts +13 -0
  218. package/src/glGlitchEffect.test.ts +13 -0
  219. package/src/glGodRaysEffect.test.ts +13 -0
  220. package/src/glGrayscaleEffect.test.ts +13 -0
  221. package/src/glHalftoneEffect.test.ts +13 -0
  222. package/src/glHueSaturationEffect.test.ts +13 -0
  223. package/src/glInvertEffect.test.ts +13 -0
  224. package/src/glKuwaharaEffect.test.ts +13 -0
  225. package/src/glLensDirtEffect.test.ts +13 -0
  226. package/src/glLensDistortionEffect.test.ts +13 -0
  227. package/src/glLensFlareEffect.test.ts +13 -0
  228. package/src/glLiftGammaGainEffect.test.ts +13 -0
  229. package/src/glLookupTableGradeEffect.test.ts +13 -0
  230. package/src/glMotionBlurEffect.test.ts +13 -0
  231. package/src/glOutlineEffect.test.ts +13 -0
  232. package/src/glPixelateEffect.test.ts +13 -0
  233. package/src/glPosterizeEffect.test.ts +13 -0
  234. package/src/glRadialBlurEffect.test.ts +13 -0
  235. package/src/glRenderEffectPipeline.test.ts +37 -0
  236. package/src/glRenderEffectRegistrar.test.ts +187 -0
  237. package/src/glRenderEffectRegistry.test.ts +52 -0
  238. package/src/glScanlinesEffect.test.ts +13 -0
  239. package/src/glScreenSpaceFogEffect.test.ts +13 -0
  240. package/src/glSepiaEffect.test.ts +13 -0
  241. package/src/glSharpenEffect.test.ts +13 -0
  242. package/src/glSketchEffect.test.ts +13 -0
  243. package/src/glSmaaEffect.test.ts +13 -0
  244. package/src/glSsaoEffect.test.ts +13 -0
  245. package/src/glSsrEffect.test.ts +13 -0
  246. package/src/glTaaEffect.test.ts +13 -0
  247. package/src/glTiltShiftEffect.test.ts +13 -0
  248. package/src/glToneMapEffect.test.ts +13 -0
  249. package/src/glVignetteEffect.test.ts +13 -0
  250. package/src/glWhiteBalanceEffect.test.ts +13 -0
@@ -0,0 +1,49 @@
1
+ import { drawGlFullscreenPass } from '@flighthq/render-gl';
2
+ import { getGlEffectProgram } from './glEffectProgramCache';
3
+ // Outline: Sobel edge detection on luminance; where the gradient magnitude exceeds `threshold`, mix
4
+ // the pixel toward the outline color by `thickness`. Color arrives packed RGBA, unpacked to 0..1 here.
5
+ export function applyOutlineEffectToGl(state, source, dest, effect) {
6
+ const threshold = effect.threshold ?? 0.2;
7
+ const thickness = effect.thickness ?? 1;
8
+ const color = effect.color ?? 0x000000ff;
9
+ const program = getGlEffectProgram(state, 'stylization.outline', OUTLINE_FRAGMENT_SRC);
10
+ drawGlFullscreenPass(state, program, [source.texture], dest, (gl, p) => {
11
+ gl.uniform1f(gl.getUniformLocation(p.program, 'u_threshold'), threshold);
12
+ gl.uniform1f(gl.getUniformLocation(p.program, 'u_thickness'), thickness);
13
+ gl.uniform4f(gl.getUniformLocation(p.program, 'u_color'), ((color >>> 24) & 0xff) / 255, ((color >>> 16) & 0xff) / 255, ((color >>> 8) & 0xff) / 255, (color & 0xff) / 255);
14
+ gl.uniform2f(gl.getUniformLocation(p.program, 'u_resolution'), source.width, source.height);
15
+ });
16
+ }
17
+ export const defaultGlOutlineEffectRunner = (ctx, effect) => {
18
+ applyOutlineEffectToGl(ctx.state, ctx.source, ctx.dest, effect);
19
+ };
20
+ const OUTLINE_FRAGMENT_SRC = `#version 300 es
21
+ precision highp float;
22
+ in vec2 v_texCoord;
23
+ uniform sampler2D u_texture0;
24
+ uniform float u_threshold;
25
+ uniform float u_thickness;
26
+ uniform vec4 u_color;
27
+ uniform vec2 u_resolution;
28
+ out vec4 o_color;
29
+ float lum(vec2 uv) {
30
+ return dot(texture(u_texture0, uv).rgb, vec3(0.2126, 0.7152, 0.0722));
31
+ }
32
+ void main() {
33
+ vec2 texel = u_thickness / u_resolution;
34
+ float tl = lum(v_texCoord + texel * vec2(-1.0, -1.0));
35
+ float t = lum(v_texCoord + texel * vec2(0.0, -1.0));
36
+ float tr = lum(v_texCoord + texel * vec2(1.0, -1.0));
37
+ float l = lum(v_texCoord + texel * vec2(-1.0, 0.0));
38
+ float rr = lum(v_texCoord + texel * vec2(1.0, 0.0));
39
+ float bl = lum(v_texCoord + texel * vec2(-1.0, 1.0));
40
+ float b = lum(v_texCoord + texel * vec2(0.0, 1.0));
41
+ float br = lum(v_texCoord + texel * vec2(1.0, 1.0));
42
+ float gx = -tl - 2.0 * l - bl + tr + 2.0 * rr + br;
43
+ float gy = -tl - 2.0 * t - tr + bl + 2.0 * b + br;
44
+ float edge = sqrt(gx * gx + gy * gy);
45
+ vec4 c = texture(u_texture0, v_texCoord);
46
+ float k = step(u_threshold, edge);
47
+ o_color = mix(c, u_color, k * u_color.a);
48
+ }`;
49
+ //# sourceMappingURL=glOutlineEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glOutlineEffect.js","sourceRoot":"","sources":["../src/glOutlineEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,oGAAoG;AACpG,uGAAuG;AACvG,MAAM,UAAU,sBAAsB,CACpC,KAAoB,EACpB,MAAgC,EAChC,IAA8B,EAC9B,MAA+B;IAE/B,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,GAAG,CAAC;IAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,UAAU,CAAC;IACzC,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,qBAAqB,EAAE,oBAAoB,CAAC,CAAC;IACvF,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;QACrE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,SAAS,CAAC,CAAC;QACzE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,SAAS,CAAC,CAAC;QACzE,EAAE,CAAC,SAAS,CACV,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,EAC3C,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,EAC7B,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,EAC7B,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,EAC5B,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG,CACrB,CAAC;QACF,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,4BAA4B,GAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IAChF,sBAAsB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAuB,CAAC,CAAC;AACnF,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4B3B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { GlRenderEffectRunner, GlRenderState, GlRenderTarget, PixelateEffect } from '@flighthq/types';
2
+ export declare function applyPixelateEffectToGl(state: GlRenderState, source: Readonly<GlRenderTarget>, dest: Readonly<GlRenderTarget>, effect: Readonly<PixelateEffect>): void;
3
+ export declare const defaultGlPixelateEffectRunner: GlRenderEffectRunner;
4
+ //# sourceMappingURL=glPixelateEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glPixelateEffect.d.ts","sourceRoot":"","sources":["../src/glPixelateEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAK3G,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,GAC/B,IAAI,CAON;AAED,eAAO,MAAM,6BAA6B,EAAE,oBAE3C,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { drawGlFullscreenPass } from '@flighthq/render-gl';
2
+ import { getGlEffectProgram } from './glEffectProgramCache';
3
+ // Pixelate: snap uv to the center of `size`-pixel blocks before sampling, producing hard mosaic blocks.
4
+ export function applyPixelateEffectToGl(state, source, dest, effect) {
5
+ const size = effect.size ?? 8;
6
+ const program = getGlEffectProgram(state, 'stylization.pixelate', PIXELATE_FRAGMENT_SRC);
7
+ drawGlFullscreenPass(state, program, [source.texture], dest, (gl, p) => {
8
+ gl.uniform1f(gl.getUniformLocation(p.program, 'u_size'), Math.max(1, size));
9
+ gl.uniform2f(gl.getUniformLocation(p.program, 'u_resolution'), source.width, source.height);
10
+ });
11
+ }
12
+ export const defaultGlPixelateEffectRunner = (ctx, effect) => {
13
+ applyPixelateEffectToGl(ctx.state, ctx.source, ctx.dest, effect);
14
+ };
15
+ const PIXELATE_FRAGMENT_SRC = `#version 300 es
16
+ precision highp float;
17
+ in vec2 v_texCoord;
18
+ uniform sampler2D u_texture0;
19
+ uniform float u_size;
20
+ uniform vec2 u_resolution;
21
+ out vec4 o_color;
22
+ void main() {
23
+ vec2 blocks = u_resolution / u_size;
24
+ vec2 uv = (floor(v_texCoord * blocks) + 0.5) / blocks;
25
+ o_color = texture(u_texture0, uv);
26
+ }`;
27
+ //# sourceMappingURL=glPixelateEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glPixelateEffect.js","sourceRoot":"","sources":["../src/glPixelateEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,wGAAwG;AACxG,MAAM,UAAU,uBAAuB,CACrC,KAAoB,EACpB,MAAgC,EAChC,IAA8B,EAC9B,MAAgC;IAEhC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,sBAAsB,EAAE,qBAAqB,CAAC,CAAC;IACzF,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;QACrE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAC5E,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,6BAA6B,GAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACjF,uBAAuB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAwB,CAAC,CAAC;AACrF,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG;;;;;;;;;;;EAW5B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { GlRenderEffectRunner, GlRenderState, GlRenderTarget, PosterizeEffect } from '@flighthq/types';
2
+ export declare function applyPosterizeEffectToGl(state: GlRenderState, source: Readonly<GlRenderTarget>, dest: Readonly<GlRenderTarget>, effect: Readonly<PosterizeEffect>): void;
3
+ export declare const defaultGlPosterizeEffectRunner: GlRenderEffectRunner;
4
+ //# sourceMappingURL=glPosterizeEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glPosterizeEffect.d.ts","sourceRoot":"","sources":["../src/glPosterizeEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAK5G,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,GAChC,IAAI,CAMN;AAED,eAAO,MAAM,8BAA8B,EAAE,oBAE5C,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { drawGlFullscreenPass } from '@flighthq/render-gl';
2
+ import { getGlEffectProgram } from './glEffectProgramCache';
3
+ // Posterize: floor each channel to `levels` discrete steps.
4
+ export function applyPosterizeEffectToGl(state, source, dest, effect) {
5
+ const levels = Math.max(2, effect.levels ?? 8);
6
+ const program = getGlEffectProgram(state, 'colorGrade.posterize', POSTERIZE_FRAGMENT_SRC);
7
+ drawGlFullscreenPass(state, program, [source.texture], dest, (gl, p) => {
8
+ gl.uniform1f(gl.getUniformLocation(p.program, 'u_levels'), levels);
9
+ });
10
+ }
11
+ export const defaultGlPosterizeEffectRunner = (ctx, effect) => {
12
+ applyPosterizeEffectToGl(ctx.state, ctx.source, ctx.dest, effect);
13
+ };
14
+ const POSTERIZE_FRAGMENT_SRC = `#version 300 es
15
+ precision highp float;
16
+ in vec2 v_texCoord;
17
+ uniform sampler2D u_texture0;
18
+ uniform float u_levels;
19
+ out vec4 o_color;
20
+ void main() {
21
+ vec4 c = texture(u_texture0, v_texCoord);
22
+ vec3 rgb = floor(c.rgb * u_levels) / (u_levels - 1.0);
23
+ o_color = vec4(clamp(rgb, 0.0, 1.0), c.a);
24
+ }`;
25
+ //# sourceMappingURL=glPosterizeEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glPosterizeEffect.js","sourceRoot":"","sources":["../src/glPosterizeEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,4DAA4D;AAC5D,MAAM,UAAU,wBAAwB,CACtC,KAAoB,EACpB,MAAgC,EAChC,IAA8B,EAC9B,MAAiC;IAEjC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,sBAAsB,EAAE,sBAAsB,CAAC,CAAC;IAC1F,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;QACrE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,8BAA8B,GAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IAClF,wBAAwB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAyB,CAAC,CAAC;AACvF,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG;;;;;;;;;;EAU7B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { GlRenderEffectRunner, GlRenderState, GlRenderTarget, RadialBlurEffect } from '@flighthq/types';
2
+ export declare function applyRadialBlurEffectToGl(state: GlRenderState, source: Readonly<GlRenderTarget>, dest: Readonly<GlRenderTarget>, effect: Readonly<RadialBlurEffect>): void;
3
+ export declare const defaultGlRadialBlurEffectRunner: GlRenderEffectRunner;
4
+ //# sourceMappingURL=glRadialBlurEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glRadialBlurEffect.d.ts","sourceRoot":"","sources":["../src/glRadialBlurEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAM7G,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GACjC,IAAI,CAWN;AAED,eAAO,MAAM,+BAA+B,EAAE,oBAE7C,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { drawGlFullscreenPass } from '@flighthq/render-gl';
2
+ import { getGlEffectProgram } from './glEffectProgramCache';
3
+ // Radial blur: accumulate samples stepped from the current uv toward (centerX, centerY) scaled by
4
+ // `strength`, normalized by the sample count. Single-pass reference recipe.
5
+ export function applyRadialBlurEffectToGl(state, source, dest, effect) {
6
+ const centerX = effect.centerX ?? 0.5;
7
+ const centerY = effect.centerY ?? 0.5;
8
+ const strength = effect.strength ?? 0.2;
9
+ const samples = effect.samples ?? 16;
10
+ const program = getGlEffectProgram(state, 'radialBlur', RADIAL_BLUR_FRAGMENT_SRC);
11
+ drawGlFullscreenPass(state, program, [source.texture], dest, (gl, p) => {
12
+ gl.uniform2f(gl.getUniformLocation(p.program, 'u_center'), centerX, centerY);
13
+ gl.uniform1f(gl.getUniformLocation(p.program, 'u_strength'), strength);
14
+ gl.uniform1f(gl.getUniformLocation(p.program, 'u_samples'), samples);
15
+ });
16
+ }
17
+ export const defaultGlRadialBlurEffectRunner = (ctx, effect) => {
18
+ applyRadialBlurEffectToGl(ctx.state, ctx.source, ctx.dest, effect);
19
+ };
20
+ const RADIAL_BLUR_FRAGMENT_SRC = `#version 300 es
21
+ precision highp float;
22
+ in vec2 v_texCoord;
23
+ uniform sampler2D u_texture0;
24
+ uniform vec2 u_center;
25
+ uniform float u_strength;
26
+ uniform float u_samples;
27
+ out vec4 o_color;
28
+ const int SAMPLES = 16;
29
+ void main() {
30
+ vec2 toCenter = u_center - v_texCoord;
31
+ float count = min(u_samples, 16.0);
32
+ vec4 sum = vec4(0.0);
33
+ float taken = 0.0;
34
+ for (int i = 0; i < SAMPLES; i++) {
35
+ if (float(i) >= count) break;
36
+ float t = count > 1.0 ? float(i) / (count - 1.0) : 0.0;
37
+ vec2 uv = v_texCoord + toCenter * (t * u_strength);
38
+ sum += texture(u_texture0, uv);
39
+ taken += 1.0;
40
+ }
41
+ o_color = sum / max(taken, 1.0);
42
+ }`;
43
+ //# sourceMappingURL=glRadialBlurEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glRadialBlurEffect.js","sourceRoot":"","sources":["../src/glRadialBlurEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,kGAAkG;AAClG,4EAA4E;AAC5E,MAAM,UAAU,yBAAyB,CACvC,KAAoB,EACpB,MAAgC,EAChC,IAA8B,EAC9B,MAAkC;IAElC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,GAAG,CAAC;IACtC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,GAAG,CAAC;IACtC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,GAAG,CAAC;IACxC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,wBAAwB,CAAC,CAAC;IAClF,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;QACrE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7E,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC;QACvE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,+BAA+B,GAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACnF,yBAAyB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAA0B,CAAC,CAAC;AACzF,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;;;;EAsB/B,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { GlRenderEffectPipeline, GlRenderState, RenderEffect, RenderEffectPipelineOptions } from '@flighthq/types';
2
+ export declare function beginGlRenderEffectPipeline(state: GlRenderState, pipeline: GlRenderEffectPipeline): void;
3
+ export declare function createGlRenderEffectPipeline(_state: GlRenderState, options?: Readonly<RenderEffectPipelineOptions>): GlRenderEffectPipeline;
4
+ export declare function destroyGlRenderEffectPipeline(state: GlRenderState, pipeline: GlRenderEffectPipeline): void;
5
+ export declare function endGlRenderEffectPipeline(state: GlRenderState, pipeline: GlRenderEffectPipeline, effects: ReadonlyArray<RenderEffect>): void;
6
+ export declare function setGlRenderEffectVelocityTexture(pipeline: GlRenderEffectPipeline, texture: WebGLTexture | null): void;
7
+ //# sourceMappingURL=glRenderEffectPipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glRenderEffectPipeline.d.ts","sourceRoot":"","sources":["../src/glRenderEffectPipeline.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,sBAAsB,EACtB,aAAa,EAEb,YAAY,EACZ,2BAA2B,EAC5B,MAAM,iBAAiB,CAAC;AAUzB,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,sBAAsB,GAAG,IAAI,CAWxG;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,aAAa,EACrB,OAAO,GAAE,QAAQ,CAAC,2BAA2B,CAAM,GAClD,sBAAsB,CAExB;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,sBAAsB,GAAG,IAAI,CAM1G;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,sBAAsB,EAChC,OAAO,EAAE,aAAa,CAAC,YAAY,CAAC,GACnC,IAAI,CAsCN;AAID,wBAAgB,gCAAgC,CAAC,QAAQ,EAAE,sBAAsB,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAErH"}
@@ -0,0 +1,86 @@
1
+ import { createMatrix } from '@flighthq/geometry';
2
+ import { acquireGlRenderTarget, beginGlRenderTarget, createGlRenderTarget, createGlRenderTargetPool, destroyGlRenderTarget, destroyGlRenderTargetPool, drawGlFullscreenPass, endGlRenderTarget, releaseGlRenderTarget, resizeGlRenderTarget, resolveGlRenderTarget, } from '@flighthq/render-gl';
3
+ import { getGlEffectProgram } from './glEffectProgramCache';
4
+ import { getGlRenderEffectRunner } from './glRenderEffectRegistry';
5
+ // Opt-in post-process pipeline. The scene renders into the pipeline's (optionally MSAA / HDR) target
6
+ // between begin/end; end resolves MSAA, runs the agnostic effect list through the per-state registry
7
+ // ping-ponging pooled targets, then presents to the canvas. The default render loop imports none of
8
+ // this. The effect list is per-frame data; only the scene target and pool are retained.
9
+ export function beginGlRenderEffectPipeline(state, pipeline) {
10
+ const w = state.canvas.width;
11
+ const h = state.canvas.height;
12
+ const { sampleCount, format, depth } = pipeline.options;
13
+ if (pipeline.sceneTarget === null) {
14
+ pipeline.sceneTarget = createGlRenderTarget(state, { width: w, height: h, sampleCount, format, depth });
15
+ }
16
+ else {
17
+ resizeGlRenderTarget(state, pipeline.sceneTarget, w, h);
18
+ }
19
+ beginGlRenderTarget(state, pipeline.sceneTarget, state.renderTransform2D ?? createMatrix());
20
+ }
21
+ export function createGlRenderEffectPipeline(_state, options = {}) {
22
+ return { options: { ...options }, sceneTarget: null, pool: createGlRenderTargetPool(), velocityTexture: null };
23
+ }
24
+ export function destroyGlRenderEffectPipeline(state, pipeline) {
25
+ if (pipeline.sceneTarget) {
26
+ destroyGlRenderTarget(state, pipeline.sceneTarget);
27
+ pipeline.sceneTarget = null;
28
+ }
29
+ destroyGlRenderTargetPool(state, pipeline.pool);
30
+ }
31
+ export function endGlRenderEffectPipeline(state, pipeline, effects) {
32
+ const scene = pipeline.sceneTarget;
33
+ if (scene === null)
34
+ return;
35
+ endGlRenderTarget(state);
36
+ resolveGlRenderTarget(state, scene);
37
+ const format = pipeline.options.format ?? 'rgba8';
38
+ const descriptor = { width: scene.width, height: scene.height, format };
39
+ let source = scene;
40
+ let scratchA = null;
41
+ let scratchB = null;
42
+ for (const effect of effects) {
43
+ const runner = getGlRenderEffectRunner(state, effect.kind);
44
+ if (runner === null)
45
+ continue;
46
+ if (scratchA === null)
47
+ scratchA = acquireGlRenderTarget(state, pipeline.pool, descriptor);
48
+ if (scratchB === null)
49
+ scratchB = acquireGlRenderTarget(state, pipeline.pool, descriptor);
50
+ const dest = source === scratchA ? scratchB : scratchA;
51
+ // Depth/velocity always come from the original scene target, not the ping-ponged `source`.
52
+ runner({
53
+ state,
54
+ source,
55
+ dest,
56
+ pool: pipeline.pool,
57
+ sceneDepthTexture: scene.depthTexture,
58
+ sceneVelocityTexture: pipeline.velocityTexture,
59
+ }, effect);
60
+ source = dest;
61
+ }
62
+ presentGlRenderEffectResult(state, source);
63
+ if (scratchA !== null)
64
+ releaseGlRenderTarget(pipeline.pool, scratchA);
65
+ if (scratchB !== null)
66
+ releaseGlRenderTarget(pipeline.pool, scratchB);
67
+ }
68
+ // Sets the velocity G-buffer the pipeline feeds to velocity-driven effects this frame. Pass the texture
69
+ // produced by renderGlVelocity (e.g. `velocityTarget.texture`), or null to clear it.
70
+ export function setGlRenderEffectVelocityTexture(pipeline, texture) {
71
+ pipeline.velocityTexture = texture;
72
+ }
73
+ // Blits the final effect result to the canvas (GL→GL, no orientation flip).
74
+ function presentGlRenderEffectResult(state, source) {
75
+ const program = getGlEffectProgram(state, 'effect.present', PRESENT_FRAGMENT_SRC);
76
+ drawGlFullscreenPass(state, program, [source.texture], null, () => { });
77
+ }
78
+ const PRESENT_FRAGMENT_SRC = `#version 300 es
79
+ precision highp float;
80
+ in vec2 v_texCoord;
81
+ uniform sampler2D u_texture0;
82
+ out vec4 o_color;
83
+ void main() {
84
+ o_color = texture(u_texture0, v_texCoord);
85
+ }`;
86
+ //# sourceMappingURL=glRenderEffectPipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glRenderEffectPipeline.js","sourceRoot":"","sources":["../src/glRenderEffectPipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { GlRenderState } from '@flighthq/types';
2
+ export declare function getGlRenderEffectKinds(): ReadonlyArray<string>;
3
+ export declare function registerAntialiasingGlRenderEffects(state: GlRenderState): void;
4
+ export declare function registerBloomGlRenderEffects(state: GlRenderState): void;
5
+ export declare function registerBlurGlRenderEffects(state: GlRenderState): void;
6
+ export declare function registerColorGlRenderEffects(state: GlRenderState): void;
7
+ export declare function registerColorGradeGlRenderEffects(state: GlRenderState): void;
8
+ export declare function registerCustomShaderGlRenderEffect(state: GlRenderState): void;
9
+ export declare function registerDefaultGlRenderEffects(state: GlRenderState): void;
10
+ export declare function registerScreenSpaceGlRenderEffects(state: GlRenderState): void;
11
+ export declare function registerStandardGlRenderEffects(state: GlRenderState): void;
12
+ export declare function registerStylizeGlRenderEffects(state: GlRenderState): void;
13
+ //# sourceMappingURL=glRenderEffectRegistrar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glRenderEffectRegistrar.d.ts","sourceRoot":"","sources":["../src/glRenderEffectRegistrar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAkErD,wBAAgB,sBAAsB,IAAI,aAAa,CAAC,MAAM,CAAC,CAE9D;AAID,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAI9E;AAKD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAQvE;AAKD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAOtE;AAOD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAcvE;AAID,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAE5E;AAOD,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAE7E;AAKD,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAQzE;AAMD,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAM7E;AAID,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAE1E;AAMD,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAWzE"}
@@ -0,0 +1,222 @@
1
+ import { defaultGlBloomEffectRunner } from './glBloomEffect';
2
+ import { defaultGlBokehDepthOfFieldEffectRunner } from './glBokehDepthOfFieldEffect';
3
+ import { defaultGlBrightnessContrastEffectRunner } from './glBrightnessContrastEffect';
4
+ import { defaultGlCameraMotionBlurEffectRunner } from './glCameraMotionBlurEffect';
5
+ import { defaultGlChannelMixerEffectRunner } from './glChannelMixerEffect';
6
+ import { defaultGlChromaticAberrationEffectRunner } from './glChromaticAberrationEffect';
7
+ import { defaultGlColorGradeEffectRunner } from './glColorGradeEffect';
8
+ import { defaultGlCrtEffectRunner } from './glCrtEffect';
9
+ import { defaultGlCustomShaderEffectRunner } from './glCustomShaderEffect';
10
+ import { defaultGlDirectionalBlurEffectRunner } from './glDirectionalBlurEffect';
11
+ import { defaultGlDisplacementEffectRunner } from './glDisplacementEffect';
12
+ import { defaultGlDitherEffectRunner } from './glDitherEffect';
13
+ import { defaultGlExposureEffectRunner } from './glExposureEffect';
14
+ import { defaultGlFilmGrainEffectRunner } from './glFilmGrainEffect';
15
+ import { defaultGlFxaaEffectRunner } from './glFxaaEffect';
16
+ import { defaultGlGlitchEffectRunner } from './glGlitchEffect';
17
+ import { defaultGlGodRaysEffectRunner } from './glGodRaysEffect';
18
+ import { defaultGlGrayscaleEffectRunner } from './glGrayscaleEffect';
19
+ import { defaultGlHalftoneEffectRunner } from './glHalftoneEffect';
20
+ import { defaultGlHueSaturationEffectRunner } from './glHueSaturationEffect';
21
+ import { defaultGlInvertEffectRunner } from './glInvertEffect';
22
+ import { defaultGlKuwaharaEffectRunner } from './glKuwaharaEffect';
23
+ import { defaultGlLensDirtEffectRunner } from './glLensDirtEffect';
24
+ import { defaultGlLensDistortionEffectRunner } from './glLensDistortionEffect';
25
+ import { defaultGlLensFlareEffectRunner } from './glLensFlareEffect';
26
+ import { defaultGlLiftGammaGainEffectRunner } from './glLiftGammaGainEffect';
27
+ import { defaultGlLookupTableGradeEffectRunner } from './glLookupTableGradeEffect';
28
+ import { defaultGlMotionBlurEffectRunner } from './glMotionBlurEffect';
29
+ import { defaultGlOutlineEffectRunner } from './glOutlineEffect';
30
+ import { defaultGlPixelateEffectRunner } from './glPixelateEffect';
31
+ import { defaultGlPosterizeEffectRunner } from './glPosterizeEffect';
32
+ import { defaultGlRadialBlurEffectRunner } from './glRadialBlurEffect';
33
+ import { registerGlRenderEffect } from './glRenderEffectRegistry';
34
+ import { defaultGlScanlinesEffectRunner } from './glScanlinesEffect';
35
+ import { defaultGlScreenSpaceFogEffectRunner } from './glScreenSpaceFogEffect';
36
+ import { defaultGlSepiaEffectRunner } from './glSepiaEffect';
37
+ import { defaultGlSharpenEffectRunner } from './glSharpenEffect';
38
+ import { defaultGlSketchEffectRunner } from './glSketchEffect';
39
+ import { defaultGlSmaaEffectRunner } from './glSmaaEffect';
40
+ import { defaultGlSsaoEffectRunner } from './glSsaoEffect';
41
+ import { defaultGlSsrEffectRunner } from './glSsrEffect';
42
+ import { defaultGlTaaEffectRunner } from './glTaaEffect';
43
+ import { defaultGlTiltShiftEffectRunner } from './glTiltShiftEffect';
44
+ import { defaultGlToneMapEffectRunner } from './glToneMapEffect';
45
+ import { defaultGlVignetteEffectRunner } from './glVignetteEffect';
46
+ import { defaultGlWhiteBalanceEffectRunner } from './glWhiteBalanceEffect';
47
+ // Six-band taxonomy matching @flighthq/effects-wgpu:
48
+ // antialiasing — FXAA, SMAA, TAA
49
+ // bloom — BloomEffect, ChromaticAberration, GodRays, LensDirt, LensDistortion, LensFlare, Vignette
50
+ // blur — BokehDepthOfField, CameraMotionBlur, DirectionalBlur, MotionBlur, RadialBlur, TiltShift
51
+ // color — BrightnessContrast, ChannelMixer, ColorGrade, Exposure, Grayscale, HueSaturation,
52
+ // Invert, LiftGammaGain, LookupTableGrade, Posterize, Sepia, ToneMap, WhiteBalance
53
+ // screen-space — Displacement, ScreenSpaceFog, Sharpen, Ssao, Ssr
54
+ // stylize — Crt, Dither, FilmGrain, Glitch, Halftone, Kuwahara, Outline, Pixelate, Scanlines, Sketch
55
+ //
56
+ // Legacy four-band names (registerBlurGlRenderEffects, registerColorGradeGlRenderEffects,
57
+ // registerStylizeGlRenderEffects, registerScreenSpaceGlRenderEffects, registerDefaultGlRenderEffects)
58
+ // remain as aliases or redirect to equivalent coverage so existing callers are unaffected.
59
+ // Returns the full set of effect kind strings covered by this package's default runners, in
60
+ // alphabetical order. Use to populate editor dropdowns, assert complete registration, or enumerate
61
+ // for tooling — the list is the single source of truth for what `registerDefaultGlRenderEffects`
62
+ // wires in.
63
+ export function getGlRenderEffectKinds() {
64
+ return ALL_GL_EFFECT_KINDS;
65
+ }
66
+ // Antialiasing band: FxaaEffect, SmaaEffect, TaaEffect.
67
+ // Symmetric with Wgpu's registerAntialiasingWgpuRenderEffects.
68
+ export function registerAntialiasingGlRenderEffects(state) {
69
+ registerGlRenderEffect(state, 'FxaaEffect', defaultGlFxaaEffectRunner);
70
+ registerGlRenderEffect(state, 'SmaaEffect', defaultGlSmaaEffectRunner);
71
+ registerGlRenderEffect(state, 'TaaEffect', defaultGlTaaEffectRunner);
72
+ }
73
+ // Bloom / optical band: BloomEffect, ChromaticAberrationEffect, GodRaysEffect, LensDirtEffect,
74
+ // LensDistortionEffect, LensFlareEffect, VignetteEffect.
75
+ // Symmetric with Wgpu's registerBloomWgpuRenderEffects.
76
+ export function registerBloomGlRenderEffects(state) {
77
+ registerGlRenderEffect(state, 'BloomEffect', defaultGlBloomEffectRunner);
78
+ registerGlRenderEffect(state, 'ChromaticAberrationEffect', defaultGlChromaticAberrationEffectRunner);
79
+ registerGlRenderEffect(state, 'GodRaysEffect', defaultGlGodRaysEffectRunner);
80
+ registerGlRenderEffect(state, 'LensDirtEffect', defaultGlLensDirtEffectRunner);
81
+ registerGlRenderEffect(state, 'LensDistortionEffect', defaultGlLensDistortionEffectRunner);
82
+ registerGlRenderEffect(state, 'LensFlareEffect', defaultGlLensFlareEffectRunner);
83
+ registerGlRenderEffect(state, 'VignetteEffect', defaultGlVignetteEffectRunner);
84
+ }
85
+ // Blur band: BokehDepthOfFieldEffect, CameraMotionBlurEffect, DirectionalBlurEffect,
86
+ // MotionBlurEffect, RadialBlurEffect, TiltShiftEffect.
87
+ // Symmetric with Wgpu's registerBlurWgpuRenderEffects (BloomEffect has moved to the bloom band).
88
+ export function registerBlurGlRenderEffects(state) {
89
+ registerGlRenderEffect(state, 'BokehDepthOfFieldEffect', defaultGlBokehDepthOfFieldEffectRunner);
90
+ registerGlRenderEffect(state, 'CameraMotionBlurEffect', defaultGlCameraMotionBlurEffectRunner);
91
+ registerGlRenderEffect(state, 'DirectionalBlurEffect', defaultGlDirectionalBlurEffectRunner);
92
+ registerGlRenderEffect(state, 'MotionBlurEffect', defaultGlMotionBlurEffectRunner);
93
+ registerGlRenderEffect(state, 'RadialBlurEffect', defaultGlRadialBlurEffectRunner);
94
+ registerGlRenderEffect(state, 'TiltShiftEffect', defaultGlTiltShiftEffectRunner);
95
+ }
96
+ // Color / tone band: BrightnessContrastEffect, ChannelMixerEffect, ColorGradeEffect,
97
+ // ExposureEffect, GrayscaleEffect, HueSaturationEffect, InvertEffect, LiftGammaGainEffect,
98
+ // LookupTableGradeEffect, PosterizeEffect, SepiaEffect, ToneMapEffect, WhiteBalanceEffect.
99
+ // DitherEffect has moved to the stylize band (matching Wgpu).
100
+ // Symmetric with Wgpu's registerColorWgpuRenderEffects.
101
+ export function registerColorGlRenderEffects(state) {
102
+ registerGlRenderEffect(state, 'BrightnessContrastEffect', defaultGlBrightnessContrastEffectRunner);
103
+ registerGlRenderEffect(state, 'ChannelMixerEffect', defaultGlChannelMixerEffectRunner);
104
+ registerGlRenderEffect(state, 'ColorGradeEffect', defaultGlColorGradeEffectRunner);
105
+ registerGlRenderEffect(state, 'ExposureEffect', defaultGlExposureEffectRunner);
106
+ registerGlRenderEffect(state, 'GrayscaleEffect', defaultGlGrayscaleEffectRunner);
107
+ registerGlRenderEffect(state, 'HueSaturationEffect', defaultGlHueSaturationEffectRunner);
108
+ registerGlRenderEffect(state, 'InvertEffect', defaultGlInvertEffectRunner);
109
+ registerGlRenderEffect(state, 'LiftGammaGainEffect', defaultGlLiftGammaGainEffectRunner);
110
+ registerGlRenderEffect(state, 'LookupTableGradeEffect', defaultGlLookupTableGradeEffectRunner);
111
+ registerGlRenderEffect(state, 'PosterizeEffect', defaultGlPosterizeEffectRunner);
112
+ registerGlRenderEffect(state, 'SepiaEffect', defaultGlSepiaEffectRunner);
113
+ registerGlRenderEffect(state, 'ToneMapEffect', defaultGlToneMapEffectRunner);
114
+ registerGlRenderEffect(state, 'WhiteBalanceEffect', defaultGlWhiteBalanceEffectRunner);
115
+ }
116
+ // Alias: registerColorGradeGlRenderEffects → registerColorGlRenderEffects.
117
+ // Kept for callers that used the original four-band name.
118
+ export function registerColorGradeGlRenderEffects(state) {
119
+ registerColorGlRenderEffects(state);
120
+ }
121
+ // CustomShaderEffect: runs a user-authored fragment shader (registered with
122
+ // registerGlCustomShaderSource) as a fullscreen pass. Not part of any fixed taxonomy band — it is the
123
+ // escape hatch for effects the built-in set does not cover. registerDefaultGlRenderEffects includes
124
+ // it, so a CustomShaderEffect naming an unregistered shaderKey passes the image through unchanged
125
+ // rather than being silently skipped as an unregistered kind.
126
+ export function registerCustomShaderGlRenderEffect(state) {
127
+ registerGlRenderEffect(state, 'CustomShaderEffect', defaultGlCustomShaderEffectRunner);
128
+ }
129
+ // Registers all default effect runners, covering all six taxonomy bands. The opt-in "register the
130
+ // standard set" entry for applications that want every effect available without cherry-picking.
131
+ // Symmetric with Wgpu's registerStandardWgpuRenderEffects.
132
+ export function registerDefaultGlRenderEffects(state) {
133
+ registerAntialiasingGlRenderEffects(state);
134
+ registerBloomGlRenderEffects(state);
135
+ registerBlurGlRenderEffects(state);
136
+ registerColorGlRenderEffects(state);
137
+ registerCustomShaderGlRenderEffect(state);
138
+ registerScreenSpaceGlRenderEffects(state);
139
+ registerStylizeGlRenderEffects(state);
140
+ }
141
+ // Screen-space / atmospheric band: DisplacementEffect, ScreenSpaceFogEffect, SharpenEffect,
142
+ // SsaoEffect, SsrEffect. Antialiasing effects (FXAA/SMAA/TAA) are in their own band;
143
+ // this band covers depth/atmosphere/image-quality effects that do not fit the other categories.
144
+ // Symmetric with Wgpu's registerScreenSpaceWgpuRenderEffects.
145
+ export function registerScreenSpaceGlRenderEffects(state) {
146
+ registerGlRenderEffect(state, 'DisplacementEffect', defaultGlDisplacementEffectRunner);
147
+ registerGlRenderEffect(state, 'ScreenSpaceFogEffect', defaultGlScreenSpaceFogEffectRunner);
148
+ registerGlRenderEffect(state, 'SharpenEffect', defaultGlSharpenEffectRunner);
149
+ registerGlRenderEffect(state, 'SsaoEffect', defaultGlSsaoEffectRunner);
150
+ registerGlRenderEffect(state, 'SsrEffect', defaultGlSsrEffectRunner);
151
+ }
152
+ // Alias: registerStandardGlRenderEffects → registerDefaultGlRenderEffects.
153
+ // Symmetric name for callers targeting both GL and Wgpu registrants.
154
+ export function registerStandardGlRenderEffects(state) {
155
+ registerDefaultGlRenderEffects(state);
156
+ }
157
+ // Stylize band: CrtEffect, DitherEffect, FilmGrainEffect, GlitchEffect, HalftoneEffect,
158
+ // KuwaharaEffect, OutlineEffect, PixelateEffect, ScanlinesEffect, SketchEffect.
159
+ // DitherEffect has moved here from the color-grade band (matching Wgpu).
160
+ // Symmetric with Wgpu's registerStylizeWgpuRenderEffects.
161
+ export function registerStylizeGlRenderEffects(state) {
162
+ registerGlRenderEffect(state, 'CrtEffect', defaultGlCrtEffectRunner);
163
+ registerGlRenderEffect(state, 'DitherEffect', defaultGlDitherEffectRunner);
164
+ registerGlRenderEffect(state, 'FilmGrainEffect', defaultGlFilmGrainEffectRunner);
165
+ registerGlRenderEffect(state, 'GlitchEffect', defaultGlGlitchEffectRunner);
166
+ registerGlRenderEffect(state, 'HalftoneEffect', defaultGlHalftoneEffectRunner);
167
+ registerGlRenderEffect(state, 'KuwaharaEffect', defaultGlKuwaharaEffectRunner);
168
+ registerGlRenderEffect(state, 'OutlineEffect', defaultGlOutlineEffectRunner);
169
+ registerGlRenderEffect(state, 'PixelateEffect', defaultGlPixelateEffectRunner);
170
+ registerGlRenderEffect(state, 'ScanlinesEffect', defaultGlScanlinesEffectRunner);
171
+ registerGlRenderEffect(state, 'SketchEffect', defaultGlSketchEffectRunner);
172
+ }
173
+ // All kind strings covered by this package's default runners, alphabetical order.
174
+ // Single source of truth for registerDefaultGlRenderEffects and getGlRenderEffectKinds.
175
+ const ALL_GL_EFFECT_KINDS = [
176
+ 'BloomEffect',
177
+ 'BokehDepthOfFieldEffect',
178
+ 'BrightnessContrastEffect',
179
+ 'CameraMotionBlurEffect',
180
+ 'ChannelMixerEffect',
181
+ 'ChromaticAberrationEffect',
182
+ 'ColorGradeEffect',
183
+ 'CrtEffect',
184
+ 'CustomShaderEffect',
185
+ 'DirectionalBlurEffect',
186
+ 'DisplacementEffect',
187
+ 'DitherEffect',
188
+ 'ExposureEffect',
189
+ 'FilmGrainEffect',
190
+ 'FxaaEffect',
191
+ 'GlitchEffect',
192
+ 'GodRaysEffect',
193
+ 'GrayscaleEffect',
194
+ 'HalftoneEffect',
195
+ 'HueSaturationEffect',
196
+ 'InvertEffect',
197
+ 'KuwaharaEffect',
198
+ 'LensDirtEffect',
199
+ 'LensDistortionEffect',
200
+ 'LensFlareEffect',
201
+ 'LiftGammaGainEffect',
202
+ 'LookupTableGradeEffect',
203
+ 'MotionBlurEffect',
204
+ 'OutlineEffect',
205
+ 'PixelateEffect',
206
+ 'PosterizeEffect',
207
+ 'RadialBlurEffect',
208
+ 'ScanlinesEffect',
209
+ 'ScreenSpaceFogEffect',
210
+ 'SepiaEffect',
211
+ 'SharpenEffect',
212
+ 'SketchEffect',
213
+ 'SmaaEffect',
214
+ 'SsaoEffect',
215
+ 'SsrEffect',
216
+ 'TaaEffect',
217
+ 'TiltShiftEffect',
218
+ 'ToneMapEffect',
219
+ 'VignetteEffect',
220
+ 'WhiteBalanceEffect',
221
+ ];
222
+ //# sourceMappingURL=glRenderEffectRegistrar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glRenderEffectRegistrar.js","sourceRoot":"","sources":["../src/glRenderEffectRegistrar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { GlRenderEffectRunner, GlRenderState } from '@flighthq/types';
2
+ export declare function getGlRenderEffectRunner(state: GlRenderState, kind: string): GlRenderEffectRunner | null;
3
+ export declare function hasGlRenderEffectRunner(state: GlRenderState, kind: string): boolean;
4
+ export declare function registerGlRenderEffect(state: GlRenderState, kind: string, runner: GlRenderEffectRunner): void;
5
+ //# sourceMappingURL=glRenderEffectRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glRenderEffectRegistry.d.ts","sourceRoot":"","sources":["../src/glRenderEffectRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAO3E,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAEvG;AAKD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnF;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAO7G"}
@@ -0,0 +1,23 @@
1
+ // Per-state registry mapping an effect `kind` string to its Gl runner — the material-renderer
2
+ // pattern one tier up. Registration is opt-in (import a runner only to register it) and dispatch is a
3
+ // Map lookup, so there is no monolithic switch and unused effect recipes tree-shake away. Register an
4
+ // alternative runner under the same key to swap algorithms.
5
+ export function getGlRenderEffectRunner(state, kind) {
6
+ return _registries.get(state)?.get(kind) ?? null;
7
+ }
8
+ // Returns true if a runner is registered for the given kind in this state. Use to validate an effect
9
+ // chain before dispatching — the pipeline silently skips unregistered kinds; check up front to apply
10
+ // your own policy (warn, throw, filter) rather than relying on silent no-ops.
11
+ export function hasGlRenderEffectRunner(state, kind) {
12
+ return _registries.get(state)?.has(kind) ?? false;
13
+ }
14
+ export function registerGlRenderEffect(state, kind, runner) {
15
+ let registry = _registries.get(state);
16
+ if (registry === undefined) {
17
+ registry = new Map();
18
+ _registries.set(state, registry);
19
+ }
20
+ registry.set(kind, runner);
21
+ }
22
+ const _registries = new WeakMap();
23
+ //# sourceMappingURL=glRenderEffectRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glRenderEffectRegistry.js","sourceRoot":"","sources":["../src/glRenderEffectRegistry.ts"],"names":[],"mappings":"AAEA,8FAA8F;AAC9F,sGAAsG;AACtG,sGAAsG;AACtG,4DAA4D;AAE5D,MAAM,UAAU,uBAAuB,CAAC,KAAoB,EAAE,IAAY;IACxE,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AACnD,CAAC;AAED,qGAAqG;AACrG,qGAAqG;AACrG,8EAA8E;AAC9E,MAAM,UAAU,uBAAuB,CAAC,KAAoB,EAAE,IAAY;IACxE,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAoB,EAAE,IAAY,EAAE,MAA4B;IACrG,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,EAAoD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { GlRenderEffectRunner, GlRenderState, GlRenderTarget, ScanlinesEffect } from '@flighthq/types';
2
+ export declare function applyScanlinesEffectToGl(state: GlRenderState, source: Readonly<GlRenderTarget>, dest: Readonly<GlRenderTarget>, effect: Readonly<ScanlinesEffect>): void;
3
+ export declare const defaultGlScanlinesEffectRunner: GlRenderEffectRunner;
4
+ //# sourceMappingURL=glScanlinesEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glScanlinesEffect.d.ts","sourceRoot":"","sources":["../src/glScanlinesEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAK5G,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,GAChC,IAAI,CAQN;AAED,eAAO,MAAM,8BAA8B,EAAE,oBAE5C,CAAC"}