@codexo/exojs 0.6.12 → 0.7.12

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 (512) hide show
  1. package/CHANGELOG.md +1424 -0
  2. package/dist/esm/animation/Tween.d.ts +60 -1
  3. package/dist/esm/animation/Tween.js +60 -1
  4. package/dist/esm/animation/Tween.js.map +1 -1
  5. package/dist/esm/animation/TweenManager.d.ts +10 -0
  6. package/dist/esm/animation/TweenManager.js +10 -0
  7. package/dist/esm/animation/TweenManager.js.map +1 -1
  8. package/dist/esm/animation/types.d.ts +15 -0
  9. package/dist/esm/animation/types.js +6 -0
  10. package/dist/esm/animation/types.js.map +1 -1
  11. package/dist/esm/audio/AbstractMedia.d.ts +29 -0
  12. package/dist/esm/audio/AbstractMedia.js +76 -0
  13. package/dist/esm/audio/AbstractMedia.js.map +1 -1
  14. package/dist/esm/audio/AudioAnalyser.d.ts +83 -23
  15. package/dist/esm/audio/AudioAnalyser.js +277 -57
  16. package/dist/esm/audio/AudioAnalyser.js.map +1 -1
  17. package/dist/esm/audio/AudioBus.d.ts +82 -0
  18. package/dist/esm/audio/AudioBus.js +255 -0
  19. package/dist/esm/audio/AudioBus.js.map +1 -0
  20. package/dist/esm/audio/AudioFilter.d.ts +16 -0
  21. package/dist/esm/audio/AudioFilter.js +13 -0
  22. package/dist/esm/audio/AudioFilter.js.map +1 -0
  23. package/dist/esm/audio/AudioListener.d.ts +39 -0
  24. package/dist/esm/audio/AudioListener.js +97 -0
  25. package/dist/esm/audio/AudioListener.js.map +1 -0
  26. package/dist/esm/audio/AudioManager.d.ts +68 -0
  27. package/dist/esm/audio/AudioManager.js +139 -0
  28. package/dist/esm/audio/AudioManager.js.map +1 -0
  29. package/dist/esm/audio/BeatDetector.d.ts +142 -0
  30. package/dist/esm/audio/BeatDetector.js +957 -0
  31. package/dist/esm/audio/BeatDetector.js.map +1 -0
  32. package/dist/esm/audio/Envelope.d.ts +44 -0
  33. package/dist/esm/audio/Envelope.js +60 -0
  34. package/dist/esm/audio/Envelope.js.map +1 -0
  35. package/dist/esm/audio/Media.d.ts +11 -0
  36. package/dist/esm/audio/Music.d.ts +20 -0
  37. package/dist/esm/audio/Music.js +45 -4
  38. package/dist/esm/audio/Music.js.map +1 -1
  39. package/dist/esm/audio/OscillatorSound.d.ts +98 -0
  40. package/dist/esm/audio/OscillatorSound.js +342 -0
  41. package/dist/esm/audio/OscillatorSound.js.map +1 -0
  42. package/dist/esm/audio/Sound.d.ts +119 -9
  43. package/dist/esm/audio/Sound.js +301 -117
  44. package/dist/esm/audio/Sound.js.map +1 -1
  45. package/dist/esm/audio/audio-context.d.ts +48 -0
  46. package/dist/esm/audio/audio-context.js +48 -5
  47. package/dist/esm/audio/audio-context.js.map +1 -1
  48. package/dist/esm/audio/crossFade.d.ts +19 -0
  49. package/dist/esm/audio/crossFade.js +26 -0
  50. package/dist/esm/audio/crossFade.js.map +1 -0
  51. package/dist/esm/audio/dsp/fft.d.ts +22 -0
  52. package/dist/esm/audio/dsp/mel.d.ts +43 -0
  53. package/dist/esm/audio/dsp/tempogram.d.ts +51 -0
  54. package/dist/esm/audio/filters/ChorusFilter.d.ts +52 -0
  55. package/dist/esm/audio/filters/ChorusFilter.js +143 -0
  56. package/dist/esm/audio/filters/ChorusFilter.js.map +1 -0
  57. package/dist/esm/audio/filters/CompressorFilter.d.ts +43 -0
  58. package/dist/esm/audio/filters/CompressorFilter.js +108 -0
  59. package/dist/esm/audio/filters/CompressorFilter.js.map +1 -0
  60. package/dist/esm/audio/filters/DelayFilter.d.ts +34 -0
  61. package/dist/esm/audio/filters/DelayFilter.js +110 -0
  62. package/dist/esm/audio/filters/DelayFilter.js.map +1 -0
  63. package/dist/esm/audio/filters/DuckingFilter.d.ts +44 -0
  64. package/dist/esm/audio/filters/DuckingFilter.js +164 -0
  65. package/dist/esm/audio/filters/DuckingFilter.js.map +1 -0
  66. package/dist/esm/audio/filters/EqualizerFilter.d.ts +49 -0
  67. package/dist/esm/audio/filters/EqualizerFilter.js +134 -0
  68. package/dist/esm/audio/filters/EqualizerFilter.js.map +1 -0
  69. package/dist/esm/audio/filters/GranularFilter.d.ts +62 -0
  70. package/dist/esm/audio/filters/GranularFilter.js +176 -0
  71. package/dist/esm/audio/filters/GranularFilter.js.map +1 -0
  72. package/dist/esm/audio/filters/HighpassFilter.d.ts +29 -0
  73. package/dist/esm/audio/filters/HighpassFilter.js +71 -0
  74. package/dist/esm/audio/filters/HighpassFilter.js.map +1 -0
  75. package/dist/esm/audio/filters/LowpassFilter.d.ts +29 -0
  76. package/dist/esm/audio/filters/LowpassFilter.js +71 -0
  77. package/dist/esm/audio/filters/LowpassFilter.js.map +1 -0
  78. package/dist/esm/audio/filters/PitchShiftFilter.d.ts +44 -0
  79. package/dist/esm/audio/filters/PitchShiftFilter.js +132 -0
  80. package/dist/esm/audio/filters/PitchShiftFilter.js.map +1 -0
  81. package/dist/esm/audio/filters/ReverbFilter.d.ts +36 -0
  82. package/dist/esm/audio/filters/ReverbFilter.js +118 -0
  83. package/dist/esm/audio/filters/ReverbFilter.js.map +1 -0
  84. package/dist/esm/audio/filters/VocoderFilter.d.ts +49 -0
  85. package/dist/esm/audio/filters/VocoderFilter.js +174 -0
  86. package/dist/esm/audio/filters/VocoderFilter.js.map +1 -0
  87. package/dist/esm/audio/filters/WorkletFilter.d.ts +51 -0
  88. package/dist/esm/audio/filters/WorkletFilter.js +106 -0
  89. package/dist/esm/audio/filters/WorkletFilter.js.map +1 -0
  90. package/dist/esm/audio/filters/index.d.ts +12 -0
  91. package/dist/esm/audio/index.d.ts +15 -1
  92. package/dist/esm/audio/worklet/registerWorklet.d.ts +10 -0
  93. package/dist/esm/audio/worklet/registerWorklet.js +44 -0
  94. package/dist/esm/audio/worklet/registerWorklet.js.map +1 -0
  95. package/dist/esm/core/Application.d.ts +82 -0
  96. package/dist/esm/core/Application.js +137 -2
  97. package/dist/esm/core/Application.js.map +1 -1
  98. package/dist/esm/core/Bounds.d.ts +23 -0
  99. package/dist/esm/core/Bounds.js +23 -0
  100. package/dist/esm/core/Bounds.js.map +1 -1
  101. package/dist/esm/core/Clock.d.ts +21 -0
  102. package/dist/esm/core/Clock.js +21 -0
  103. package/dist/esm/core/Clock.js.map +1 -1
  104. package/dist/esm/core/Color.d.ts +35 -0
  105. package/dist/esm/core/Color.js +35 -0
  106. package/dist/esm/core/Color.js.map +1 -1
  107. package/dist/esm/core/Scene.d.ts +46 -0
  108. package/dist/esm/core/Scene.js +27 -0
  109. package/dist/esm/core/Scene.js.map +1 -1
  110. package/dist/esm/core/SceneManager.d.ts +62 -0
  111. package/dist/esm/core/SceneManager.js +49 -0
  112. package/dist/esm/core/SceneManager.js.map +1 -1
  113. package/dist/esm/core/SceneNode.d.ts +40 -1
  114. package/dist/esm/core/SceneNode.js +75 -6
  115. package/dist/esm/core/SceneNode.js.map +1 -1
  116. package/dist/esm/core/Signal.d.ts +44 -0
  117. package/dist/esm/core/Signal.js +39 -0
  118. package/dist/esm/core/Signal.js.map +1 -1
  119. package/dist/esm/core/Time.d.ts +21 -0
  120. package/dist/esm/core/Time.js +22 -1
  121. package/dist/esm/core/Time.js.map +1 -1
  122. package/dist/esm/core/Timer.d.ts +7 -0
  123. package/dist/esm/core/Timer.js +7 -0
  124. package/dist/esm/core/Timer.js.map +1 -1
  125. package/dist/esm/core/capabilities.d.ts +12 -0
  126. package/dist/esm/core/capabilities.js +12 -0
  127. package/dist/esm/core/capabilities.js.map +1 -1
  128. package/dist/esm/core/index.d.ts +0 -1
  129. package/dist/esm/core/types.d.ts +37 -0
  130. package/dist/esm/core/utils.d.ts +48 -0
  131. package/dist/esm/core/utils.js +48 -0
  132. package/dist/esm/core/utils.js.map +1 -1
  133. package/dist/esm/debug/BoundingBoxesLayer.d.ts +26 -0
  134. package/dist/esm/debug/BoundingBoxesLayer.js +136 -0
  135. package/dist/esm/debug/BoundingBoxesLayer.js.map +1 -0
  136. package/dist/esm/debug/DebugLayer.d.ts +42 -0
  137. package/dist/esm/debug/DebugLayer.js +34 -0
  138. package/dist/esm/debug/DebugLayer.js.map +1 -0
  139. package/dist/esm/debug/DebugOverlay.d.ts +59 -0
  140. package/dist/esm/debug/DebugOverlay.js +123 -0
  141. package/dist/esm/debug/DebugOverlay.js.map +1 -0
  142. package/dist/esm/debug/HitTestLayer.d.ts +32 -0
  143. package/dist/esm/debug/HitTestLayer.js +118 -0
  144. package/dist/esm/debug/HitTestLayer.js.map +1 -0
  145. package/dist/esm/debug/PerformanceLayer.d.ts +37 -0
  146. package/dist/esm/debug/PerformanceLayer.js +193 -0
  147. package/dist/esm/debug/PerformanceLayer.js.map +1 -0
  148. package/dist/esm/debug/PointerStackLayer.d.ts +31 -0
  149. package/dist/esm/debug/PointerStackLayer.js +160 -0
  150. package/dist/esm/debug/PointerStackLayer.js.map +1 -0
  151. package/dist/esm/debug/index.d.ts +6 -0
  152. package/dist/esm/debug/index.js +7 -0
  153. package/dist/esm/debug/index.js.map +1 -0
  154. package/dist/esm/index.js +30 -4
  155. package/dist/esm/index.js.map +1 -1
  156. package/dist/esm/input/ArcadeStickGamepadMapping.d.ts +7 -0
  157. package/dist/esm/input/ArcadeStickGamepadMapping.js +7 -0
  158. package/dist/esm/input/ArcadeStickGamepadMapping.js.map +1 -1
  159. package/dist/esm/input/GameCubeGamepadMapping.d.ts +9 -0
  160. package/dist/esm/input/GameCubeGamepadMapping.js +9 -0
  161. package/dist/esm/input/GameCubeGamepadMapping.js.map +1 -1
  162. package/dist/esm/input/Gamepad.d.ts +48 -0
  163. package/dist/esm/input/Gamepad.js +43 -0
  164. package/dist/esm/input/Gamepad.js.map +1 -1
  165. package/dist/esm/input/GamepadChannels.d.ts +8 -0
  166. package/dist/esm/input/GamepadChannels.js +8 -0
  167. package/dist/esm/input/GamepadChannels.js.map +1 -1
  168. package/dist/esm/input/GamepadControl.d.ts +18 -0
  169. package/dist/esm/input/GamepadControl.js +13 -0
  170. package/dist/esm/input/GamepadControl.js.map +1 -1
  171. package/dist/esm/input/GamepadDefinitions.d.ts +64 -1
  172. package/dist/esm/input/GamepadDefinitions.js +40 -1
  173. package/dist/esm/input/GamepadDefinitions.js.map +1 -1
  174. package/dist/esm/input/GamepadMapping.d.ts +32 -2
  175. package/dist/esm/input/GamepadMapping.js +24 -0
  176. package/dist/esm/input/GamepadMapping.js.map +1 -1
  177. package/dist/esm/input/GamepadPromptLayouts.d.ts +32 -1
  178. package/dist/esm/input/GamepadPromptLayouts.js +25 -1
  179. package/dist/esm/input/GamepadPromptLayouts.js.map +1 -1
  180. package/dist/esm/input/GenericDualAnalogGamepadMapping.d.ts +10 -0
  181. package/dist/esm/input/GenericDualAnalogGamepadMapping.js +10 -0
  182. package/dist/esm/input/GenericDualAnalogGamepadMapping.js.map +1 -1
  183. package/dist/esm/input/GestureRecognizer.d.ts +11 -2
  184. package/dist/esm/input/GestureRecognizer.js +11 -2
  185. package/dist/esm/input/GestureRecognizer.js.map +1 -1
  186. package/dist/esm/input/Input.d.ts +24 -0
  187. package/dist/esm/input/Input.js +22 -0
  188. package/dist/esm/input/Input.js.map +1 -1
  189. package/dist/esm/input/InputManager.d.ts +43 -0
  190. package/dist/esm/input/InputManager.js +68 -5
  191. package/dist/esm/input/InputManager.js.map +1 -1
  192. package/dist/esm/input/InteractionEvent.d.ts +31 -0
  193. package/dist/esm/input/InteractionEvent.js +37 -0
  194. package/dist/esm/input/InteractionEvent.js.map +1 -0
  195. package/dist/esm/input/InteractionManager.d.ts +163 -0
  196. package/dist/esm/input/InteractionManager.js +575 -0
  197. package/dist/esm/input/InteractionManager.js.map +1 -0
  198. package/dist/esm/input/JoyConLeftGamepadMapping.d.ts +9 -0
  199. package/dist/esm/input/JoyConLeftGamepadMapping.js +9 -0
  200. package/dist/esm/input/JoyConLeftGamepadMapping.js.map +1 -1
  201. package/dist/esm/input/JoyConRightGamepadMapping.d.ts +9 -0
  202. package/dist/esm/input/JoyConRightGamepadMapping.js +9 -0
  203. package/dist/esm/input/JoyConRightGamepadMapping.js.map +1 -1
  204. package/dist/esm/input/PlayStationGamepadMapping.d.ts +8 -0
  205. package/dist/esm/input/PlayStationGamepadMapping.js +8 -0
  206. package/dist/esm/input/PlayStationGamepadMapping.js.map +1 -1
  207. package/dist/esm/input/Pointer.d.ts +22 -0
  208. package/dist/esm/input/Pointer.js +22 -0
  209. package/dist/esm/input/Pointer.js.map +1 -1
  210. package/dist/esm/input/SteamControllerGamepadMapping.d.ts +8 -0
  211. package/dist/esm/input/SteamControllerGamepadMapping.js +8 -0
  212. package/dist/esm/input/SteamControllerGamepadMapping.js.map +1 -1
  213. package/dist/esm/input/SwitchProGamepadMapping.d.ts +9 -0
  214. package/dist/esm/input/SwitchProGamepadMapping.js +9 -0
  215. package/dist/esm/input/SwitchProGamepadMapping.js.map +1 -1
  216. package/dist/esm/input/XboxGamepadMapping.d.ts +8 -0
  217. package/dist/esm/input/XboxGamepadMapping.js +8 -0
  218. package/dist/esm/input/XboxGamepadMapping.js.map +1 -1
  219. package/dist/esm/input/index.d.ts +2 -0
  220. package/dist/esm/input/interaction-hooks.d.ts +34 -0
  221. package/dist/esm/input/interaction-hooks.js +35 -0
  222. package/dist/esm/input/interaction-hooks.js.map +1 -0
  223. package/dist/esm/input/types.d.ts +20 -0
  224. package/dist/esm/input/types.js +20 -0
  225. package/dist/esm/input/types.js.map +1 -1
  226. package/dist/esm/math/AbstractVector.d.ts +83 -0
  227. package/dist/esm/math/AbstractVector.js +83 -0
  228. package/dist/esm/math/AbstractVector.js.map +1 -1
  229. package/dist/esm/math/Circle.d.ts +44 -2
  230. package/dist/esm/math/Circle.js +116 -16
  231. package/dist/esm/math/Circle.js.map +1 -1
  232. package/dist/esm/math/CircleLike.d.ts +1 -0
  233. package/dist/esm/math/Collision.d.ts +39 -0
  234. package/dist/esm/math/Collision.js +5 -0
  235. package/dist/esm/math/Collision.js.map +1 -1
  236. package/dist/esm/math/Ellipse.d.ts +11 -0
  237. package/dist/esm/math/Ellipse.js +18 -2
  238. package/dist/esm/math/Ellipse.js.map +1 -1
  239. package/dist/esm/math/EllipseLike.d.ts +3 -0
  240. package/dist/esm/math/Flags.d.ts +31 -0
  241. package/dist/esm/math/Flags.js +31 -0
  242. package/dist/esm/math/Flags.js.map +1 -1
  243. package/dist/esm/math/Interval.d.ts +15 -0
  244. package/dist/esm/math/Interval.js +16 -1
  245. package/dist/esm/math/Interval.js.map +1 -1
  246. package/dist/esm/math/Line.d.ts +17 -1
  247. package/dist/esm/math/Line.js +17 -1
  248. package/dist/esm/math/Line.js.map +1 -1
  249. package/dist/esm/math/LineLike.d.ts +1 -0
  250. package/dist/esm/math/Matrix.d.ts +44 -3
  251. package/dist/esm/math/Matrix.js +44 -3
  252. package/dist/esm/math/Matrix.js.map +1 -1
  253. package/dist/esm/math/ObservableSize.d.ts +7 -0
  254. package/dist/esm/math/ObservableSize.js +7 -0
  255. package/dist/esm/math/ObservableSize.js.map +1 -1
  256. package/dist/esm/math/ObservableVector.d.ts +11 -2
  257. package/dist/esm/math/ObservableVector.js +13 -2
  258. package/dist/esm/math/ObservableVector.js.map +1 -1
  259. package/dist/esm/math/PointLike.d.ts +1 -0
  260. package/dist/esm/math/PolarVector.d.ts +15 -0
  261. package/dist/esm/math/PolarVector.js +16 -1
  262. package/dist/esm/math/PolarVector.js.map +1 -1
  263. package/dist/esm/math/Polygon.d.ts +35 -1
  264. package/dist/esm/math/Polygon.js +78 -6
  265. package/dist/esm/math/Polygon.js.map +1 -1
  266. package/dist/esm/math/PolygonLike.d.ts +4 -0
  267. package/dist/esm/math/Quadtree.d.ts +84 -0
  268. package/dist/esm/math/Quadtree.js +204 -0
  269. package/dist/esm/math/Quadtree.js.map +1 -0
  270. package/dist/esm/math/Random.d.ts +25 -0
  271. package/dist/esm/math/Random.js +26 -1
  272. package/dist/esm/math/Random.js.map +1 -1
  273. package/dist/esm/math/Rectangle.d.ts +15 -0
  274. package/dist/esm/math/Rectangle.js +17 -2
  275. package/dist/esm/math/Rectangle.js.map +1 -1
  276. package/dist/esm/math/RectangleLike.d.ts +1 -0
  277. package/dist/esm/math/Segment.d.ts +7 -0
  278. package/dist/esm/math/Segment.js +7 -0
  279. package/dist/esm/math/Segment.js.map +1 -1
  280. package/dist/esm/math/ShapeLike.d.ts +6 -0
  281. package/dist/esm/math/Size.d.ts +9 -0
  282. package/dist/esm/math/Size.js +10 -1
  283. package/dist/esm/math/Size.js.map +1 -1
  284. package/dist/esm/math/Vector.d.ts +16 -0
  285. package/dist/esm/math/Vector.js +17 -1
  286. package/dist/esm/math/Vector.js.map +1 -1
  287. package/dist/esm/math/collision-detection.d.ts +47 -1
  288. package/dist/esm/math/collision-detection.js +231 -17
  289. package/dist/esm/math/collision-detection.js.map +1 -1
  290. package/dist/esm/math/collision-primitives.d.ts +23 -0
  291. package/dist/esm/math/collision-primitives.js +23 -0
  292. package/dist/esm/math/collision-primitives.js.map +1 -1
  293. package/dist/esm/math/geometry.d.ts +42 -0
  294. package/dist/esm/math/geometry.js +37 -0
  295. package/dist/esm/math/geometry.js.map +1 -1
  296. package/dist/esm/math/index.d.ts +1 -0
  297. package/dist/esm/math/utils.d.ts +41 -0
  298. package/dist/esm/math/utils.js +41 -0
  299. package/dist/esm/math/utils.js.map +1 -1
  300. package/dist/esm/particles/Particle.d.ts +37 -0
  301. package/dist/esm/particles/Particle.js +37 -0
  302. package/dist/esm/particles/Particle.js.map +1 -1
  303. package/dist/esm/particles/ParticleProperties.d.ts +15 -0
  304. package/dist/esm/particles/ParticleSystem.d.ts +69 -0
  305. package/dist/esm/particles/ParticleSystem.js +70 -0
  306. package/dist/esm/particles/ParticleSystem.js.map +1 -1
  307. package/dist/esm/particles/affectors/ColorAffector.d.ts +13 -0
  308. package/dist/esm/particles/affectors/ColorAffector.js +13 -0
  309. package/dist/esm/particles/affectors/ColorAffector.js.map +1 -1
  310. package/dist/esm/particles/affectors/ForceAffector.d.ts +11 -0
  311. package/dist/esm/particles/affectors/ForceAffector.js +11 -0
  312. package/dist/esm/particles/affectors/ForceAffector.js.map +1 -1
  313. package/dist/esm/particles/affectors/ParticleAffector.d.ts +13 -0
  314. package/dist/esm/particles/affectors/ScaleAffector.d.ts +10 -0
  315. package/dist/esm/particles/affectors/ScaleAffector.js +10 -0
  316. package/dist/esm/particles/affectors/ScaleAffector.js.map +1 -1
  317. package/dist/esm/particles/affectors/TorqueAffector.d.ts +11 -0
  318. package/dist/esm/particles/affectors/TorqueAffector.js +12 -1
  319. package/dist/esm/particles/affectors/TorqueAffector.js.map +1 -1
  320. package/dist/esm/particles/emitters/ParticleEmitter.d.ts +13 -0
  321. package/dist/esm/particles/emitters/ParticleOptions.d.ts +16 -0
  322. package/dist/esm/particles/emitters/ParticleOptions.js +16 -0
  323. package/dist/esm/particles/emitters/ParticleOptions.js.map +1 -1
  324. package/dist/esm/particles/emitters/UniversalEmitter.d.ts +23 -0
  325. package/dist/esm/particles/emitters/UniversalEmitter.js +23 -0
  326. package/dist/esm/particles/emitters/UniversalEmitter.js.map +1 -1
  327. package/dist/esm/rendering/CallbackRenderPass.d.ts +12 -0
  328. package/dist/esm/rendering/CallbackRenderPass.js +12 -0
  329. package/dist/esm/rendering/CallbackRenderPass.js.map +1 -1
  330. package/dist/esm/rendering/Container.d.ts +44 -0
  331. package/dist/esm/rendering/Container.js +62 -0
  332. package/dist/esm/rendering/Container.js.map +1 -1
  333. package/dist/esm/rendering/Drawable.d.ts +22 -0
  334. package/dist/esm/rendering/Drawable.js +22 -0
  335. package/dist/esm/rendering/Drawable.js.map +1 -1
  336. package/dist/esm/rendering/RenderBackend.d.ts +13 -0
  337. package/dist/esm/rendering/RenderBackendType.d.ts +4 -0
  338. package/dist/esm/rendering/RenderBackendType.js +4 -0
  339. package/dist/esm/rendering/RenderBackendType.js.map +1 -1
  340. package/dist/esm/rendering/RenderNode.d.ts +45 -0
  341. package/dist/esm/rendering/RenderNode.js +62 -0
  342. package/dist/esm/rendering/RenderNode.js.map +1 -1
  343. package/dist/esm/rendering/RenderPass.d.ts +8 -0
  344. package/dist/esm/rendering/RenderStats.d.ts +19 -0
  345. package/dist/esm/rendering/RenderStats.js +7 -0
  346. package/dist/esm/rendering/RenderStats.js.map +1 -1
  347. package/dist/esm/rendering/RenderTarget.d.ts +17 -0
  348. package/dist/esm/rendering/RenderTarget.js +17 -0
  349. package/dist/esm/rendering/RenderTarget.js.map +1 -1
  350. package/dist/esm/rendering/RenderTargetPass.d.ts +11 -0
  351. package/dist/esm/rendering/RenderTargetPass.js +7 -0
  352. package/dist/esm/rendering/RenderTargetPass.js.map +1 -1
  353. package/dist/esm/rendering/Renderer.d.ts +15 -0
  354. package/dist/esm/rendering/RendererRegistry.d.ts +7 -0
  355. package/dist/esm/rendering/RendererRegistry.js +7 -0
  356. package/dist/esm/rendering/RendererRegistry.js.map +1 -1
  357. package/dist/esm/rendering/View.d.ts +73 -6
  358. package/dist/esm/rendering/View.js +69 -2
  359. package/dist/esm/rendering/View.js.map +1 -1
  360. package/dist/esm/rendering/filters/BlurFilter.d.ts +9 -0
  361. package/dist/esm/rendering/filters/BlurFilter.js +8 -0
  362. package/dist/esm/rendering/filters/BlurFilter.js.map +1 -1
  363. package/dist/esm/rendering/filters/ColorFilter.d.ts +7 -0
  364. package/dist/esm/rendering/filters/ColorFilter.js +7 -0
  365. package/dist/esm/rendering/filters/ColorFilter.js.map +1 -1
  366. package/dist/esm/rendering/filters/Filter.d.ts +23 -0
  367. package/dist/esm/rendering/filters/Filter.js +20 -0
  368. package/dist/esm/rendering/filters/Filter.js.map +1 -1
  369. package/dist/esm/rendering/filters/WebGl2ShaderFilter.d.ts +114 -0
  370. package/dist/esm/rendering/filters/WebGl2ShaderFilter.js +273 -0
  371. package/dist/esm/rendering/filters/WebGl2ShaderFilter.js.map +1 -0
  372. package/dist/esm/rendering/filters/WebGpuShaderFilter.d.ts +116 -0
  373. package/dist/esm/rendering/filters/WebGpuShaderFilter.js +402 -0
  374. package/dist/esm/rendering/filters/WebGpuShaderFilter.js.map +1 -0
  375. package/dist/esm/rendering/index.d.ts +3 -0
  376. package/dist/esm/rendering/mesh/Mesh.d.ts +2 -0
  377. package/dist/esm/rendering/mesh/Mesh.js +3 -0
  378. package/dist/esm/rendering/mesh/Mesh.js.map +1 -1
  379. package/dist/esm/rendering/primitives/Graphics.d.ts +34 -0
  380. package/dist/esm/rendering/primitives/Graphics.js +34 -0
  381. package/dist/esm/rendering/primitives/Graphics.js.map +1 -1
  382. package/dist/esm/rendering/shader/Shader.d.ts +36 -0
  383. package/dist/esm/rendering/shader/Shader.js +26 -0
  384. package/dist/esm/rendering/shader/Shader.js.map +1 -1
  385. package/dist/esm/rendering/shader/ShaderAttribute.d.ts +13 -0
  386. package/dist/esm/rendering/shader/ShaderAttribute.js +13 -0
  387. package/dist/esm/rendering/shader/ShaderAttribute.js.map +1 -1
  388. package/dist/esm/rendering/shader/ShaderUniform.d.ts +27 -0
  389. package/dist/esm/rendering/shader/ShaderUniform.js +28 -1
  390. package/dist/esm/rendering/shader/ShaderUniform.js.map +1 -1
  391. package/dist/esm/rendering/shader/upgradeFragmentShaderToGl300.d.ts +34 -0
  392. package/dist/esm/rendering/shader/upgradeFragmentShaderToGl300.js +60 -0
  393. package/dist/esm/rendering/shader/upgradeFragmentShaderToGl300.js.map +1 -0
  394. package/dist/esm/rendering/sprite/AnimatedSprite.d.ts +38 -0
  395. package/dist/esm/rendering/sprite/AnimatedSprite.js +36 -0
  396. package/dist/esm/rendering/sprite/AnimatedSprite.js.map +1 -1
  397. package/dist/esm/rendering/sprite/Sprite.d.ts +62 -1
  398. package/dist/esm/rendering/sprite/Sprite.js +97 -19
  399. package/dist/esm/rendering/sprite/Sprite.js.map +1 -1
  400. package/dist/esm/rendering/sprite/Spritesheet.d.ts +25 -0
  401. package/dist/esm/rendering/sprite/Spritesheet.js +20 -0
  402. package/dist/esm/rendering/sprite/Spritesheet.js.map +1 -1
  403. package/dist/esm/rendering/text/Text.d.ts +2 -0
  404. package/dist/esm/rendering/text/Text.js +2 -0
  405. package/dist/esm/rendering/text/Text.js.map +1 -1
  406. package/dist/esm/rendering/text/TextStyle.d.ts +29 -0
  407. package/dist/esm/rendering/text/TextStyle.js +24 -0
  408. package/dist/esm/rendering/text/TextStyle.js.map +1 -1
  409. package/dist/esm/rendering/text/types.d.ts +1 -0
  410. package/dist/esm/rendering/texture/RenderTexture.d.ts +16 -0
  411. package/dist/esm/rendering/texture/RenderTexture.js +16 -0
  412. package/dist/esm/rendering/texture/RenderTexture.js.map +1 -1
  413. package/dist/esm/rendering/texture/Sampler.d.ts +23 -0
  414. package/dist/esm/rendering/texture/Sampler.js +13 -0
  415. package/dist/esm/rendering/texture/Sampler.js.map +1 -1
  416. package/dist/esm/rendering/texture/Texture.d.ts +30 -0
  417. package/dist/esm/rendering/texture/Texture.js +30 -0
  418. package/dist/esm/rendering/texture/Texture.js.map +1 -1
  419. package/dist/esm/rendering/types.d.ts +29 -0
  420. package/dist/esm/rendering/types.js +29 -0
  421. package/dist/esm/rendering/types.js.map +1 -1
  422. package/dist/esm/rendering/utils.d.ts +20 -0
  423. package/dist/esm/rendering/utils.js +10 -0
  424. package/dist/esm/rendering/utils.js.map +1 -1
  425. package/dist/esm/rendering/video/Video.d.ts +39 -1
  426. package/dist/esm/rendering/video/Video.js +68 -6
  427. package/dist/esm/rendering/video/Video.js.map +1 -1
  428. package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.d.ts +7 -0
  429. package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.js +7 -0
  430. package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.js.map +1 -1
  431. package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts +17 -4
  432. package/dist/esm/rendering/webgl2/WebGl2Backend.js +20 -16
  433. package/dist/esm/rendering/webgl2/WebGl2Backend.js.map +1 -1
  434. package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.d.ts +8 -0
  435. package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.js +8 -0
  436. package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.js.map +1 -1
  437. package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts +45 -8
  438. package/dist/esm/rendering/webgpu/WebGpuBackend.js +160 -40
  439. package/dist/esm/rendering/webgpu/WebGpuBackend.js.map +1 -1
  440. package/dist/esm/resources/AbstractAssetFactory.d.ts +20 -0
  441. package/dist/esm/resources/AbstractAssetFactory.js +20 -0
  442. package/dist/esm/resources/AbstractAssetFactory.js.map +1 -1
  443. package/dist/esm/resources/AssetFactory.d.ts +26 -0
  444. package/dist/esm/resources/AssetManifest.d.ts +45 -0
  445. package/dist/esm/resources/AssetManifest.js +25 -0
  446. package/dist/esm/resources/AssetManifest.js.map +1 -1
  447. package/dist/esm/resources/CacheFirstStrategy.d.ts +12 -0
  448. package/dist/esm/resources/CacheFirstStrategy.js +12 -0
  449. package/dist/esm/resources/CacheFirstStrategy.js.map +1 -1
  450. package/dist/esm/resources/CacheStore.d.ts +23 -0
  451. package/dist/esm/resources/CacheStrategy.d.ts +20 -0
  452. package/dist/esm/resources/Database.d.ts +45 -0
  453. package/dist/esm/resources/FactoryRegistry.d.ts +28 -0
  454. package/dist/esm/resources/FactoryRegistry.js +24 -0
  455. package/dist/esm/resources/FactoryRegistry.js.map +1 -1
  456. package/dist/esm/resources/IndexedDbDatabase.d.ts +22 -1
  457. package/dist/esm/resources/IndexedDbDatabase.js +21 -0
  458. package/dist/esm/resources/IndexedDbDatabase.js.map +1 -1
  459. package/dist/esm/resources/IndexedDbStore.d.ts +20 -0
  460. package/dist/esm/resources/IndexedDbStore.js +12 -0
  461. package/dist/esm/resources/IndexedDbStore.js.map +1 -1
  462. package/dist/esm/resources/Loader.d.ts +167 -0
  463. package/dist/esm/resources/Loader.js +110 -0
  464. package/dist/esm/resources/Loader.js.map +1 -1
  465. package/dist/esm/resources/NetworkOnlyStrategy.d.ts +8 -0
  466. package/dist/esm/resources/NetworkOnlyStrategy.js +8 -0
  467. package/dist/esm/resources/NetworkOnlyStrategy.js.map +1 -1
  468. package/dist/esm/resources/factories/BinaryFactory.d.ts +13 -0
  469. package/dist/esm/resources/factories/BinaryFactory.js +13 -0
  470. package/dist/esm/resources/factories/BinaryFactory.js.map +1 -1
  471. package/dist/esm/resources/factories/FontFactory.d.ts +37 -0
  472. package/dist/esm/resources/factories/FontFactory.js +26 -0
  473. package/dist/esm/resources/factories/FontFactory.js.map +1 -1
  474. package/dist/esm/resources/factories/ImageFactory.d.ts +24 -0
  475. package/dist/esm/resources/factories/ImageFactory.js +19 -0
  476. package/dist/esm/resources/factories/ImageFactory.js.map +1 -1
  477. package/dist/esm/resources/factories/JsonFactory.d.ts +13 -0
  478. package/dist/esm/resources/factories/JsonFactory.js +13 -0
  479. package/dist/esm/resources/factories/JsonFactory.js.map +1 -1
  480. package/dist/esm/resources/factories/MusicFactory.d.ts +36 -0
  481. package/dist/esm/resources/factories/MusicFactory.js +44 -4
  482. package/dist/esm/resources/factories/MusicFactory.js.map +1 -1
  483. package/dist/esm/resources/factories/SoundFactory.d.ts +29 -0
  484. package/dist/esm/resources/factories/SoundFactory.js +18 -0
  485. package/dist/esm/resources/factories/SoundFactory.js.map +1 -1
  486. package/dist/esm/resources/factories/SvgFactory.d.ts +19 -0
  487. package/dist/esm/resources/factories/SvgFactory.js +19 -0
  488. package/dist/esm/resources/factories/SvgFactory.js.map +1 -1
  489. package/dist/esm/resources/factories/TextFactory.d.ts +11 -0
  490. package/dist/esm/resources/factories/TextFactory.js +11 -0
  491. package/dist/esm/resources/factories/TextFactory.js.map +1 -1
  492. package/dist/esm/resources/factories/TextureFactory.d.ts +25 -0
  493. package/dist/esm/resources/factories/TextureFactory.js +20 -0
  494. package/dist/esm/resources/factories/TextureFactory.js.map +1 -1
  495. package/dist/esm/resources/factories/VideoFactory.d.ts +37 -0
  496. package/dist/esm/resources/factories/VideoFactory.js +48 -5
  497. package/dist/esm/resources/factories/VideoFactory.js.map +1 -1
  498. package/dist/esm/resources/factories/VttFactory.d.ts +18 -0
  499. package/dist/esm/resources/factories/VttFactory.js +24 -0
  500. package/dist/esm/resources/factories/VttFactory.js.map +1 -1
  501. package/dist/esm/resources/factories/WasmFactory.d.ts +16 -0
  502. package/dist/esm/resources/factories/WasmFactory.js +16 -0
  503. package/dist/esm/resources/factories/WasmFactory.js.map +1 -1
  504. package/dist/esm/resources/utils.d.ts +10 -0
  505. package/dist/esm/resources/utils.js +10 -0
  506. package/dist/esm/resources/utils.js.map +1 -1
  507. package/dist/exo.esm.js +11182 -2538
  508. package/dist/exo.esm.js.map +1 -1
  509. package/package.json +20 -9
  510. package/dist/esm/core/Quadtree.d.ts +0 -20
  511. package/dist/esm/core/Quadtree.js +0 -86
  512. package/dist/esm/core/Quadtree.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"BlurFilter.js","sources":["../../../../../src/rendering/filters/BlurFilter.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAaM,MAAO,UAAW,SAAQ,MAAM,CAAA;AAEjB,IAAA,OAAO,GAAW,IAAI,MAAM,CAAC,IAAI,CAAC;AAClC,IAAA,WAAW,GAAU,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE;IACjD,OAAO,GAAG,CAAC;IACX,QAAQ,GAAG,CAAC;AAEpB,IAAA,WAAA,CAAmB,UAA6B,EAAE,EAAA;AAC9C,QAAA,KAAK,EAAE;AAEP,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;IACjE;AAEA,IAAA,IAAW,MAAM,GAAA;QACb,OAAO,IAAI,CAAC,OAAO;IACvB;IAEA,IAAW,MAAM,CAAC,MAAc,EAAA;QAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC;IACtC;AAEA,IAAA,IAAW,OAAO,GAAA;QACd,OAAO,IAAI,CAAC,QAAQ;IACxB;IAEA,IAAW,OAAO,CAAC,OAAe,EAAA;AAC9B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpD;AAEO,IAAA,KAAK,CAAC,OAAsB,EAAE,KAAoB,EAAE,MAAqB,EAAA;AAC5E,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO;AAC3B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ;AAC7B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AAC1C,QAAA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;AACjD,QAAA,MAAM,KAAK,GAAG,CAAC,GAAG,WAAW;AAE7B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;AAC1C,QAAA,IAAI,CAAC;aACA,UAAU,CAAC,KAAK;AAChB,aAAA,YAAY,CAAC,UAAU,CAAC,QAAQ;AAChC,aAAA,OAAO,CAAC,IAAI,CAAC,WAAW;aACxB,WAAW,CAAC,CAAC;AACb,aAAA,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;QACnB,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;QACjC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;AAEnC,QAAA,OAAO,CAAC,OAAO,CAAC,IAAI,gBAAgB,CAChC,MAAK;AACD,YAAA,IAAI,MAAM,IAAI,CAAC,EAAE;AACb,gBAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;gBAE9C;YACJ;AAEA,YAAA,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE;AACrC,gBAAA,MAAM,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC;gBAC9C,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,MAAM;AAEnC,gBAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AACnD,gBAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YACvD;AACJ,QAAA,CAAC,EACD;AACI,YAAA,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,UAAU,EAAE,KAAK,CAAC,gBAAgB;AACrC,SAAA,CACJ,CAAC;IACN;IAEO,OAAO,GAAA;AACV,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;AAC1B,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;IAC1B;AACH;;;;"}
1
+ {"version":3,"file":"BlurFilter.js","sources":["../../../../../src/rendering/filters/BlurFilter.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -2,6 +2,13 @@ import { Color } from '@/core/Color';
2
2
  import type { RenderTexture } from '@/rendering/texture/RenderTexture';
3
3
  import type { RenderBackend } from '@/rendering/RenderBackend';
4
4
  import { Filter } from './Filter';
5
+ /**
6
+ * A {@link Filter} that multiplies the input texture by a solid {@link Color}.
7
+ *
8
+ * Useful for tinting, fade-to-black/white, flash effects, and
9
+ * colour-grading passes. The `color` property can be mutated at runtime
10
+ * without recreating the filter.
11
+ */
5
12
  export declare class ColorFilter extends Filter {
6
13
  private readonly _color;
7
14
  private readonly _sprite;
@@ -4,6 +4,13 @@ import { Sprite } from '../sprite/Sprite.js';
4
4
  import { RenderTargetPass } from '../RenderTargetPass.js';
5
5
  import { Filter } from './Filter.js';
6
6
 
7
+ /**
8
+ * A {@link Filter} that multiplies the input texture by a solid {@link Color}.
9
+ *
10
+ * Useful for tinting, fade-to-black/white, flash effects, and
11
+ * colour-grading passes. The `color` property can be mutated at runtime
12
+ * without recreating the filter.
13
+ */
7
14
  class ColorFilter extends Filter {
8
15
  _color;
9
16
  _sprite = new Sprite(null);
@@ -1 +1 @@
1
- {"version":3,"file":"ColorFilter.js","sources":["../../../../../src/rendering/filters/ColorFilter.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAQM,MAAO,WAAY,SAAQ,MAAM,CAAA;AAElB,IAAA,MAAM;AACN,IAAA,OAAO,GAAW,IAAI,MAAM,CAAC,IAAI,CAAC;IAEnD,WAAA,CAAmB,KAAA,GAAe,KAAK,CAAC,KAAK,EAAA;AACzC,QAAA,KAAK,EAAE;AAEP,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE;IAC/B;AAEA,IAAA,IAAW,KAAK,GAAA;QACZ,OAAO,IAAI,CAAC,MAAM;IACtB;AAEO,IAAA,KAAK,CAAC,OAAsB,EAAE,KAAoB,EAAE,MAAqB,EAAA;AAC5E,QAAA,IAAI,CAAC;aACA,UAAU,CAAC,KAAK;AAChB,aAAA,YAAY,CAAC,UAAU,CAAC,MAAM;AAC9B,aAAA,OAAO,CAAC,IAAI,CAAC,MAAM;AACnB,aAAA,WAAW,CAAC,CAAC,EAAE,CAAC;aAChB,WAAW,CAAC,CAAC;AACb,aAAA,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;QAEnB,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;QACjC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;AAEnC,QAAA,OAAO,CAAC,OAAO,CAAC,IAAI,gBAAgB,CAChC,MAAK;AACD,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;AAChC,QAAA,CAAC,EACD;AACI,YAAA,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,UAAU,EAAE,KAAK,CAAC,gBAAgB;AACrC,SAAA,CACJ,CAAC;IACN;IAEO,OAAO,GAAA;AACV,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;IACzB;AACH;;;;"}
1
+ {"version":3,"file":"ColorFilter.js","sources":["../../../../../src/rendering/filters/ColorFilter.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAQA;;;;;;AAMG;AACG,MAAO,WAAY,SAAQ,MAAM,CAAA;AAElB,IAAA,MAAM;AACN,IAAA,OAAO,GAAW,IAAI,MAAM,CAAC,IAAI,CAAC;IAEnD,WAAA,CAAmB,KAAA,GAAe,KAAK,CAAC,KAAK,EAAA;AACzC,QAAA,KAAK,EAAE;AAEP,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE;IAC/B;AAEA,IAAA,IAAW,KAAK,GAAA;QACZ,OAAO,IAAI,CAAC,MAAM;IACtB;AAEO,IAAA,KAAK,CAAC,OAAsB,EAAE,KAAoB,EAAE,MAAqB,EAAA;AAC5E,QAAA,IAAI,CAAC;aACA,UAAU,CAAC,KAAK;AAChB,aAAA,YAAY,CAAC,UAAU,CAAC,MAAM;AAC9B,aAAA,OAAO,CAAC,IAAI,CAAC,MAAM;AACnB,aAAA,WAAW,CAAC,CAAC,EAAE,CAAC;aAChB,WAAW,CAAC,CAAC;AACb,aAAA,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;QAEnB,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;QACjC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;AAEnC,QAAA,OAAO,CAAC,OAAO,CAAC,IAAI,gBAAgB,CAChC,MAAK;AACD,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;AAChC,QAAA,CAAC,EACD;AACI,YAAA,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,UAAU,EAAE,KAAK,CAAC,gBAAgB;AACrC,SAAA,CACJ,CAAC;IACN;IAEgB,OAAO,GAAA;AACnB,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;IACzB;AACH;;;;"}
@@ -1,5 +1,28 @@
1
1
  import type { RenderTexture } from '@/rendering/texture/RenderTexture';
2
2
  import type { RenderBackend } from '@/rendering/RenderBackend';
3
+ /**
4
+ * Abstract base class for post-process filters applied to a drawable's
5
+ * render output.
6
+ *
7
+ * Filters are rendered into a temporary {@link RenderTexture} (the `output`)
8
+ * that is composited back onto the scene after all filters in the chain have
9
+ * been applied. Subclasses implement {@link apply} to run their shader pass.
10
+ * Stock implementations: {@link BlurFilter}, {@link ColorFilter}.
11
+ * User-supplied GLSL/WGSL shaders: {@link WebGl2ShaderFilter},
12
+ * {@link WebGpuShaderFilter}.
13
+ */
3
14
  export declare abstract class Filter {
15
+ /**
16
+ * Execute one filter pass: sample from `input`, write the result to
17
+ * `output`. Both textures are the same dimensions as the filtered drawable's
18
+ * bounding box.
19
+ */
4
20
  abstract apply(backend: RenderBackend, input: RenderTexture, output: RenderTexture): void;
21
+ /**
22
+ * Release any GPU-side resources held by this filter (uniform buffers,
23
+ * pipelines, intermediate textures). Default is a no-op for stateless
24
+ * filters; subclasses with state ({@link BlurFilter}, {@link ColorFilter})
25
+ * override.
26
+ */
27
+ destroy(): void;
5
28
  }
@@ -1,4 +1,24 @@
1
+ /**
2
+ * Abstract base class for post-process filters applied to a drawable's
3
+ * render output.
4
+ *
5
+ * Filters are rendered into a temporary {@link RenderTexture} (the `output`)
6
+ * that is composited back onto the scene after all filters in the chain have
7
+ * been applied. Subclasses implement {@link apply} to run their shader pass.
8
+ * Stock implementations: {@link BlurFilter}, {@link ColorFilter}.
9
+ * User-supplied GLSL/WGSL shaders: {@link WebGl2ShaderFilter},
10
+ * {@link WebGpuShaderFilter}.
11
+ */
1
12
  class Filter {
13
+ /**
14
+ * Release any GPU-side resources held by this filter (uniform buffers,
15
+ * pipelines, intermediate textures). Default is a no-op for stateless
16
+ * filters; subclasses with state ({@link BlurFilter}, {@link ColorFilter})
17
+ * override.
18
+ */
19
+ destroy() {
20
+ // no-op — subclasses with GPU state override
21
+ }
2
22
  }
3
23
 
4
24
  export { Filter };
@@ -1 +1 @@
1
- {"version":3,"file":"Filter.js","sources":["../../../../../src/rendering/filters/Filter.ts"],"sourcesContent":[null],"names":[],"mappings":"MAGsB,MAAM,CAAA;AAM3B;;;;"}
1
+ {"version":3,"file":"Filter.js","sources":["../../../../../src/rendering/filters/Filter.ts"],"sourcesContent":[null],"names":[],"mappings":"AAGA;;;;;;;;;;AAUG;MACmB,MAAM,CAAA;AAYxB;;;;;AAKG;IACI,OAAO,GAAA;;IAEd;AACH;;;;"}
@@ -0,0 +1,114 @@
1
+ import { Texture } from '@/rendering/texture/Texture';
2
+ import type { RenderTexture } from '@/rendering/texture/RenderTexture';
3
+ import type { RenderBackend } from '@/rendering/RenderBackend';
4
+ import { Filter } from './Filter';
5
+ /**
6
+ * A scalar number, vector tuple, typed array, or texture. Both
7
+ * {@link WebGl2ShaderFilter} and {@link WebGpuShaderFilter} accept and
8
+ * marshal these value types.
9
+ */
10
+ export type ShaderFilterUniformValue = number | readonly [number, number] | readonly [number, number, number] | readonly [number, number, number, number] | Float32Array | Int32Array | Texture | RenderTexture;
11
+ export interface WebGl2ShaderFilterOptions {
12
+ /**
13
+ * GLSL fragment shader source. Required.
14
+ *
15
+ * The shader receives these auto-bound uniforms:
16
+ * uniform sampler2D uTexture; // the filter's input
17
+ * uniform vec2 uResolution; // output dimensions
18
+ *
19
+ * And these auto-bound varyings:
20
+ * in vec2 vUv; // 0..1 across the quad
21
+ */
22
+ fragmentSource?: string;
23
+ /**
24
+ * GLSL vertex shader source. Optional; defaults to a pass-through
25
+ * fullscreen-quad shader.
26
+ */
27
+ vertexSource?: string;
28
+ /**
29
+ * Initial uniform values. Can be updated at runtime by writing
30
+ * to the `uniforms` property:
31
+ *
32
+ * filter.uniforms.uTime = performance.now() / 1000;
33
+ */
34
+ uniforms?: Record<string, ShaderFilterUniformValue>;
35
+ /**
36
+ * Auto-upgrade legacy GLSL ES 1.00 fragment shader source to GLSL ES 3.00.
37
+ * Default `true` — accepts both Shadertoy/ISF/legacy shaders and modern
38
+ * 3.00 shaders interchangeably.
39
+ *
40
+ * Set to `false` if you want strict 3.00 input (will fail to compile if
41
+ * given 1.00-style code). Useful for CI/linting setups that want to catch
42
+ * legacy shader code as bugs.
43
+ *
44
+ * Note: only the fragment shader is upgraded. If you supply a 1.00-style
45
+ * vertex shader via `vertexSource`, you will get a compile error that
46
+ * must be fixed manually.
47
+ */
48
+ autoUpgrade?: boolean;
49
+ }
50
+ /**
51
+ * A high-level {@link Filter} subclass that renders the input texture
52
+ * through a user-provided GLSL fragment shader on the **WebGL2** backend.
53
+ *
54
+ * For the WebGPU backend use {@link WebGpuShaderFilter}.
55
+ *
56
+ * ## Usage
57
+ *
58
+ * ```ts
59
+ * const filter = new WebGl2ShaderFilter({
60
+ * fragmentSource: `
61
+ * #version 300 es
62
+ * precision mediump float;
63
+ * uniform sampler2D uTexture;
64
+ * uniform vec2 uResolution;
65
+ * uniform float uTime;
66
+ * in vec2 vUv;
67
+ * out vec4 fragColor;
68
+ * void main() {
69
+ * fragColor = texture(uTexture, vUv);
70
+ * }
71
+ * `,
72
+ * uniforms: { uTime: 0.0 },
73
+ * });
74
+ *
75
+ * // Update uniforms each frame:
76
+ * filter.uniforms.uTime = performance.now() / 1000;
77
+ * sprite.filters = [filter];
78
+ * ```
79
+ *
80
+ * ## Auto-bound uniforms
81
+ *
82
+ * The backend automatically sets `uTexture` (slot 0) and `uResolution`
83
+ * before each draw. User uniforms start at texture slot 1.
84
+ */
85
+ export declare class WebGl2ShaderFilter extends Filter {
86
+ /**
87
+ * Mutable map of uniform values. Set values via property
88
+ * assignment; they are flushed to the GPU before each apply().
89
+ *
90
+ * filter.uniforms.uTime = 1.234;
91
+ * filter.uniforms.uColor = [1, 0.5, 0, 1]; // vec4
92
+ */
93
+ readonly uniforms: Record<string, ShaderFilterUniformValue>;
94
+ private readonly _fragmentSource;
95
+ private readonly _vertexSource;
96
+ private _shader;
97
+ private _connection;
98
+ constructor(options: WebGl2ShaderFilterOptions);
99
+ /**
100
+ * Execute the GLSL shader pass: compile the program on first call, bind
101
+ * uniforms, and render the input texture into `output`. Throws if the
102
+ * active backend is WebGPU — use {@link WebGpuShaderFilter} on WebGPU.
103
+ */
104
+ apply(backend: RenderBackend, input: RenderTexture, output: RenderTexture): void;
105
+ destroy(): void;
106
+ private _ensureConnected;
107
+ private _createVertexBuffer;
108
+ private _createVao;
109
+ /**
110
+ * Marshal a non-texture uniform value to a TypedArray suitable for
111
+ * {@link ShaderUniform#setValue}.
112
+ */
113
+ private _marshalValue;
114
+ }
@@ -0,0 +1,273 @@
1
+ import { Color } from '../../core/Color.js';
2
+ import { Shader } from '../shader/Shader.js';
3
+ import { RenderBackendType } from '../RenderBackendType.js';
4
+ import { RenderTargetPass } from '../RenderTargetPass.js';
5
+ import { RenderingPrimitives, BufferTypes, BufferUsage } from '../types.js';
6
+ import { createWebGl2ShaderProgram } from '../webgl2/WebGl2ShaderProgram.js';
7
+ import { WebGl2RenderBuffer } from '../webgl2/WebGl2RenderBuffer.js';
8
+ import { WebGl2VertexArrayObject } from '../webgl2/WebGl2VertexArrayObject.js';
9
+ import { Texture } from '../texture/Texture.js';
10
+ import { upgradeFragmentShaderToGl300 } from '../shader/upgradeFragmentShaderToGl300.js';
11
+ import { Filter } from './Filter.js';
12
+
13
+ /**
14
+ * Default fullscreen-quad vertex shader. Positions are already in clip
15
+ * space (-1..1), so no projection matrix is needed.
16
+ */
17
+ const defaultVertexSource = `#version 300 es
18
+ in vec2 aPosition;
19
+ in vec2 aUv;
20
+ out vec2 vUv;
21
+ void main() {
22
+ vUv = aUv;
23
+ gl_Position = vec4(aPosition, 0.0, 1.0);
24
+ }
25
+ `;
26
+ /**
27
+ * Interleaved position+UV data for a fullscreen TRIANGLE_STRIP quad.
28
+ * Layout per vertex: [posX, posY, uvX, uvY]
29
+ *
30
+ * Vertices (clip-space positions, 0..1 UVs):
31
+ * 0: bottom-left (-1, -1, 0, 0)
32
+ * 1: bottom-right ( 1, -1, 1, 0)
33
+ * 2: top-left (-1, 1, 0, 1)
34
+ * 3: top-right ( 1, 1, 1, 1)
35
+ */
36
+ const quadVertices = new Float32Array([
37
+ -1, -1, 0, 0,
38
+ 1, -1, 1, 0,
39
+ -1, 1, 0, 1,
40
+ 1, 1, 1, 1,
41
+ ]);
42
+ /** Bytes per vertex: 2 floats position + 2 floats UV = 16 bytes */
43
+ const vertexStride = 16;
44
+ /**
45
+ * A high-level {@link Filter} subclass that renders the input texture
46
+ * through a user-provided GLSL fragment shader on the **WebGL2** backend.
47
+ *
48
+ * For the WebGPU backend use {@link WebGpuShaderFilter}.
49
+ *
50
+ * ## Usage
51
+ *
52
+ * ```ts
53
+ * const filter = new WebGl2ShaderFilter({
54
+ * fragmentSource: `
55
+ * #version 300 es
56
+ * precision mediump float;
57
+ * uniform sampler2D uTexture;
58
+ * uniform vec2 uResolution;
59
+ * uniform float uTime;
60
+ * in vec2 vUv;
61
+ * out vec4 fragColor;
62
+ * void main() {
63
+ * fragColor = texture(uTexture, vUv);
64
+ * }
65
+ * `,
66
+ * uniforms: { uTime: 0.0 },
67
+ * });
68
+ *
69
+ * // Update uniforms each frame:
70
+ * filter.uniforms.uTime = performance.now() / 1000;
71
+ * sprite.filters = [filter];
72
+ * ```
73
+ *
74
+ * ## Auto-bound uniforms
75
+ *
76
+ * The backend automatically sets `uTexture` (slot 0) and `uResolution`
77
+ * before each draw. User uniforms start at texture slot 1.
78
+ */
79
+ class WebGl2ShaderFilter extends Filter {
80
+ /**
81
+ * Mutable map of uniform values. Set values via property
82
+ * assignment; they are flushed to the GPU before each apply().
83
+ *
84
+ * filter.uniforms.uTime = 1.234;
85
+ * filter.uniforms.uColor = [1, 0.5, 0, 1]; // vec4
86
+ */
87
+ uniforms;
88
+ _fragmentSource;
89
+ _vertexSource;
90
+ _shader = null;
91
+ _connection = null;
92
+ constructor(options) {
93
+ super();
94
+ if (!options.fragmentSource) {
95
+ throw new Error('WebGl2ShaderFilter requires fragmentSource for the WebGL2 backend.');
96
+ }
97
+ const autoUpgrade = options.autoUpgrade !== false;
98
+ this._fragmentSource = autoUpgrade
99
+ ? upgradeFragmentShaderToGl300(options.fragmentSource)
100
+ : options.fragmentSource;
101
+ this._vertexSource = options.vertexSource ?? defaultVertexSource;
102
+ this.uniforms = { ...(options.uniforms ?? {}) };
103
+ }
104
+ /**
105
+ * Execute the GLSL shader pass: compile the program on first call, bind
106
+ * uniforms, and render the input texture into `output`. Throws if the
107
+ * active backend is WebGPU — use {@link WebGpuShaderFilter} on WebGPU.
108
+ */
109
+ apply(backend, input, output) {
110
+ if (backend.backendType === RenderBackendType.WebGpu) {
111
+ throw new Error('WebGl2ShaderFilter requires the WebGL2 backend. Use WebGpuShaderFilter on WebGPU.');
112
+ }
113
+ const gl2Backend = backend;
114
+ this._ensureConnected(gl2Backend);
115
+ const shader = this._shader;
116
+ backend.execute(new RenderTargetPass((b) => {
117
+ const gl2 = b;
118
+ // Bind shader (calls ShaderProgram.bind → gl.useProgram + sync dirty uniforms)
119
+ gl2.bindShader(shader);
120
+ // Auto-bind input texture to slot 0 (uTexture)
121
+ gl2.bindTexture(input, 0);
122
+ if (shader.uniforms.has('uTexture')) {
123
+ shader.getUniform('uTexture').setValue(new Int32Array([0]));
124
+ }
125
+ // Auto-bind uResolution
126
+ if (shader.uniforms.has('uResolution')) {
127
+ shader.getUniform('uResolution').setValue(new Float32Array([output.width, output.height]));
128
+ }
129
+ // Sync user uniforms — texture uniforms start at slot 1
130
+ let textureSlot = 1;
131
+ for (const [name, value] of Object.entries(this.uniforms)) {
132
+ if (!shader.uniforms.has(name)) {
133
+ continue;
134
+ }
135
+ const uniform = shader.getUniform(name);
136
+ if (value instanceof Texture) {
137
+ gl2.bindTexture(value, textureSlot);
138
+ uniform.setValue(new Int32Array([textureSlot]));
139
+ textureSlot++;
140
+ }
141
+ else {
142
+ uniform.setValue(this._marshalValue(value));
143
+ }
144
+ }
145
+ // Flush dirty uniforms to the GPU
146
+ shader.sync();
147
+ // Draw the fullscreen quad
148
+ const connection = this._connection;
149
+ gl2.bindVertexArrayObject(connection.vao);
150
+ connection.vao.draw(4, 0, RenderingPrimitives.TriangleStrip);
151
+ }, {
152
+ target: output,
153
+ view: output.view,
154
+ clearColor: Color.transparentBlack,
155
+ }));
156
+ }
157
+ destroy() {
158
+ if (this._connection !== null) {
159
+ this._connection.vertexBuffer.destroy();
160
+ this._connection.vao.destroy();
161
+ this._connection = null;
162
+ }
163
+ if (this._shader !== null) {
164
+ this._shader.destroy();
165
+ this._shader = null;
166
+ }
167
+ for (const key of Object.keys(this.uniforms)) {
168
+ delete this.uniforms[key];
169
+ }
170
+ }
171
+ // ---------------------------------------------------------------------------
172
+ // Private helpers
173
+ // ---------------------------------------------------------------------------
174
+ _ensureConnected(backend) {
175
+ if (this._shader !== null) {
176
+ return;
177
+ }
178
+ const gl = backend.context;
179
+ // Create and connect the shader
180
+ const shader = new Shader(this._vertexSource, this._fragmentSource);
181
+ shader.connect(createWebGl2ShaderProgram(gl));
182
+ // Force shader finalization so attributes are populated before VAO setup.
183
+ // sync() calls finalize() internally, which blocks until compilation is
184
+ // done and extracts attribute/uniform reflection data.
185
+ shader.sync();
186
+ // Build the fullscreen-quad vertex buffer (static, per-instance)
187
+ const vaoHandle = gl.createVertexArray();
188
+ if (vaoHandle === null) {
189
+ throw new Error('WebGl2ShaderFilter: could not create vertex array object.');
190
+ }
191
+ const vertexBuffer = this._createVertexBuffer(gl);
192
+ const vao = this._createVao(gl, vaoHandle, shader, vertexBuffer);
193
+ this._shader = shader;
194
+ this._connection = { gl, vertexBuffer, vao };
195
+ }
196
+ _createVertexBuffer(gl) {
197
+ const handle = gl.createBuffer();
198
+ if (handle === null) {
199
+ throw new Error('WebGl2ShaderFilter: could not create vertex buffer.');
200
+ }
201
+ const buffer = new WebGl2RenderBuffer(BufferTypes.ArrayBuffer, quadVertices, BufferUsage.StaticDraw);
202
+ buffer.connect({
203
+ bind: () => {
204
+ gl.bindBuffer(gl.ARRAY_BUFFER, handle);
205
+ },
206
+ upload: (buf, _offset) => {
207
+ gl.bindBuffer(gl.ARRAY_BUFFER, handle);
208
+ gl.bufferData(gl.ARRAY_BUFFER, buf.data, buf.usage);
209
+ },
210
+ destroy: (buf) => {
211
+ gl.deleteBuffer(handle);
212
+ buf.disconnect();
213
+ },
214
+ });
215
+ return buffer;
216
+ }
217
+ _createVao(gl, vaoHandle, shader, vertexBuffer) {
218
+ let appliedVersion = -1;
219
+ const vao = new WebGl2VertexArrayObject(RenderingPrimitives.TriangleStrip);
220
+ if (shader.attributes.has('aPosition')) {
221
+ vao.addAttribute(vertexBuffer, shader.getAttribute('aPosition'), gl.FLOAT, false, vertexStride, 0);
222
+ }
223
+ if (shader.attributes.has('aUv')) {
224
+ vao.addAttribute(vertexBuffer, shader.getAttribute('aUv'), gl.FLOAT, false, vertexStride, 8);
225
+ }
226
+ vao.connect({
227
+ bind: (v) => {
228
+ gl.bindVertexArray(vaoHandle);
229
+ if (appliedVersion !== v.version) {
230
+ let lastBuffer = null;
231
+ for (const attribute of v.attributes) {
232
+ const buf = attribute.buffer;
233
+ if (lastBuffer !== buf) {
234
+ buf.bind();
235
+ lastBuffer = buf;
236
+ }
237
+ gl.vertexAttribPointer(attribute.location, attribute.size, attribute.type, attribute.normalized, attribute.stride, attribute.start);
238
+ gl.enableVertexAttribArray(attribute.location);
239
+ }
240
+ appliedVersion = v.version;
241
+ }
242
+ },
243
+ unbind: () => {
244
+ gl.bindVertexArray(null);
245
+ },
246
+ draw: (_v, size, start, type) => {
247
+ gl.drawArrays(type, start, size);
248
+ },
249
+ destroy: (v) => {
250
+ gl.deleteVertexArray(vaoHandle);
251
+ v.disconnect();
252
+ },
253
+ });
254
+ return vao;
255
+ }
256
+ /**
257
+ * Marshal a non-texture uniform value to a TypedArray suitable for
258
+ * {@link ShaderUniform#setValue}.
259
+ */
260
+ _marshalValue(value) {
261
+ if (value instanceof Float32Array || value instanceof Int32Array) {
262
+ return value;
263
+ }
264
+ if (typeof value === 'number') {
265
+ return new Float32Array([value]);
266
+ }
267
+ // readonly tuple [a, b], [a, b, c], or [a, b, c, d]
268
+ return new Float32Array(value);
269
+ }
270
+ }
271
+
272
+ export { WebGl2ShaderFilter };
273
+ //# sourceMappingURL=WebGl2ShaderFilter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebGl2ShaderFilter.js","sources":["../../../../../src/rendering/filters/WebGl2ShaderFilter.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ import type { RenderTexture } from '@/rendering/texture/RenderTexture';
2
+ import type { RenderBackend } from '@/rendering/RenderBackend';
3
+ import { Filter } from './Filter';
4
+ import type { ShaderFilterUniformValue } from './WebGl2ShaderFilter';
5
+ export type { ShaderFilterUniformValue };
6
+ export interface WebGpuShaderFilterOptions {
7
+ /**
8
+ * WGSL source code for the fragment shader. Required.
9
+ *
10
+ * The shader receives these auto-bound entries via @group(0):
11
+ * @group(0) @binding(0) var<uniform> uResolution: vec2<f32>; // output dimensions
12
+ * @group(0) @binding(1) var uTexture: texture_2d<f32>;
13
+ * @group(0) @binding(2) var uSampler: sampler;
14
+ *
15
+ * User uniforms go in @group(1):
16
+ * @group(1) @binding(0) var<uniform> uniforms: <UserUniformsStruct>;
17
+ *
18
+ * User uniforms are packed into a single uniform buffer with 16-byte
19
+ * alignment per member. Declare your WGSL struct to match this layout.
20
+ * Texture/RenderTexture uniforms are placed as separate bind group entries
21
+ * starting at @group(1) @binding(1).
22
+ */
23
+ fragmentSource: string;
24
+ /**
25
+ * WGSL source for the vertex shader. Optional; defaults to a fullscreen
26
+ * pass-through quad with a varying `vUv: vec2<f32>`.
27
+ */
28
+ vertexSource?: string;
29
+ /**
30
+ * Initial uniform values. Can be updated at runtime by writing
31
+ * to the `uniforms` property:
32
+ *
33
+ * filter.uniforms.uTime = performance.now() / 1000;
34
+ */
35
+ uniforms?: Record<string, ShaderFilterUniformValue>;
36
+ }
37
+ /**
38
+ * A high-level {@link Filter} subclass that renders the input texture through
39
+ * a user-provided WGSL fragment shader on the **WebGPU** backend.
40
+ *
41
+ * For the WebGL2 backend use {@link WebGl2ShaderFilter}.
42
+ *
43
+ * ## Usage
44
+ *
45
+ * ```ts
46
+ * const filter = new WebGpuShaderFilter({
47
+ * fragmentSource: `
48
+ * @group(0) @binding(0) var<uniform> uResolution: vec2<f32>;
49
+ * @group(0) @binding(1) var uTexture: texture_2d<f32>;
50
+ * @group(0) @binding(2) var uSampler: sampler;
51
+ *
52
+ * @fragment
53
+ * fn main(@location(0) vUv: vec2<f32>) -> @location(0) vec4<f32> {
54
+ * return textureSample(uTexture, uSampler, vUv);
55
+ * }
56
+ * `,
57
+ * uniforms: { uTime: 0.0 },
58
+ * });
59
+ *
60
+ * // Update uniforms each frame:
61
+ * filter.uniforms.uTime = performance.now() / 1000;
62
+ * sprite.filters = [filter];
63
+ * ```
64
+ *
65
+ * ## Auto-bound uniforms (group 0)
66
+ *
67
+ * - `@binding(0)` — `var<uniform> uResolution: vec2<f32>` (output dimensions)
68
+ * - `@binding(1)` — `var uTexture: texture_2d<f32>` (filter input)
69
+ * - `@binding(2)` — `var uSampler: sampler`
70
+ *
71
+ * ## User uniforms (group 1)
72
+ *
73
+ * All non-texture user uniforms are packed into a single uniform buffer at
74
+ * `@binding(0)`. Each member occupies a 16-byte aligned slot (conservative
75
+ * alignment). Declare your WGSL struct to match this layout.
76
+ *
77
+ * Texture/RenderTexture uniforms are bound as separate entries starting at
78
+ * `@binding(1)` (texture) and `@binding(N+1)` (sampler), in declaration order.
79
+ */
80
+ export declare class WebGpuShaderFilter extends Filter {
81
+ /**
82
+ * Mutable map of uniform values. Set values via property assignment;
83
+ * they are flushed to the GPU before each apply().
84
+ *
85
+ * filter.uniforms.uTime = 1.234;
86
+ * filter.uniforms.uColor = [1, 0.5, 0, 1]; // vec4
87
+ */
88
+ readonly uniforms: Record<string, ShaderFilterUniformValue>;
89
+ private readonly _fragmentSource;
90
+ private readonly _vertexSource;
91
+ private _connection;
92
+ constructor(options: WebGpuShaderFilterOptions);
93
+ /**
94
+ * Execute the WGSL shader pass: flush uniforms, build bind groups, and
95
+ * render the input texture into `output`. Throws if the active backend is
96
+ * not WebGPU — use {@link WebGl2ShaderFilter} on WebGL2.
97
+ */
98
+ apply(backend: RenderBackend, input: RenderTexture, output: RenderTexture): void;
99
+ destroy(): void;
100
+ private _ensureConnected;
101
+ /**
102
+ * Build the GPUBindGroupLayout for group 1 (user uniforms).
103
+ *
104
+ * Layout:
105
+ * binding 0 — uniform buffer (scalar/vector uniforms), if any scalar uniforms exist
106
+ * binding 1, 3, 5, ... — texture entries (one per texture uniform, in order)
107
+ * binding 2, 4, 6, ... — sampler entries (paired with textures)
108
+ */
109
+ private _buildUserBindGroupLayout;
110
+ /**
111
+ * Build and return the GPUBindGroup for group 1 on each frame.
112
+ * Marshals scalar uniforms into the user uniform buffer and assembles
113
+ * texture/sampler bind group entries.
114
+ */
115
+ private _buildUserBindGroup;
116
+ }