@flighthq/effects-gl 0.3.0-next.906.07cea63 → 0.3.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 (278) hide show
  1. package/dist/contract.d.ts +3 -2
  2. package/dist/contract.d.ts.map +1 -1
  3. package/dist/contract.js +3 -2
  4. package/dist/contract.js.map +1 -1
  5. package/dist/enableGlRenderEffectGuards.d.ts +5 -0
  6. package/dist/enableGlRenderEffectGuards.d.ts.map +1 -0
  7. package/dist/enableGlRenderEffectGuards.js +43 -0
  8. package/dist/enableGlRenderEffectGuards.js.map +1 -0
  9. package/dist/glBevelEffect.d.ts +1 -0
  10. package/dist/glBevelEffect.d.ts.map +1 -1
  11. package/dist/glBevelEffect.js +7 -3
  12. package/dist/glBevelEffect.js.map +1 -1
  13. package/dist/glBlendEffect.d.ts +2 -0
  14. package/dist/glBlendEffect.d.ts.map +1 -1
  15. package/dist/glBlendEffect.js +13 -2
  16. package/dist/glBlendEffect.js.map +1 -1
  17. package/dist/glBloomEffect.d.ts +1 -0
  18. package/dist/glBloomEffect.d.ts.map +1 -1
  19. package/dist/glBloomEffect.js +4 -0
  20. package/dist/glBloomEffect.js.map +1 -1
  21. package/dist/glBlurEffect.d.ts +7 -1
  22. package/dist/glBlurEffect.d.ts.map +1 -1
  23. package/dist/glBlurEffect.js +34 -6
  24. package/dist/glBlurEffect.js.map +1 -1
  25. package/dist/glBokehDepthOfFieldEffect.d.ts +1 -0
  26. package/dist/glBokehDepthOfFieldEffect.d.ts.map +1 -1
  27. package/dist/glBokehDepthOfFieldEffect.js +4 -0
  28. package/dist/glBokehDepthOfFieldEffect.js.map +1 -1
  29. package/dist/glCameraMotionBlurEffect.d.ts +1 -0
  30. package/dist/glCameraMotionBlurEffect.d.ts.map +1 -1
  31. package/dist/glCameraMotionBlurEffect.js +4 -0
  32. package/dist/glCameraMotionBlurEffect.js.map +1 -1
  33. package/dist/glChromaticAberrationEffect.d.ts +1 -0
  34. package/dist/glChromaticAberrationEffect.d.ts.map +1 -1
  35. package/dist/glChromaticAberrationEffect.js +4 -0
  36. package/dist/glChromaticAberrationEffect.js.map +1 -1
  37. package/dist/glCompositeEffect.d.ts +1 -0
  38. package/dist/glCompositeEffect.d.ts.map +1 -1
  39. package/dist/glCompositeEffect.js +4 -0
  40. package/dist/glCompositeEffect.js.map +1 -1
  41. package/dist/glContactShadowsEffect.d.ts +5 -0
  42. package/dist/glContactShadowsEffect.d.ts.map +1 -0
  43. package/dist/glContactShadowsEffect.js +20 -0
  44. package/dist/glContactShadowsEffect.js.map +1 -0
  45. package/dist/glConvolutionEffect.d.ts +1 -0
  46. package/dist/glConvolutionEffect.d.ts.map +1 -1
  47. package/dist/glConvolutionEffect.js +4 -0
  48. package/dist/glConvolutionEffect.js.map +1 -1
  49. package/dist/glCrtEffect.d.ts +1 -0
  50. package/dist/glCrtEffect.d.ts.map +1 -1
  51. package/dist/glCrtEffect.js +4 -0
  52. package/dist/glCrtEffect.js.map +1 -1
  53. package/dist/glCustomShaderEffect.d.ts +1 -0
  54. package/dist/glCustomShaderEffect.d.ts.map +1 -1
  55. package/dist/glCustomShaderEffect.js +4 -0
  56. package/dist/glCustomShaderEffect.js.map +1 -1
  57. package/dist/glDirectionalBlurEffect.d.ts +1 -0
  58. package/dist/glDirectionalBlurEffect.d.ts.map +1 -1
  59. package/dist/glDirectionalBlurEffect.js +4 -0
  60. package/dist/glDirectionalBlurEffect.js.map +1 -1
  61. package/dist/glDisplacementEffect.d.ts +1 -0
  62. package/dist/glDisplacementEffect.d.ts.map +1 -1
  63. package/dist/glDisplacementEffect.js +4 -0
  64. package/dist/glDisplacementEffect.js.map +1 -1
  65. package/dist/glDitherEffect.d.ts +1 -0
  66. package/dist/glDitherEffect.d.ts.map +1 -1
  67. package/dist/glDitherEffect.js +4 -0
  68. package/dist/glDitherEffect.js.map +1 -1
  69. package/dist/glDropShadowEffect.d.ts +1 -0
  70. package/dist/glDropShadowEffect.d.ts.map +1 -1
  71. package/dist/glDropShadowEffect.js +4 -0
  72. package/dist/glDropShadowEffect.js.map +1 -1
  73. package/dist/glEffectBlitShader.js +6 -6
  74. package/dist/glEffectBlitShader.js.map +1 -1
  75. package/dist/glEffectBoxBlur.js +2 -2
  76. package/dist/glEffectBoxBlur.js.map +1 -1
  77. package/dist/glEffectProgramCache.js +5 -5
  78. package/dist/glEffectProgramCache.js.map +1 -1
  79. package/dist/glEffectTintShader.js +4 -4
  80. package/dist/glEffectTintShader.js.map +1 -1
  81. package/dist/glFilmGrainEffect.d.ts +1 -0
  82. package/dist/glFilmGrainEffect.d.ts.map +1 -1
  83. package/dist/glFilmGrainEffect.js +4 -0
  84. package/dist/glFilmGrainEffect.js.map +1 -1
  85. package/dist/glFxaaEffect.d.ts +1 -0
  86. package/dist/glFxaaEffect.d.ts.map +1 -1
  87. package/dist/glFxaaEffect.js +4 -0
  88. package/dist/glFxaaEffect.js.map +1 -1
  89. package/dist/glGlitchEffect.d.ts +1 -0
  90. package/dist/glGlitchEffect.d.ts.map +1 -1
  91. package/dist/glGlitchEffect.js +4 -0
  92. package/dist/glGlitchEffect.js.map +1 -1
  93. package/dist/glGodRaysEffect.d.ts +1 -0
  94. package/dist/glGodRaysEffect.d.ts.map +1 -1
  95. package/dist/glGodRaysEffect.js +4 -0
  96. package/dist/glGodRaysEffect.js.map +1 -1
  97. package/dist/glGradientBevelEffect.d.ts +1 -0
  98. package/dist/glGradientBevelEffect.d.ts.map +1 -1
  99. package/dist/glGradientBevelEffect.js +8 -4
  100. package/dist/glGradientBevelEffect.js.map +1 -1
  101. package/dist/glGradientGlowEffect.d.ts +1 -0
  102. package/dist/glGradientGlowEffect.d.ts.map +1 -1
  103. package/dist/glGradientGlowEffect.js +6 -2
  104. package/dist/glGradientGlowEffect.js.map +1 -1
  105. package/dist/glHalftoneEffect.d.ts +1 -0
  106. package/dist/glHalftoneEffect.d.ts.map +1 -1
  107. package/dist/glHalftoneEffect.js +4 -0
  108. package/dist/glHalftoneEffect.js.map +1 -1
  109. package/dist/glInnerGlowEffect.d.ts +1 -0
  110. package/dist/glInnerGlowEffect.d.ts.map +1 -1
  111. package/dist/glInnerGlowEffect.js +6 -2
  112. package/dist/glInnerGlowEffect.js.map +1 -1
  113. package/dist/glInnerShadowEffect.d.ts +1 -0
  114. package/dist/glInnerShadowEffect.d.ts.map +1 -1
  115. package/dist/glInnerShadowEffect.js +6 -2
  116. package/dist/glInnerShadowEffect.js.map +1 -1
  117. package/dist/glKuwaharaEffect.d.ts +1 -0
  118. package/dist/glKuwaharaEffect.d.ts.map +1 -1
  119. package/dist/glKuwaharaEffect.js +4 -0
  120. package/dist/glKuwaharaEffect.js.map +1 -1
  121. package/dist/glLensDirtEffect.d.ts +1 -0
  122. package/dist/glLensDirtEffect.d.ts.map +1 -1
  123. package/dist/glLensDirtEffect.js +4 -0
  124. package/dist/glLensDirtEffect.js.map +1 -1
  125. package/dist/glLensDistortionEffect.d.ts +1 -0
  126. package/dist/glLensDistortionEffect.d.ts.map +1 -1
  127. package/dist/glLensDistortionEffect.js +4 -0
  128. package/dist/glLensDistortionEffect.js.map +1 -1
  129. package/dist/glLensFlareEffect.d.ts +1 -0
  130. package/dist/glLensFlareEffect.d.ts.map +1 -1
  131. package/dist/glLensFlareEffect.js +4 -0
  132. package/dist/glLensFlareEffect.js.map +1 -1
  133. package/dist/glMedianEffect.d.ts +1 -0
  134. package/dist/glMedianEffect.d.ts.map +1 -1
  135. package/dist/glMedianEffect.js +4 -0
  136. package/dist/glMedianEffect.js.map +1 -1
  137. package/dist/glMotionBlurEffect.d.ts +1 -0
  138. package/dist/glMotionBlurEffect.d.ts.map +1 -1
  139. package/dist/glMotionBlurEffect.js +4 -0
  140. package/dist/glMotionBlurEffect.js.map +1 -1
  141. package/dist/glOuterGlowEffect.d.ts +1 -0
  142. package/dist/glOuterGlowEffect.d.ts.map +1 -1
  143. package/dist/glOuterGlowEffect.js +4 -0
  144. package/dist/glOuterGlowEffect.js.map +1 -1
  145. package/dist/glOutlineEffect.d.ts +1 -0
  146. package/dist/glOutlineEffect.d.ts.map +1 -1
  147. package/dist/glOutlineEffect.js +4 -0
  148. package/dist/glOutlineEffect.js.map +1 -1
  149. package/dist/glPixelateEffect.d.ts +1 -0
  150. package/dist/glPixelateEffect.d.ts.map +1 -1
  151. package/dist/glPixelateEffect.js +4 -0
  152. package/dist/glPixelateEffect.js.map +1 -1
  153. package/dist/glPosterizeEffect.d.ts +1 -0
  154. package/dist/glPosterizeEffect.d.ts.map +1 -1
  155. package/dist/glPosterizeEffect.js +4 -0
  156. package/dist/glPosterizeEffect.js.map +1 -1
  157. package/dist/glRadialBlurEffect.d.ts +1 -0
  158. package/dist/glRadialBlurEffect.d.ts.map +1 -1
  159. package/dist/glRadialBlurEffect.js +4 -0
  160. package/dist/glRadialBlurEffect.js.map +1 -1
  161. package/dist/glRenderEffectPipeline.d.ts +2 -2
  162. package/dist/glRenderEffectPipeline.d.ts.map +1 -1
  163. package/dist/glRenderEffectPipeline.js +14 -7
  164. package/dist/glRenderEffectPipeline.js.map +1 -1
  165. package/dist/glRenderEffectRegistry.d.ts.map +1 -1
  166. package/dist/glRenderEffectRegistry.js +8 -10
  167. package/dist/glRenderEffectRegistry.js.map +1 -1
  168. package/dist/glRenderTextureEffect.d.ts +5 -0
  169. package/dist/glRenderTextureEffect.d.ts.map +1 -0
  170. package/dist/glRenderTextureEffect.js +83 -0
  171. package/dist/glRenderTextureEffect.js.map +1 -0
  172. package/dist/glScanlinesEffect.d.ts +1 -0
  173. package/dist/glScanlinesEffect.d.ts.map +1 -1
  174. package/dist/glScanlinesEffect.js +4 -0
  175. package/dist/glScanlinesEffect.js.map +1 -1
  176. package/dist/glScreenSpaceFogEffect.d.ts +1 -0
  177. package/dist/glScreenSpaceFogEffect.d.ts.map +1 -1
  178. package/dist/glScreenSpaceFogEffect.js +4 -0
  179. package/dist/glScreenSpaceFogEffect.js.map +1 -1
  180. package/dist/glSharpenEffect.d.ts +1 -0
  181. package/dist/glSharpenEffect.d.ts.map +1 -1
  182. package/dist/glSharpenEffect.js +4 -0
  183. package/dist/glSharpenEffect.js.map +1 -1
  184. package/dist/glSketchEffect.d.ts +1 -0
  185. package/dist/glSketchEffect.d.ts.map +1 -1
  186. package/dist/glSketchEffect.js +4 -0
  187. package/dist/glSketchEffect.js.map +1 -1
  188. package/dist/glSmaaEffect.d.ts +1 -0
  189. package/dist/glSmaaEffect.d.ts.map +1 -1
  190. package/dist/glSmaaEffect.js +4 -0
  191. package/dist/glSmaaEffect.js.map +1 -1
  192. package/dist/glSsaoEffect.d.ts +1 -0
  193. package/dist/glSsaoEffect.d.ts.map +1 -1
  194. package/dist/glSsaoEffect.js +4 -0
  195. package/dist/glSsaoEffect.js.map +1 -1
  196. package/dist/glTiltShiftEffect.d.ts +1 -0
  197. package/dist/glTiltShiftEffect.d.ts.map +1 -1
  198. package/dist/glTiltShiftEffect.js +4 -0
  199. package/dist/glTiltShiftEffect.js.map +1 -1
  200. package/dist/glToneMapEffect.d.ts +1 -0
  201. package/dist/glToneMapEffect.d.ts.map +1 -1
  202. package/dist/glToneMapEffect.js +4 -0
  203. package/dist/glToneMapEffect.js.map +1 -1
  204. package/dist/glVignetteEffect.d.ts +1 -0
  205. package/dist/glVignetteEffect.d.ts.map +1 -1
  206. package/dist/glVignetteEffect.js +4 -0
  207. package/dist/glVignetteEffect.js.map +1 -1
  208. package/dist/glWhiteBalanceEffect.d.ts +1 -0
  209. package/dist/glWhiteBalanceEffect.d.ts.map +1 -1
  210. package/dist/glWhiteBalanceEffect.js +4 -0
  211. package/dist/glWhiteBalanceEffect.js.map +1 -1
  212. package/dist/index.d.ts +1 -1
  213. package/dist/index.d.ts.map +1 -1
  214. package/dist/index.js +1 -1
  215. package/dist/index.js.map +1 -1
  216. package/package.json +9 -6
  217. package/src/enableGlRenderEffectGuards.test.ts +156 -0
  218. package/src/glBevelEffect.test.ts +7 -1
  219. package/src/glBlendEffect.test.ts +26 -0
  220. package/src/glBloomEffect.test.ts +7 -1
  221. package/src/glBlurEffect.test.ts +69 -1
  222. package/src/glBokehDepthOfFieldEffect.test.ts +11 -1
  223. package/src/glCameraMotionBlurEffect.test.ts +11 -1
  224. package/src/glChromaticAberrationEffect.test.ts +7 -0
  225. package/src/glCompositeEffect.test.ts +7 -0
  226. package/src/glContactShadowsEffect.test.ts +43 -0
  227. package/src/glConvolutionEffect.test.ts +11 -1
  228. package/src/glCrtEffect.test.ts +7 -1
  229. package/src/glCustomShaderEffect.test.ts +7 -0
  230. package/src/glDirectionalBlurEffect.test.ts +11 -1
  231. package/src/glDisplacementEffect.test.ts +11 -1
  232. package/src/glDitherEffect.test.ts +7 -1
  233. package/src/glDropShadowEffect.test.ts +11 -9
  234. package/src/glEffectBoxBlur.test.ts +0 -5
  235. package/src/glFilmGrainEffect.test.ts +11 -1
  236. package/src/glFxaaEffect.test.ts +7 -1
  237. package/src/glGlitchEffect.test.ts +7 -1
  238. package/src/glGodRaysEffect.test.ts +7 -1
  239. package/src/glGradientBevelEffect.test.ts +11 -1
  240. package/src/glGradientGlowEffect.test.ts +11 -1
  241. package/src/glHalftoneEffect.test.ts +7 -1
  242. package/src/glInnerGlowEffect.test.ts +11 -9
  243. package/src/glInnerShadowEffect.test.ts +11 -9
  244. package/src/glKuwaharaEffect.test.ts +7 -1
  245. package/src/glLensDirtEffect.test.ts +7 -1
  246. package/src/glLensDistortionEffect.test.ts +11 -1
  247. package/src/glLensFlareEffect.test.ts +11 -1
  248. package/src/glMedianEffect.test.ts +7 -1
  249. package/src/glMotionBlurEffect.test.ts +11 -1
  250. package/src/glOuterGlowEffect.test.ts +11 -9
  251. package/src/glOutlineEffect.test.ts +7 -1
  252. package/src/glPixelateEffect.test.ts +7 -1
  253. package/src/glPosterizeEffect.test.ts +11 -1
  254. package/src/glRadialBlurEffect.test.ts +11 -1
  255. package/src/glRenderEffectPipeline.test.ts +15 -0
  256. package/src/glRenderEffectRegistry.test.ts +24 -14
  257. package/src/glRenderTextureEffect.test.ts +246 -0
  258. package/src/glScanlinesEffect.test.ts +11 -1
  259. package/src/glScreenSpaceFogEffect.test.ts +11 -1
  260. package/src/glSharpenEffect.test.ts +7 -1
  261. package/src/glSketchEffect.test.ts +7 -1
  262. package/src/glSmaaEffect.test.ts +7 -1
  263. package/src/glSpatialEffectRegistration.test.ts +64 -0
  264. package/src/glSsaoEffect.test.ts +7 -1
  265. package/src/glTiltShiftEffect.test.ts +11 -1
  266. package/src/glToneMapEffect.test.ts +7 -1
  267. package/src/glVignetteEffect.test.ts +7 -1
  268. package/src/glWhiteBalanceEffect.test.ts +11 -1
  269. package/dist/glSsrEffect.d.ts +0 -4
  270. package/dist/glSsrEffect.d.ts.map +0 -1
  271. package/dist/glSsrEffect.js +0 -24
  272. package/dist/glSsrEffect.js.map +0 -1
  273. package/dist/glTaaEffect.d.ts +0 -4
  274. package/dist/glTaaEffect.d.ts.map +0 -1
  275. package/dist/glTaaEffect.js +0 -22
  276. package/dist/glTaaEffect.js.map +0 -1
  277. package/src/glSsrEffect.test.ts +0 -13
  278. package/src/glTaaEffect.test.ts +0 -13
@@ -1,7 +1,9 @@
1
+ export * from './enableGlRenderEffectGuards';
1
2
  export * from './glColorMatrixPass';
2
3
  export * from './glBevelEffect';
3
4
  export * from './glBlendEffect';
4
5
  export * from './glCompositeEffect';
6
+ export * from './glContactShadowsEffect';
5
7
  export * from './glBloomEffect';
6
8
  export * from './glBlurEffect';
7
9
  export * from './glBokehDepthOfFieldEffect';
@@ -41,14 +43,13 @@ export * from './glPosterizeEffect';
41
43
  export * from './glRadialBlurEffect';
42
44
  export * from './glRenderEffectPipeline';
43
45
  export * from './glRenderEffectRegistry';
46
+ export * from './glRenderTextureEffect';
44
47
  export * from './glScanlinesEffect';
45
48
  export * from './glScreenSpaceFogEffect';
46
49
  export * from './glSharpenEffect';
47
50
  export * from './glSketchEffect';
48
51
  export * from './glSmaaEffect';
49
52
  export * from './glSsaoEffect';
50
- export * from './glSsrEffect';
51
- export * from './glTaaEffect';
52
53
  export * from './glTiltShiftEffect';
53
54
  export * from './glToneMapEffect';
54
55
  export * from './glVignetteEffect';
@@ -1 +1 @@
1
- {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC"}
package/dist/contract.js CHANGED
@@ -1,7 +1,9 @@
1
+ export * from './enableGlRenderEffectGuards';
1
2
  export * from './glColorMatrixPass';
2
3
  export * from './glBevelEffect';
3
4
  export * from './glBlendEffect';
4
5
  export * from './glCompositeEffect';
6
+ export * from './glContactShadowsEffect';
5
7
  export * from './glBloomEffect';
6
8
  export * from './glBlurEffect';
7
9
  export * from './glBokehDepthOfFieldEffect';
@@ -41,14 +43,13 @@ export * from './glPosterizeEffect';
41
43
  export * from './glRadialBlurEffect';
42
44
  export * from './glRenderEffectPipeline';
43
45
  export * from './glRenderEffectRegistry';
46
+ export * from './glRenderTextureEffect';
44
47
  export * from './glScanlinesEffect';
45
48
  export * from './glScreenSpaceFogEffect';
46
49
  export * from './glSharpenEffect';
47
50
  export * from './glSketchEffect';
48
51
  export * from './glSmaaEffect';
49
52
  export * from './glSsaoEffect';
50
- export * from './glSsrEffect';
51
- export * from './glTaaEffect';
52
53
  export * from './glTiltShiftEffect';
53
54
  export * from './glToneMapEffect';
54
55
  export * from './glVignetteEffect';
@@ -1 +1 @@
1
- {"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { GlRenderState } from '@flighthq/types/contract';
2
+ export declare function areGlRenderEffectGuardsEnabled(state: GlRenderState): boolean;
3
+ export declare function disableGlRenderEffectGuards(state: GlRenderState): void;
4
+ export declare function enableGlRenderEffectGuards(state: GlRenderState): void;
5
+ //# sourceMappingURL=enableGlRenderEffectGuards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enableGlRenderEffectGuards.d.ts","sourceRoot":"","sources":["../src/enableGlRenderEffectGuards.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAwC,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAKpG,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAE5E;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAGtE;AAMD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAGrE"}
@@ -0,0 +1,43 @@
1
+ import { logOnce } from '@flighthq/log/contract';
2
+ import { LogLevel } from '@flighthq/types/contract';
3
+ import { setGlRenderEffectApplicationGuard } from './glRenderTextureEffect';
4
+ export function areGlRenderEffectGuardsEnabled(state) {
5
+ return _guardedStates.has(state);
6
+ }
7
+ export function disableGlRenderEffectGuards(state) {
8
+ setGlRenderEffectApplicationGuard(state, null);
9
+ _guardedStates.delete(state);
10
+ }
11
+ // Installs diagnostics for the effect-chain sentinels that are indistinguishable from working code:
12
+ // an unregistered chain returns false having never written `dest`, so a sprite sampling that texture
13
+ // shows whatever was last in it, and a partially registered chain succeeds while silently dropping
14
+ // the effects it could not run. Both are correct by contract and neither surfaces anywhere.
15
+ export function enableGlRenderEffectGuards(state) {
16
+ setGlRenderEffectApplicationGuard(state, warnGlRenderEffectApplication);
17
+ _guardedStates.add(state);
18
+ }
19
+ function getGlRenderEffectApplicationMessage(explanation) {
20
+ switch (explanation.status) {
21
+ case 'partial-registration':
22
+ return `applyGlRenderEffectsToRenderTexture: ${explanation.unregisteredKinds.length} of ${explanation.requestedCount} effect kinds have no registered runner and were SKIPPED — the destination was written without them; call registerGlRenderEffect(state, kind, runner) for ${explanation.unregisteredKinds.join(', ')}`;
23
+ case 'source-unavailable':
24
+ return 'applyGlRenderEffectsToRenderTexture: the source render Texture has no realized GL target, so the call returned false and the destination was NOT written — render into the source before applying effects';
25
+ case 'stale-destination':
26
+ return 'applyGlRenderEffectsToRenderTexture: the call returned false before replacing the destination, so its previously published pixels are a STALE DESTINATION — handle the false return before sampling dest, and make the source and runners available before retrying';
27
+ default:
28
+ return `applyGlRenderEffectsToRenderTexture: no registered runner for any of ${explanation.unregisteredKinds.join(', ')}, so the call returned false and the destination was NEVER WRITTEN — anything sampling it reads a stale or empty texture; call registerGlRenderEffect(state, kind, runner)`;
29
+ }
30
+ }
31
+ function warnGlRenderEffectApplication(_state, explanation) {
32
+ // Keyed by status plus the kinds involved: a chain missing a different effect is a different
33
+ // observation worth reporting, while the same miss every frame is not.
34
+ logOnce(`effects-gl:effect-application:${explanation.status}:${explanation.unregisteredKinds.join(',')}`, LogLevel.Warn, {
35
+ message: getGlRenderEffectApplicationMessage(explanation),
36
+ registeredCount: explanation.registeredCount,
37
+ requestedCount: explanation.requestedCount,
38
+ status: explanation.status,
39
+ unregisteredKinds: explanation.unregisteredKinds,
40
+ }, 'effects-gl');
41
+ }
42
+ const _guardedStates = new WeakSet();
43
+ //# sourceMappingURL=enableGlRenderEffectGuards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enableGlRenderEffectGuards.js","sourceRoot":"","sources":["../src/enableGlRenderEffectGuards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAAE,iCAAiC,EAAE,MAAM,yBAAyB,CAAC;AAE5E,MAAM,UAAU,8BAA8B,CAAC,KAAoB;IACjE,OAAO,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,KAAoB;IAC9D,iCAAiC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC/C,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,oGAAoG;AACpG,qGAAqG;AACrG,mGAAmG;AACnG,4FAA4F;AAC5F,MAAM,UAAU,0BAA0B,CAAC,KAAoB;IAC7D,iCAAiC,CAAC,KAAK,EAAE,6BAA6B,CAAC,CAAC;IACxE,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,mCAAmC,CAAC,WAA2D;IACtG,QAAQ,WAAW,CAAC,MAAM,EAAE,CAAC;QAC3B,KAAK,sBAAsB;YACzB,OAAO,wCAAwC,WAAW,CAAC,iBAAiB,CAAC,MAAM,OAAO,WAAW,CAAC,cAAc,6JAA6J,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9T,KAAK,oBAAoB;YACvB,OAAO,2MAA2M,CAAC;QACrN,KAAK,mBAAmB;YACtB,OAAO,qQAAqQ,CAAC;QAC/Q;YACE,OAAO,wEAAwE,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,4KAA4K,CAAC;IACxS,CAAC;AACH,CAAC;AAED,SAAS,6BAA6B,CACpC,MAAqB,EACrB,WAA2D;IAE3D,6FAA6F;IAC7F,uEAAuE;IACvE,OAAO,CACL,iCAAiC,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAChG,QAAQ,CAAC,IAAI,EACb;QACE,OAAO,EAAE,mCAAmC,CAAC,WAAW,CAAC;QACzD,eAAe,EAAE,WAAW,CAAC,eAAe;QAC5C,cAAc,EAAE,WAAW,CAAC,cAAc;QAC1C,MAAM,EAAE,WAAW,CAAC,MAAM;QAC1B,iBAAiB,EAAE,WAAW,CAAC,iBAAiB;KACjD,EACD,YAAY,CACb,CAAC;AACJ,CAAC;AAED,MAAM,cAAc,GAAG,IAAI,OAAO,EAAiB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { BevelEffect, GlRenderEffectRunner, GlRenderState, GlRenderTarget, GlRenderTargetPool } from '@flighthq/types/contract';
2
2
  export declare function applyBevelEffectToGl(state: GlRenderState, source: Readonly<GlRenderTarget>, dest: Readonly<GlRenderTarget>, pool: GlRenderTargetPool, effect: Readonly<BevelEffect>): void;
3
3
  export declare const defaultGlBevelEffectRunner: GlRenderEffectRunner;
4
+ export declare function registerGlBevelEffect(state: GlRenderState): void;
4
5
  //# sourceMappingURL=glBevelEffect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"glBevelEffect.d.ts","sourceRoot":"","sources":["../src/glBevelEffect.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,WAAW,EAEX,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAqBlC,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,GAC5B,IAAI,CAsDN;AAED,eAAO,MAAM,0BAA0B,EAAE,oBAExC,CAAC"}
1
+ {"version":3,"file":"glBevelEffect.d.ts","sourceRoot":"","sources":["../src/glBevelEffect.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,WAAW,EAEX,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAsBlC,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,GAC5B,IAAI,CAsDN;AAED,eAAO,MAAM,0BAA0B,EAAE,oBAExC,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAEhE"}
@@ -2,6 +2,7 @@ import { acquireGlRenderTarget, clearGlRenderTarget, compileGlFullscreenProgram,
2
2
  import { applyGlEffectBlitPass, applyGlEffectErasePass } from './glEffectBlitShader';
3
3
  import { applyGlEffectBoxBlur } from './glEffectBoxBlur';
4
4
  import { applyGlEffectTintPass } from './glEffectTintShader';
5
+ import { registerGlRenderEffect } from './glRenderEffectRegistry';
5
6
  // Bevel composite effect: the directional gradient of the blurred silhouette drives a highlight/shadow edge band, clipped by bevelType and composited over the source.
6
7
  // Full-frame realization: acquires the recipe's three scratch targets from the effect pool, runs the
7
8
  // inlined multi-pass recipe, then releases them.
@@ -11,7 +12,7 @@ import { applyGlEffectTintPass } from './glEffectTintShader';
11
12
  // `L = (cos angle, sin angle) · distance`. A positive gradient (the edge facing
12
13
  // the light) draws the highlight color; a negative gradient draws the shadow
13
14
  // color; `|gradient| · strength` is the band's alpha. The resulting tinted mask
14
- // is composited over the source — matching `bevelSurface` (the CPU reference).
15
+ // is composited over the source — matching `bevelBitmap` (the CPU reference).
15
16
  //
16
17
  // `bevelType` clips the mask:
17
18
  // - `'inner'` (default): keep the band inside the shape (× source alpha)
@@ -69,6 +70,9 @@ export function applyBevelEffectToGl(state, source, dest, pool, effect) {
69
70
  export const defaultGlBevelEffectRunner = (ctx, effect) => {
70
71
  applyBevelEffectToGl(ctx.state, ctx.source, ctx.dest, ctx.pool, effect);
71
72
  };
73
+ export function registerGlBevelEffect(state) {
74
+ registerGlRenderEffect(state, 'BevelEffect', defaultGlBevelEffectRunner);
75
+ }
72
76
  // Reads the blurred alpha field (unit 0) and source (unit 1); writes the tinted, clipped bevel mask,
73
77
  // premultiplied, blended over `dest` (which already holds the source when sourceMode is 'draw').
74
78
  const BEVEL_COMPOSITE_FRAGMENT_SRC = `#version 300 es
@@ -115,7 +119,7 @@ function applyGlBevelCompositePass(state, field, source, dest, params) {
115
119
  });
116
120
  }
117
121
  function getGlBevelCompositeShader(state) {
118
- let loc = bevelCompositeShaders.get(state);
122
+ let loc = bevelCompositeShaders.get(state.gl);
119
123
  if (loc === undefined) {
120
124
  const gl = state.gl;
121
125
  const base = compileGlFullscreenProgram(gl, BEVEL_COMPOSITE_FRAGMENT_SRC);
@@ -127,7 +131,7 @@ function getGlBevelCompositeShader(state) {
127
131
  locIntensity: gl.getUniformLocation(base.program, 'u_intensity'),
128
132
  locClipMode: gl.getUniformLocation(base.program, 'u_clipMode'),
129
133
  };
130
- bevelCompositeShaders.set(state, loc);
134
+ bevelCompositeShaders.set(state.gl, loc);
131
135
  }
132
136
  return loc;
133
137
  }
@@ -1 +1 @@
1
- {"version":3,"file":"glBevelEffect.js","sourceRoot":"","sources":["../src/glBevelEffect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"glBevelEffect.js","sourceRoot":"","sources":["../src/glBevelEffect.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,8 @@ export declare function applyBlendEffectToGl(state: GlRenderState, source: Reado
3
3
  export declare const defaultGlBlendEffectRunner: GlRenderEffectRunner;
4
4
  export declare function getBlendEffectModeIndex(mode: AdvancedBlendMode): number;
5
5
  export declare function getGlBlendEffectBackdrop(state: GlRenderState, backdropKey: string | null): WebGLTexture | null;
6
+ export declare function registerGlBlendEffect(state: GlRenderState): void;
6
7
  export declare function registerGlBlendEffectBackdrop(state: GlRenderState, backdropKey: string, texture: WebGLTexture): void;
7
8
  export declare function unregisterGlBlendEffectBackdrop(state: GlRenderState, backdropKey: string): boolean;
9
+ export declare const BLEND_FRAGMENT_SRC = "#version 300 es\nprecision highp float;\nin vec2 v_texCoord;\nuniform sampler2D u_texture0;\nuniform sampler2D u_texture1;\nuniform int u_mode;\nuniform float u_opacity;\nuniform int u_hasBackdrop;\nout vec4 o_color;\n\nfloat lum(vec3 c) { return 0.3 * c.r + 0.59 * c.g + 0.11 * c.b; }\nfloat sat(vec3 c) { return max(max(c.r, c.g), c.b) - min(min(c.r, c.g), c.b); }\n\nvec3 clipColor(vec3 c) {\n float l = lum(c);\n float mn = min(min(c.r, c.g), c.b);\n float mx = max(max(c.r, c.g), c.b);\n if (mn < 0.0) c = l + (c - l) * l / (l - mn);\n if (mx > 1.0) c = l + (c - l) * (1.0 - l) / (mx - l);\n return c;\n}\nvec3 setLum(vec3 c, float l) { return clipColor(c + (l - lum(c))); }\n\nvec3 setSat(vec3 c, float s) {\n // Resolve min/mid/max channels, rescale mid+max to s, pin min to 0. Branchy but only three channels.\n float mn = min(min(c.r, c.g), c.b);\n float mx = max(max(c.r, c.g), c.b);\n float md = (c.r + c.g + c.b) - mn - mx;\n vec3 o;\n float rmid = (mx > mn) ? (md - mn) * s / (mx - mn) : 0.0;\n float rmax = (mx > mn) ? s : 0.0;\n o.r = (c.r == mx) ? rmax : ((c.r == mn) ? 0.0 : rmid);\n o.g = (c.g == mx) ? rmax : ((c.g == mn) ? 0.0 : rmid);\n o.b = (c.b == mx) ? rmax : ((c.b == mn) ? 0.0 : rmid);\n return o;\n}\n\nfloat sepChannel(int mode, float cb, float cs) {\n if (mode == 0) return cb <= 0.5 ? 2.0 * cb * cs : 1.0 - 2.0 * (1.0 - cb) * (1.0 - cs); // Overlay\n if (mode == 1) return cs <= 0.5 ? 2.0 * cb * cs : 1.0 - 2.0 * (1.0 - cb) * (1.0 - cs); // HardLight\n if (mode == 2) { // SoftLight\n float d = cb <= 0.25 ? ((16.0 * cb - 12.0) * cb + 4.0) * cb : sqrt(cb);\n return cs <= 0.5 ? cb - (1.0 - 2.0 * cs) * cb * (1.0 - cb) : cb + (2.0 * cs - 1.0) * (d - cb);\n }\n if (mode == 3) return abs(cb - cs); // Difference\n if (mode == 4) return cb + cs - 2.0 * cb * cs; // Exclusion\n if (mode == 5) return cb <= 0.0 ? 0.0 : (cs >= 1.0 ? 1.0 : min(1.0, cb / (1.0 - cs))); // ColorDodge\n if (mode == 6) return cb >= 1.0 ? 1.0 : (cs <= 0.0 ? 0.0 : 1.0 - min(1.0, (1.0 - cb) / cs)); // ColorBurn\n if (mode == 11) return min(cb, cs); // Darken\n if (mode == 12) return max(cb, cs); // Lighten\n return cs; // Normal\n}\n\nvec3 blendRgb(int mode, vec3 cb, vec3 cs) {\n if (mode == 7) return setLum(setSat(cs, sat(cb)), lum(cb)); // Hue\n if (mode == 8) return setLum(setSat(cb, sat(cs)), lum(cb)); // Saturation\n if (mode == 9) return setLum(cs, lum(cb)); // Color\n if (mode == 10) return setLum(cb, lum(cs)); // Luminosity\n return vec3(sepChannel(mode, cb.r, cs.r), sepChannel(mode, cb.g, cs.g), sepChannel(mode, cb.b, cs.b));\n}\n\nvoid main() {\n vec4 layer = texture(u_texture0, v_texCoord);\n // No backdrop registered: the blend has nothing to read, so pass the layer through unchanged.\n if (u_hasBackdrop == 0) { o_color = layer; return; }\n vec4 back = texture(u_texture1, v_texCoord);\n\n // Un-premultiply to straight RGB for the blend math.\n vec3 cs = layer.a > 0.0 ? layer.rgb / layer.a : vec3(0.0);\n vec3 cb = back.a > 0.0 ? back.rgb / back.a : vec3(0.0);\n float as = layer.a * u_opacity;\n float ab = back.a;\n\n // W3C blend mixing: the blended color contributes only where the backdrop is opaque; elsewhere the\n // straight source shows through. cs' = (1 - ab) * cs + ab * B(cb, cs).\n vec3 blended = blendRgb(u_mode, cb, cs);\n vec3 mixed = (1.0 - ab) * cs + ab * blended;\n\n // Porter-Duff source-over of the (mixed) layer onto the backdrop, output premultiplied.\n float outA = as + ab * (1.0 - as);\n vec3 outRgb = mixed * as + cb * ab * (1.0 - as);\n o_color = vec4(outRgb, outA);\n}";
8
10
  //# sourceMappingURL=glBlendEffect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"glBlendEffect.d.ts","sourceRoot":"","sources":["../src/glBlendEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,cAAc,EACf,MAAM,0BAA0B,CAAC;AAelC,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,GAC5B,IAAI,CAkBN;AAED,eAAO,MAAM,0BAA0B,EAAE,oBAExC,CAAC;AAIF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAEvE;AAID,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,YAAY,GAAG,IAAI,CAG9G;AAKD,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI,CAOpH;AAID,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAElG"}
1
+ {"version":3,"file":"glBlendEffect.d.ts","sourceRoot":"","sources":["../src/glBlendEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,cAAc,EACf,MAAM,0BAA0B,CAAC;AAgBlC,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,GAC5B,IAAI,CAkBN;AAED,eAAO,MAAM,0BAA0B,EAAE,oBAExC,CAAC;AAIF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAEvE;AAID,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,YAAY,GAAG,IAAI,CAG9G;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAEhE;AAKD,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI,CAOpH;AAID,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAElG;AA+BD,eAAO,MAAM,kBAAkB,m7HAkF7B,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { drawGlFullscreenPass } from '@flighthq/render-gl/contract';
2
2
  import { AdvancedBlendMode as AdvancedBlendModeValues } from '@flighthq/types/contract';
3
3
  import { getGlEffectProgram, getGlEffectUniformLocation } from './glEffectProgramCache';
4
+ import { registerGlRenderEffect } from './glRenderEffectRegistry';
4
5
  // Advanced-blend composite pass: sample the incoming layer (`u_texture0`, the effect's `source`) and a
5
6
  // registered backdrop (`u_texture1`), compute the destination-reading / non-separable blend named by the
6
7
  // effect's `mode`, composite the blended color over the backdrop (Porter-Duff source-over), and write to
@@ -47,6 +48,9 @@ export function getGlBlendEffectBackdrop(state, backdropKey) {
47
48
  return null;
48
49
  return _backdrops.get(state)?.get(backdropKey) ?? null;
49
50
  }
51
+ export function registerGlBlendEffect(state) {
52
+ registerGlRenderEffect(state, 'BlendEffect', defaultGlBlendEffectRunner);
53
+ }
50
54
  // Registers a backdrop texture under `backdropKey` for this state, so a BlendEffect naming that key
51
55
  // blends its layer over the texture. Last write wins. Pass a texture produced by the caller (e.g. a
52
56
  // prior render target's `.texture`); the registry holds the handle only and never owns/frees it.
@@ -64,7 +68,8 @@ export function unregisterGlBlendEffectBackdrop(state, backdropKey) {
64
68
  return _backdrops.get(state)?.delete(backdropKey) ?? false;
65
69
  }
66
70
  // AdvancedBlendMode → shader branch index. Alphabetical by value; kept in lockstep with the switch in
67
- // BLEND_FRAGMENT_SRC. The four HSL modes (Color/Hue/Luminosity/Saturation) take indices 7..10.
71
+ // BLEND_FRAGMENT_SRC. The four HSL modes (Color/Hue/Luminosity/Saturation) take indices 7..10, and the
72
+ // faithful Darken/Lighten 11..12 (the coverage-correct twins of the fixed-function BlendMode pair).
68
73
  const BLEND_MODE_INDEX = {
69
74
  [AdvancedBlendModeValues.Overlay]: 0,
70
75
  [AdvancedBlendModeValues.HardLight]: 1,
@@ -77,6 +82,8 @@ const BLEND_MODE_INDEX = {
77
82
  [AdvancedBlendModeValues.Saturation]: 8,
78
83
  [AdvancedBlendModeValues.Color]: 9,
79
84
  [AdvancedBlendModeValues.Luminosity]: 10,
85
+ [AdvancedBlendModeValues.Darken]: 11,
86
+ [AdvancedBlendModeValues.Lighten]: 12,
80
87
  };
81
88
  // Per-state backdrop registry. Off the render-state runtime type, freed with the state. Holds texture
82
89
  // handles only — never owns or frees them.
@@ -85,7 +92,9 @@ const _backdrops = new WeakMap();
85
92
  // un-premultiplied to straight RGB for the blend math, blended via the mode's B(cb, cs), then the blended
86
93
  // color is composited over the backdrop with W3C mixing (cs' = (1 - ab)*cs + ab*B) and Porter-Duff
87
94
  // source-over, re-premultiplied on output. The separable/HSL formulas mirror effects/blendModeMath.ts.
88
- const BLEND_FRAGMENT_SRC = `#version 300 es
95
+ // Exported so the lockstep test can pin the branch switch against the index table above; the two are
96
+ // hand-maintained and a mode with an index but no branch silently renders Normal passthrough.
97
+ export const BLEND_FRAGMENT_SRC = `#version 300 es
89
98
  precision highp float;
90
99
  in vec2 v_texCoord;
91
100
  uniform sampler2D u_texture0;
@@ -133,6 +142,8 @@ float sepChannel(int mode, float cb, float cs) {
133
142
  if (mode == 4) return cb + cs - 2.0 * cb * cs; // Exclusion
134
143
  if (mode == 5) return cb <= 0.0 ? 0.0 : (cs >= 1.0 ? 1.0 : min(1.0, cb / (1.0 - cs))); // ColorDodge
135
144
  if (mode == 6) return cb >= 1.0 ? 1.0 : (cs <= 0.0 ? 0.0 : 1.0 - min(1.0, (1.0 - cb) / cs)); // ColorBurn
145
+ if (mode == 11) return min(cb, cs); // Darken
146
+ if (mode == 12) return max(cb, cs); // Lighten
136
147
  return cs; // Normal
137
148
  }
138
149
 
@@ -1 +1 @@
1
- {"version":3,"file":"glBlendEffect.js","sourceRoot":"","sources":["../src/glBlendEffect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"glBlendEffect.js","sourceRoot":"","sources":["../src/glBlendEffect.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { BloomEffect, GlRenderEffectRunner, GlRenderState, GlRenderTarget, GlRenderTargetPool } from '@flighthq/types/contract';
2
2
  export declare function applyBloomEffectToGl(state: GlRenderState, source: Readonly<GlRenderTarget>, dest: Readonly<GlRenderTarget>, pool: GlRenderTargetPool, effect: Readonly<BloomEffect>): void;
3
3
  export declare const defaultGlBloomEffectRunner: GlRenderEffectRunner;
4
+ export declare function registerGlBloomEffect(state: GlRenderState): void;
4
5
  //# sourceMappingURL=glBloomEffect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"glBloomEffect.d.ts","sourceRoot":"","sources":["../src/glBloomEffect.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAQlC,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,GAC5B,IAAI,CAyBN;AAED,eAAO,MAAM,0BAA0B,EAAE,oBAExC,CAAC"}
1
+ {"version":3,"file":"glBloomEffect.d.ts","sourceRoot":"","sources":["../src/glBloomEffect.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AASlC,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,GAC5B,IAAI,CAyBN;AAED,eAAO,MAAM,0BAA0B,EAAE,oBAExC,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAEhE"}
@@ -2,6 +2,7 @@ import { computeBloomBlurRadius, computeBloomIntensity, computeBloomThreshold }
2
2
  import { acquireGlRenderTarget, drawGlFullscreenPass, releaseGlRenderTarget } from '@flighthq/render-gl/contract';
3
3
  import { applyGaussianBlurToGl } from './glBlurEffect';
4
4
  import { getGlEffectProgram } from './glEffectProgramCache';
5
+ import { registerGlRenderEffect } from './glRenderEffectRegistry';
5
6
  // Bloom: bright-pass → blur the bright branch (via the effects-owned separable gaussian blur) →
6
7
  // additively composite back. The multi-pass reference recipe — it acquires intermediate targets from
7
8
  // the pool and releases them, branches, and reuses the blur primitive, which is what makes it an effect.
@@ -29,6 +30,9 @@ export function applyBloomEffectToGl(state, source, dest, pool, effect) {
29
30
  export const defaultGlBloomEffectRunner = (ctx, effect) => {
30
31
  applyBloomEffectToGl(ctx.state, ctx.source, ctx.dest, ctx.pool, effect);
31
32
  };
33
+ export function registerGlBloomEffect(state) {
34
+ registerGlRenderEffect(state, 'BloomEffect', defaultGlBloomEffectRunner);
35
+ }
32
36
  const BLOOM_BRIGHT_FRAGMENT_SRC = `#version 300 es
33
37
  precision highp float;
34
38
  in vec2 v_texCoord;
@@ -1 +1 @@
1
- {"version":3,"file":"glBloomEffect.js","sourceRoot":"","sources":["../src/glBloomEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAClH,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AASlH,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,gGAAgG;AAChG,qGAAqG;AACrG,yGAAyG;AACzG,MAAM,UAAU,oBAAoB,CAClC,KAAoB,EACpB,MAAgC,EAChC,IAA8B,EAC9B,IAAwB,EACxB,MAA6B;IAE7B,MAAM,SAAS,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAEzF,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAC/D,MAAM,IAAI,GAAG,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAE5D,MAAM,aAAa,GAAG,kBAAkB,CAAC,KAAK,EAAE,cAAc,EAAE,yBAAyB,CAAC,CAAC;IAC3F,oBAAoB,CAAC,KAAK,EAAE,aAAa,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE;QACnF,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,SAAS,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAEtF,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,EAAE,4BAA4B,CAAC,CAAC;IACpG,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE;QACrG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,SAAS,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrC,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,MAAM,0BAA0B,GAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IAC9E,oBAAoB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAqB,CAAC,CAAC;AACzF,CAAC,CAAC;AAEF,MAAM,yBAAyB,GAAG;;;;;;;;;;;EAWhC,CAAC;AAEH,MAAM,4BAA4B,GAAG;;;;;;;;;;;EAWnC,CAAC"}
1
+ {"version":3,"file":"glBloomEffect.js","sourceRoot":"","sources":["../src/glBloomEffect.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,14 @@
1
- import type { BlurEffect, GlRenderEffectRunner, GlRenderState, GlRenderTarget } from '@flighthq/types/contract';
1
+ import type { BlurEffect, GlRenderEffectRunner, GlRenderState, GlRenderTarget, RenderTexture } from '@flighthq/types/contract';
2
2
  export declare function applyBlurEffectToGl(state: GlRenderState, source: Readonly<GlRenderTarget>, dest: Readonly<GlRenderTarget>, temp: Readonly<GlRenderTarget>, effect: Readonly<BlurEffect>): void;
3
+ export declare function applyBlurEffectToGlRenderTextures(state: GlRenderState, source: Readonly<RenderTexture>, dest: RenderTexture, temp: RenderTexture, effect: Readonly<BlurEffect>): boolean;
3
4
  export declare function applyGaussianBlurToGl(state: GlRenderState, source: Readonly<GlRenderTarget>, dest: Readonly<GlRenderTarget>, temp: Readonly<GlRenderTarget>, options: Readonly<{
4
5
  blurX?: number;
5
6
  blurY?: number;
6
7
  }>): void;
8
+ export declare function applyGaussianBlurToGlRenderTextures(state: GlRenderState, source: Readonly<RenderTexture>, dest: RenderTexture, temp: RenderTexture, options: Readonly<{
9
+ blurX?: number;
10
+ blurY?: number;
11
+ }>): boolean;
7
12
  export declare const defaultGlBlurEffectRunner: GlRenderEffectRunner;
13
+ export declare function registerGlBlurEffect(state: GlRenderState): void;
8
14
  //# sourceMappingURL=glBlurEffect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"glBlurEffect.d.ts","sourceRoot":"","sources":["../src/glBlurEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAYhH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,GAC3B,IAAI,CAEN;AAMD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,OAAO,EAAE,QAAQ,CAAC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GACpD,IAAI,CAON;AAED,eAAO,MAAM,yBAAyB,EAAE,oBAKvC,CAAC"}
1
+ {"version":3,"file":"glBlurEffect.d.ts","sourceRoot":"","sources":["../src/glBlurEffect.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,UAAU,EACV,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,aAAa,EACd,MAAM,0BAA0B,CAAC;AAalC,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,GAC3B,IAAI,CAEN;AAID,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC/B,IAAI,EAAE,aAAa,EACnB,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,GAC3B,OAAO,CAET;AAMD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,OAAO,EAAE,QAAQ,CAAC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GACpD,IAAI,CAON;AAKD,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC/B,IAAI,EAAE,aAAa,EACnB,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,QAAQ,CAAC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GACpD,OAAO,CAcT;AAED,eAAO,MAAM,yBAAyB,EAAE,oBAKvC,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAE/D"}
@@ -1,19 +1,25 @@
1
- import { acquireGlRenderTarget, drawGlFullscreenPass, releaseGlRenderTarget } from '@flighthq/render-gl/contract';
1
+ import { acquireGlRenderTarget, drawGlFullscreenPass, getGlRenderTextureTarget, releaseGlRenderTarget, withGlRenderState, writeGlRenderTextureTarget, } from '@flighthq/render-gl/contract';
2
2
  import { getGlEffectProgram, getGlEffectUniformLocation } from './glEffectProgramCache';
3
+ import { registerGlRenderEffect } from './glRenderEffectRegistry';
3
4
  // Plain separable Gaussian blur: two axis passes (source → temp horizontally, temp → dest vertically),
4
5
  // each a single weighted fullscreen pass with radius ⌈3σ⌉. `blurX`/`blurY` are the Gaussian standard
5
6
  // deviations (CSS `blur(Xpx)` uses sigma = X), so this matches the CSS and surface Gaussian references.
6
7
  // The effects-owned blur primitive — the shared gaussian pass BloomEffect and the plain BlurEffect both
7
8
  // use, so the effects backend owns its blur outright rather than delegating to a filters backend.
8
- // Applies a `BlurEffect` descriptor to `source`, writing to `dest`. `temp` is a ping-pong scratch
9
- // target distinct from both `source` and `dest`.
9
+ // Applies a `BlurEffect` descriptor to `source`, compositing into `dest`. Neither `dest` nor the
10
+ // distinct ping-pong `temp` target is cleared by this entry point.
10
11
  export function applyBlurEffectToGl(state, source, dest, temp, effect) {
11
12
  applyGaussianBlurToGl(state, source, dest, temp, { blurX: effect.blurX, blurY: effect.blurY });
12
13
  }
13
- // Applies a faithful separable Gaussian blur to `source`, writing to `dest`. `blurX`/`blurY` are the
14
+ // RenderTexture-facing BlurEffect apply. It composites and never clears; clear reused `dest` and
15
+ // `temp` first with `clearGlRenderTexture` when each frame should replace the previous result.
16
+ export function applyBlurEffectToGlRenderTextures(state, source, dest, temp, effect) {
17
+ return applyGaussianBlurToGlRenderTextures(state, source, dest, temp, effect);
18
+ }
19
+ // Applies a faithful separable Gaussian blur to `source`, compositing into `dest`. `blurX`/`blurY` are the
14
20
  // Gaussian standard deviations in pixels (default 4). Runs two unconditional separable passes,
15
- // source → temp (X) then temp → dest (Y); a zero-radius axis copies through unchanged, so the result
16
- // always lands in `dest` without a separate blit. `temp` is a ping-pong scratch distinct from both.
21
+ // source → temp (X) then temp → dest (Y); neither destination is cleared. `temp` is a ping-pong
22
+ // scratch distinct from both.
17
23
  export function applyGaussianBlurToGl(state, source, dest, temp, options) {
18
24
  const sigmaX = options.blurX ?? 4;
19
25
  const sigmaY = options.blurY ?? 4;
@@ -22,12 +28,34 @@ export function applyGaussianBlurToGl(state, source, dest, temp, options) {
22
28
  applyGlGaussianBlurPass(state, source, temp, sigmaX, radiusX, 1, 0);
23
29
  applyGlGaussianBlurPass(state, temp, dest, sigmaY, radiusY, 0, 1);
24
30
  }
31
+ // RenderTexture-facing target-to-target apply. Both passes composite and never clear; callers reusing
32
+ // `dest` or `temp` across frames must first clear them with `clearGlRenderTexture`. The hidden
33
+ // GlRenderTargets never leave this backend wrapper; success publishes both writes.
34
+ export function applyGaussianBlurToGlRenderTextures(state, source, dest, temp, options) {
35
+ if (source === dest || source === temp || dest === temp) {
36
+ throw new Error('applyGaussianBlurToGlRenderTextures: source, destination, and scratch must be distinct');
37
+ }
38
+ const sourceTarget = getGlRenderTextureTarget(state, source);
39
+ if (sourceTarget === null)
40
+ return false;
41
+ withGlRenderState(state, () => {
42
+ writeGlRenderTextureTarget(state, temp, (tempTarget) => {
43
+ writeGlRenderTextureTarget(state, dest, (destTarget) => {
44
+ applyGaussianBlurToGl(state, sourceTarget, destTarget, tempTarget, options);
45
+ });
46
+ });
47
+ });
48
+ return true;
49
+ }
25
50
  export const defaultGlBlurEffectRunner = (ctx, effect) => {
26
51
  const descriptor = { width: ctx.source.width, height: ctx.source.height, format: ctx.source.format };
27
52
  const temp = acquireGlRenderTarget(ctx.state, ctx.pool, descriptor);
28
53
  applyBlurEffectToGl(ctx.state, ctx.source, ctx.dest, temp, effect);
29
54
  releaseGlRenderTarget(ctx.pool, temp);
30
55
  };
56
+ export function registerGlBlurEffect(state) {
57
+ registerGlRenderEffect(state, 'BlurEffect', defaultGlBlurEffectRunner);
58
+ }
31
59
  function applyGlGaussianBlurPass(state, source, dest, sigma, radius, dirX, dirY) {
32
60
  const program = getGlEffectProgram(state, 'blur.gaussian', GAUSSIAN_BLUR_FRAGMENT_SRC);
33
61
  drawGlFullscreenPass(state, program, [source.texture], dest, (gl, p) => {
@@ -1 +1 @@
1
- {"version":3,"file":"glBlurEffect.js","sourceRoot":"","sources":["../src/glBlurEffect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"glBlurEffect.js","sourceRoot":"","sources":["../src/glBlurEffect.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { BokehDepthOfFieldEffect, GlRenderEffectRunner, GlRenderState, GlRenderTarget } from '@flighthq/types/contract';
2
2
  export declare function applyBokehDepthOfFieldEffectToGl(state: GlRenderState, source: Readonly<GlRenderTarget>, dest: Readonly<GlRenderTarget>, depthTexture: WebGLTexture | null, effect: Readonly<BokehDepthOfFieldEffect>): void;
3
3
  export declare const defaultGlBokehDepthOfFieldEffectRunner: GlRenderEffectRunner;
4
+ export declare function registerGlBokehDepthOfFieldEffect(state: GlRenderState): void;
4
5
  //# sourceMappingURL=glBokehDepthOfFieldEffect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"glBokehDepthOfFieldEffect.d.ts","sourceRoot":"","sources":["../src/glBokehDepthOfFieldEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,uBAAuB,EACvB,oBAAoB,EACpB,aAAa,EACb,cAAc,EACf,MAAM,0BAA0B,CAAC;AAQlC,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,MAAM,EAAE,QAAQ,CAAC,uBAAuB,CAAC,GACxC,IAAI,CAaN;AAED,eAAO,MAAM,sCAAsC,EAAE,oBAQpD,CAAC"}
1
+ {"version":3,"file":"glBokehDepthOfFieldEffect.d.ts","sourceRoot":"","sources":["../src/glBokehDepthOfFieldEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,uBAAuB,EACvB,oBAAoB,EACpB,aAAa,EACb,cAAc,EACf,MAAM,0BAA0B,CAAC;AASlC,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,MAAM,EAAE,QAAQ,CAAC,uBAAuB,CAAC,GACxC,IAAI,CAaN;AAED,eAAO,MAAM,sCAAsC,EAAE,oBAQpD,CAAC;AAEF,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAE5E"}
@@ -1,5 +1,6 @@
1
1
  import { drawGlFullscreenPass } from '@flighthq/render-gl/contract';
2
2
  import { getGlEffectProgram } from './glEffectProgramCache';
3
+ import { registerGlRenderEffect } from './glRenderEffectRegistry';
3
4
  // Bokeh depth-of-field: a disc-shaped blur. When the scene supplied a sampleable depth texture
4
5
  // (ctx.sceneDepthTexture), it computes a per-pixel circle of confusion from focusDistance/focusRange and
5
6
  // scales the disc radius by it (the real DoF). When depth is absent it falls back to a uniform disc blur
@@ -21,6 +22,9 @@ export function applyBokehDepthOfFieldEffectToGl(state, source, dest, depthTextu
21
22
  export const defaultGlBokehDepthOfFieldEffectRunner = (ctx, effect) => {
22
23
  applyBokehDepthOfFieldEffectToGl(ctx.state, ctx.source, ctx.dest, ctx.sceneDepthTexture, effect);
23
24
  };
25
+ export function registerGlBokehDepthOfFieldEffect(state) {
26
+ registerGlRenderEffect(state, 'BokehDepthOfFieldEffect', defaultGlBokehDepthOfFieldEffectRunner);
27
+ }
24
28
  const BOKEH_DOF_FRAGMENT_SRC = `#version 300 es
25
29
  precision highp float;
26
30
  in vec2 v_texCoord;
@@ -1 +1 @@
1
- {"version":3,"file":"glBokehDepthOfFieldEffect.js","sourceRoot":"","sources":["../src/glBokehDepthOfFieldEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAQpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,+FAA+F;AAC/F,yGAAyG;AACzG,yGAAyG;AACzG,6FAA6F;AAC7F,MAAM,UAAU,gCAAgC,CAC9C,KAAoB,EACpB,MAAgC,EAChC,IAA8B,EAC9B,YAAiC,EACjC,MAAyC;IAEzC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;IACpC,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,GAAG,CAAC;IAClD,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,GAAG,CAAC;IAC5C,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,eAAe,EAAE,sBAAsB,CAAC,CAAC;IACnF,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChF,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;QAC3D,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;QACrE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5F,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,iBAAiB,CAAC,EAAE,aAAa,CAAC,CAAC;QACjF,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,UAAU,CAAC,CAAC;QAC3E,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,sCAAsC,GAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IAC1F,gCAAgC,CAC9B,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,MAAM,EACV,GAAG,CAAC,IAAI,EACR,GAAG,CAAC,iBAAiB,EACrB,MAAiC,CAClC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8B7B,CAAC"}
1
+ {"version":3,"file":"glBokehDepthOfFieldEffect.js","sourceRoot":"","sources":["../src/glBokehDepthOfFieldEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAQpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,+FAA+F;AAC/F,yGAAyG;AACzG,yGAAyG;AACzG,6FAA6F;AAC7F,MAAM,UAAU,gCAAgC,CAC9C,KAAoB,EACpB,MAAgC,EAChC,IAA8B,EAC9B,YAAiC,EACjC,MAAyC;IAEzC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;IACpC,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,GAAG,CAAC;IAClD,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,GAAG,CAAC;IAC5C,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,eAAe,EAAE,sBAAsB,CAAC,CAAC;IACnF,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChF,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;QAC3D,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;QACrE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5F,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,iBAAiB,CAAC,EAAE,aAAa,CAAC,CAAC;QACjF,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,UAAU,CAAC,CAAC;QAC3E,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,sCAAsC,GAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IAC1F,gCAAgC,CAC9B,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,MAAM,EACV,GAAG,CAAC,IAAI,EACR,GAAG,CAAC,iBAAiB,EACrB,MAAiC,CAClC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,UAAU,iCAAiC,CAAC,KAAoB;IACpE,sBAAsB,CAAC,KAAK,EAAE,yBAAyB,EAAE,sCAAsC,CAAC,CAAC;AACnG,CAAC;AAED,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8B7B,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { CameraMotionBlurEffect, GlRenderEffectRunner, GlRenderState, GlRenderTarget } from '@flighthq/types/contract';
2
2
  export declare function applyCameraMotionBlurEffectToGl(state: GlRenderState, source: Readonly<GlRenderTarget>, dest: Readonly<GlRenderTarget>, effect: Readonly<CameraMotionBlurEffect>): void;
3
3
  export declare const defaultGlCameraMotionBlurEffectRunner: GlRenderEffectRunner;
4
+ export declare function registerGlCameraMotionBlurEffect(state: GlRenderState): void;
4
5
  //# sourceMappingURL=glCameraMotionBlurEffect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"glCameraMotionBlurEffect.d.ts","sourceRoot":"","sources":["../src/glCameraMotionBlurEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACpB,aAAa,EACb,cAAc,EACf,MAAM,0BAA0B,CAAC;AAQlC,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,MAAM,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GACvC,IAAI,CAQN;AAED,eAAO,MAAM,qCAAqC,EAAE,oBAEnD,CAAC"}
1
+ {"version":3,"file":"glCameraMotionBlurEffect.d.ts","sourceRoot":"","sources":["../src/glCameraMotionBlurEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACpB,aAAa,EACb,cAAc,EACf,MAAM,0BAA0B,CAAC;AASlC,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,MAAM,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GACvC,IAAI,CAQN;AAED,eAAO,MAAM,qCAAqC,EAAE,oBAEnD,CAAC;AAEF,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAE3E"}
@@ -1,5 +1,6 @@
1
1
  import { drawGlFullscreenPass } from '@flighthq/render-gl/contract';
2
2
  import { getGlEffectProgram } from './glEffectProgramCache';
3
+ import { registerGlRenderEffect } from './glRenderEffectRegistry';
3
4
  // Camera3D motion blur: a real single-pass radial/zoom blur scaled by intensity — smears each sample
4
5
  // toward the screen center. A legitimate 2D effect on its own. Two richer variants are 2D-native
5
6
  // follow-ups, not 3D-gated: feeding the actual camera/root transform delta as the smear vector (global
@@ -16,6 +17,9 @@ export function applyCameraMotionBlurEffectToGl(state, source, dest, effect) {
16
17
  export const defaultGlCameraMotionBlurEffectRunner = (ctx, effect) => {
17
18
  applyCameraMotionBlurEffectToGl(ctx.state, ctx.source, ctx.dest, effect);
18
19
  };
20
+ export function registerGlCameraMotionBlurEffect(state) {
21
+ registerGlRenderEffect(state, 'CameraMotionBlurEffect', defaultGlCameraMotionBlurEffectRunner);
22
+ }
19
23
  const CAMERA_MOTION_BLUR_FRAGMENT_SRC = `#version 300 es
20
24
  precision highp float;
21
25
  in vec2 v_texCoord;
@@ -1 +1 @@
1
- {"version":3,"file":"glCameraMotionBlurEffect.js","sourceRoot":"","sources":["../src/glCameraMotionBlurEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAQpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,qGAAqG;AACrG,iGAAiG;AACjG,uGAAuG;AACvG,0GAA0G;AAC1G,MAAM,UAAU,+BAA+B,CAC7C,KAAoB,EACpB,MAAgC,EAChC,IAA8B,EAC9B,MAAwC;IAExC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,GAAG,CAAC;IAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,EAAE,+BAA+B,CAAC,CAAC;IAC/F,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,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,qCAAqC,GAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACzF,+BAA+B,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAgC,CAAC,CAAC;AACrG,CAAC,CAAC;AAEF,MAAM,+BAA+B,GAAG;;;;;;;;;;;;;;;;;;;;;EAqBtC,CAAC"}
1
+ {"version":3,"file":"glCameraMotionBlurEffect.js","sourceRoot":"","sources":["../src/glCameraMotionBlurEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAQpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,qGAAqG;AACrG,iGAAiG;AACjG,uGAAuG;AACvG,0GAA0G;AAC1G,MAAM,UAAU,+BAA+B,CAC7C,KAAoB,EACpB,MAAgC,EAChC,IAA8B,EAC9B,MAAwC;IAExC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,GAAG,CAAC;IAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,EAAE,+BAA+B,CAAC,CAAC;IAC/F,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,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,qCAAqC,GAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;IACzF,+BAA+B,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAgC,CAAC,CAAC;AACrG,CAAC,CAAC;AAEF,MAAM,UAAU,gCAAgC,CAAC,KAAoB;IACnE,sBAAsB,CAAC,KAAK,EAAE,wBAAwB,EAAE,qCAAqC,CAAC,CAAC;AACjG,CAAC;AAED,MAAM,+BAA+B,GAAG;;;;;;;;;;;;;;;;;;;;;EAqBtC,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { ChromaticAberrationEffect, GlRenderEffectRunner, GlRenderState, GlRenderTarget } from '@flighthq/types/contract';
2
2
  export declare function applyChromaticAberrationEffectToGl(state: GlRenderState, source: Readonly<GlRenderTarget>, dest: Readonly<GlRenderTarget>, effect: Readonly<ChromaticAberrationEffect>): void;
3
3
  export declare const defaultGlChromaticAberrationEffectRunner: GlRenderEffectRunner;
4
+ export declare function registerGlChromaticAberrationEffect(state: GlRenderState): void;
4
5
  //# sourceMappingURL=glChromaticAberrationEffect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"glChromaticAberrationEffect.d.ts","sourceRoot":"","sources":["../src/glChromaticAberrationEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,yBAAyB,EACzB,oBAAoB,EACpB,aAAa,EACb,cAAc,EACf,MAAM,0BAA0B,CAAC;AAOlC,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,MAAM,EAAE,QAAQ,CAAC,yBAAyB,CAAC,GAC1C,IAAI,CAQN;AAED,eAAO,MAAM,wCAAwC,EAAE,oBAEtD,CAAC"}
1
+ {"version":3,"file":"glChromaticAberrationEffect.d.ts","sourceRoot":"","sources":["../src/glChromaticAberrationEffect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,yBAAyB,EACzB,oBAAoB,EACpB,aAAa,EACb,cAAc,EACf,MAAM,0BAA0B,CAAC;AAQlC,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC9B,MAAM,EAAE,QAAQ,CAAC,yBAAyB,CAAC,GAC1C,IAAI,CAQN;AAED,eAAO,MAAM,wCAAwC,EAAE,oBAEtD,CAAC;AAEF,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAE9E"}
@@ -1,5 +1,6 @@
1
1
  import { drawGlFullscreenPass } from '@flighthq/render-gl/contract';
2
2
  import { getGlEffectProgram } from './glEffectProgramCache';
3
+ import { registerGlRenderEffect } from './glRenderEffectRegistry';
3
4
  // Chromatic aberration: sample the R/G/B channels at progressively larger offsets so colors fringe
4
5
  // apart. When radial, the offset scales with distance from the optical center (true lens behavior);
5
6
  // otherwise it is a uniform horizontal split.
@@ -15,6 +16,9 @@ export function applyChromaticAberrationEffectToGl(state, source, dest, effect)
15
16
  export const defaultGlChromaticAberrationEffectRunner = (ctx, effect) => {
16
17
  applyChromaticAberrationEffectToGl(ctx.state, ctx.source, ctx.dest, effect);
17
18
  };
19
+ export function registerGlChromaticAberrationEffect(state) {
20
+ registerGlRenderEffect(state, 'ChromaticAberrationEffect', defaultGlChromaticAberrationEffectRunner);
21
+ }
18
22
  const CHROMATIC_ABERRATION_FRAGMENT_SRC = `#version 300 es
19
23
  precision highp float;
20
24
  in vec2 v_texCoord;