@codexo/exojs 0.8.0 → 0.8.3

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 (498) hide show
  1. package/CHANGELOG.md +390 -208
  2. package/README.md +19 -19
  3. package/dist/esm/animation/Easing.js +13 -21
  4. package/dist/esm/animation/Easing.js.map +1 -1
  5. package/dist/esm/animation/Tween.d.ts +3 -3
  6. package/dist/esm/animation/Tween.js +7 -5
  7. package/dist/esm/animation/Tween.js.map +1 -1
  8. package/dist/esm/animation/TweenManager.js +1 -1
  9. package/dist/esm/animation/TweenManager.js.map +1 -1
  10. package/dist/esm/animation/types.js.map +1 -1
  11. package/dist/esm/audio/AbstractMedia.d.ts +1 -1
  12. package/dist/esm/audio/AbstractMedia.js +1 -1
  13. package/dist/esm/audio/AbstractMedia.js.map +1 -1
  14. package/dist/esm/audio/AudioAnalyser.d.ts +37 -1
  15. package/dist/esm/audio/AudioAnalyser.js +150 -2
  16. package/dist/esm/audio/AudioAnalyser.js.map +1 -1
  17. package/dist/esm/audio/AudioBus.d.ts +1 -1
  18. package/dist/esm/audio/AudioBus.js.map +1 -1
  19. package/dist/esm/audio/AudioFilter.js +3 -1
  20. package/dist/esm/audio/AudioFilter.js.map +1 -1
  21. package/dist/esm/audio/AudioListener.d.ts +1 -1
  22. package/dist/esm/audio/AudioListener.js +5 -3
  23. package/dist/esm/audio/AudioListener.js.map +1 -1
  24. package/dist/esm/audio/AudioManager.js.map +1 -1
  25. package/dist/esm/audio/BeatDetector.d.ts +66 -4
  26. package/dist/esm/audio/BeatDetector.js +145 -44
  27. package/dist/esm/audio/BeatDetector.js.map +1 -1
  28. package/dist/esm/audio/Envelope.d.ts +1 -1
  29. package/dist/esm/audio/Envelope.js +2 -2
  30. package/dist/esm/audio/Envelope.js.map +1 -1
  31. package/dist/esm/audio/Music.d.ts +1 -1
  32. package/dist/esm/audio/Music.js +1 -1
  33. package/dist/esm/audio/Music.js.map +1 -1
  34. package/dist/esm/audio/OscillatorSound.d.ts +2 -2
  35. package/dist/esm/audio/OscillatorSound.js.map +1 -1
  36. package/dist/esm/audio/Sound.d.ts +40 -2
  37. package/dist/esm/audio/Sound.js +69 -9
  38. package/dist/esm/audio/Sound.js.map +1 -1
  39. package/dist/esm/audio/audio-context.js +1 -1
  40. package/dist/esm/audio/audio-context.js.map +1 -1
  41. package/dist/esm/audio/crossFade.js +1 -1
  42. package/dist/esm/audio/crossFade.js.map +1 -1
  43. package/dist/esm/audio/dsp/mel.d.ts +2 -2
  44. package/dist/esm/audio/dsp/mel.js +70 -0
  45. package/dist/esm/audio/dsp/mel.js.map +1 -0
  46. package/dist/esm/audio/dsp/tempogram.d.ts +2 -2
  47. package/dist/esm/audio/filters/ChorusFilter.js +12 -4
  48. package/dist/esm/audio/filters/ChorusFilter.js.map +1 -1
  49. package/dist/esm/audio/filters/CompressorFilter.d.ts +9 -0
  50. package/dist/esm/audio/filters/CompressorFilter.js +11 -0
  51. package/dist/esm/audio/filters/CompressorFilter.js.map +1 -1
  52. package/dist/esm/audio/filters/DelayFilter.js.map +1 -1
  53. package/dist/esm/audio/filters/DuckingFilter.d.ts +1 -1
  54. package/dist/esm/audio/filters/DuckingFilter.js +13 -5
  55. package/dist/esm/audio/filters/DuckingFilter.js.map +1 -1
  56. package/dist/esm/audio/filters/EqualizerFilter.js.map +1 -1
  57. package/dist/esm/audio/filters/GranularFilter.js +30 -14
  58. package/dist/esm/audio/filters/GranularFilter.js.map +1 -1
  59. package/dist/esm/audio/filters/HighpassFilter.js.map +1 -1
  60. package/dist/esm/audio/filters/LowpassFilter.js.map +1 -1
  61. package/dist/esm/audio/filters/PitchShiftFilter.js +14 -10
  62. package/dist/esm/audio/filters/PitchShiftFilter.js.map +1 -1
  63. package/dist/esm/audio/filters/ReverbFilter.js.map +1 -1
  64. package/dist/esm/audio/filters/VocoderFilter.d.ts +2 -2
  65. package/dist/esm/audio/filters/VocoderFilter.js +20 -12
  66. package/dist/esm/audio/filters/VocoderFilter.js.map +1 -1
  67. package/dist/esm/audio/filters/WorkletFilter.js +5 -6
  68. package/dist/esm/audio/filters/WorkletFilter.js.map +1 -1
  69. package/dist/esm/audio/filters/index.d.ts +7 -7
  70. package/dist/esm/audio/index.d.ts +9 -9
  71. package/dist/esm/audio/worklet/registerWorklet.js +7 -3
  72. package/dist/esm/audio/worklet/registerWorklet.js.map +1 -1
  73. package/dist/esm/core/Application.d.ts +13 -13
  74. package/dist/esm/core/Application.js +24 -16
  75. package/dist/esm/core/Application.js.map +1 -1
  76. package/dist/esm/core/Bounds.d.ts +1 -1
  77. package/dist/esm/core/Bounds.js +1 -3
  78. package/dist/esm/core/Bounds.js.map +1 -1
  79. package/dist/esm/core/Clock.js +1 -1
  80. package/dist/esm/core/Clock.js.map +1 -1
  81. package/dist/esm/core/Color.js +2 -5
  82. package/dist/esm/core/Color.js.map +1 -1
  83. package/dist/esm/core/Scene.d.ts +10 -10
  84. package/dist/esm/core/Scene.js +1 -1
  85. package/dist/esm/core/Scene.js.map +1 -1
  86. package/dist/esm/core/SceneManager.d.ts +4 -4
  87. package/dist/esm/core/SceneManager.js +39 -33
  88. package/dist/esm/core/SceneManager.js.map +1 -1
  89. package/dist/esm/core/SceneNode.d.ts +8 -8
  90. package/dist/esm/core/SceneNode.js +39 -29
  91. package/dist/esm/core/SceneNode.js.map +1 -1
  92. package/dist/esm/core/Signal.d.ts +3 -3
  93. package/dist/esm/core/Signal.js +3 -3
  94. package/dist/esm/core/Signal.js.map +1 -1
  95. package/dist/esm/core/Time.js +6 -6
  96. package/dist/esm/core/Time.js.map +1 -1
  97. package/dist/esm/core/Timer.d.ts +1 -1
  98. package/dist/esm/core/Timer.js +1 -1
  99. package/dist/esm/core/Timer.js.map +1 -1
  100. package/dist/esm/core/capabilities.js +2 -4
  101. package/dist/esm/core/capabilities.js.map +1 -1
  102. package/dist/esm/core/index.d.ts +2 -2
  103. package/dist/esm/core/utils.d.ts +4 -4
  104. package/dist/esm/core/utils.js +10 -10
  105. package/dist/esm/core/utils.js.map +1 -1
  106. package/dist/esm/debug/BoundingBoxesLayer.d.ts +3 -3
  107. package/dist/esm/debug/BoundingBoxesLayer.js +6 -13
  108. package/dist/esm/debug/BoundingBoxesLayer.js.map +1 -1
  109. package/dist/esm/debug/DebugLayer.d.ts +1 -1
  110. package/dist/esm/debug/DebugLayer.js.map +1 -1
  111. package/dist/esm/debug/DebugOverlay.d.ts +2 -2
  112. package/dist/esm/debug/DebugOverlay.js +2 -2
  113. package/dist/esm/debug/DebugOverlay.js.map +1 -1
  114. package/dist/esm/debug/HitTestLayer.d.ts +3 -3
  115. package/dist/esm/debug/HitTestLayer.js +3 -10
  116. package/dist/esm/debug/HitTestLayer.js.map +1 -1
  117. package/dist/esm/debug/PerformanceLayer.d.ts +2 -2
  118. package/dist/esm/debug/PerformanceLayer.js +6 -6
  119. package/dist/esm/debug/PerformanceLayer.js.map +1 -1
  120. package/dist/esm/debug/PointerStackLayer.d.ts +3 -3
  121. package/dist/esm/debug/PointerStackLayer.js +3 -3
  122. package/dist/esm/debug/PointerStackLayer.js.map +1 -1
  123. package/dist/esm/debug/RenderPassInspectorLayer.d.ts +71 -0
  124. package/dist/esm/debug/RenderPassInspectorLayer.js +201 -0
  125. package/dist/esm/debug/RenderPassInspectorLayer.js.map +1 -0
  126. package/dist/esm/debug/index.d.ts +4 -3
  127. package/dist/esm/debug/index.js +4 -3
  128. package/dist/esm/debug/index.js.map +1 -1
  129. package/dist/esm/index.d.ts +1 -1
  130. package/dist/esm/index.js +101 -98
  131. package/dist/esm/index.js.map +1 -1
  132. package/dist/esm/input/ArcadeStickGamepadMapping.js.map +1 -1
  133. package/dist/esm/input/GameCubeGamepadMapping.d.ts +1 -1
  134. package/dist/esm/input/GameCubeGamepadMapping.js +1 -1
  135. package/dist/esm/input/GameCubeGamepadMapping.js.map +1 -1
  136. package/dist/esm/input/Gamepad.d.ts +7 -7
  137. package/dist/esm/input/Gamepad.js +10 -6
  138. package/dist/esm/input/Gamepad.js.map +1 -1
  139. package/dist/esm/input/GamepadAxis.js +1 -1
  140. package/dist/esm/input/GamepadAxis.js.map +1 -1
  141. package/dist/esm/input/GamepadButton.js +1 -1
  142. package/dist/esm/input/GamepadButton.js.map +1 -1
  143. package/dist/esm/input/GamepadDefinitions.d.ts +4 -4
  144. package/dist/esm/input/GamepadDefinitions.js +12 -14
  145. package/dist/esm/input/GamepadDefinitions.js.map +1 -1
  146. package/dist/esm/input/GamepadMapping.d.ts +5 -5
  147. package/dist/esm/input/GamepadMapping.js.map +1 -1
  148. package/dist/esm/input/GamepadPromptLayouts.d.ts +2 -2
  149. package/dist/esm/input/GamepadPromptLayouts.js +8 -8
  150. package/dist/esm/input/GamepadPromptLayouts.js.map +1 -1
  151. package/dist/esm/input/GenericDualAnalogGamepadMapping.js.map +1 -1
  152. package/dist/esm/input/GestureRecognizer.d.ts +1 -1
  153. package/dist/esm/input/GestureRecognizer.js.map +1 -1
  154. package/dist/esm/input/InputBinding.d.ts +3 -3
  155. package/dist/esm/input/InputBinding.js.map +1 -1
  156. package/dist/esm/input/InputManager.d.ts +9 -9
  157. package/dist/esm/input/InputManager.js +25 -16
  158. package/dist/esm/input/InputManager.js.map +1 -1
  159. package/dist/esm/input/InteractionEvent.d.ts +1 -1
  160. package/dist/esm/input/InteractionEvent.js.map +1 -1
  161. package/dist/esm/input/InteractionManager.d.ts +2 -2
  162. package/dist/esm/input/InteractionManager.js +25 -16
  163. package/dist/esm/input/InteractionManager.js.map +1 -1
  164. package/dist/esm/input/JoyConLeftGamepadMapping.js.map +1 -1
  165. package/dist/esm/input/JoyConRightGamepadMapping.js.map +1 -1
  166. package/dist/esm/input/PlayStationGamepadMapping.d.ts +1 -1
  167. package/dist/esm/input/PlayStationGamepadMapping.js +1 -1
  168. package/dist/esm/input/PlayStationGamepadMapping.js.map +1 -1
  169. package/dist/esm/input/Pointer.d.ts +2 -2
  170. package/dist/esm/input/Pointer.js +6 -6
  171. package/dist/esm/input/Pointer.js.map +1 -1
  172. package/dist/esm/input/SteamControllerGamepadMapping.d.ts +1 -1
  173. package/dist/esm/input/SteamControllerGamepadMapping.js +1 -1
  174. package/dist/esm/input/SteamControllerGamepadMapping.js.map +1 -1
  175. package/dist/esm/input/SteamDeckGamepadMapping.js.map +1 -1
  176. package/dist/esm/input/SwitchProGamepadMapping.d.ts +1 -1
  177. package/dist/esm/input/SwitchProGamepadMapping.js +1 -1
  178. package/dist/esm/input/SwitchProGamepadMapping.js.map +1 -1
  179. package/dist/esm/input/XboxGamepadMapping.d.ts +1 -1
  180. package/dist/esm/input/XboxGamepadMapping.js +1 -1
  181. package/dist/esm/input/XboxGamepadMapping.js.map +1 -1
  182. package/dist/esm/input/index.d.ts +16 -16
  183. package/dist/esm/input/interaction-hooks.js.map +1 -1
  184. package/dist/esm/input/types.js.map +1 -1
  185. package/dist/esm/math/AbstractVector.js +8 -9
  186. package/dist/esm/math/AbstractVector.js.map +1 -1
  187. package/dist/esm/math/Circle.d.ts +5 -5
  188. package/dist/esm/math/Circle.js +33 -21
  189. package/dist/esm/math/Circle.js.map +1 -1
  190. package/dist/esm/math/Collision.d.ts +2 -2
  191. package/dist/esm/math/Collision.js.map +1 -1
  192. package/dist/esm/math/Ellipse.d.ts +5 -5
  193. package/dist/esm/math/Ellipse.js +28 -19
  194. package/dist/esm/math/Ellipse.js.map +1 -1
  195. package/dist/esm/math/Flags.d.ts +4 -4
  196. package/dist/esm/math/Flags.js.map +1 -1
  197. package/dist/esm/math/Interval.js.map +1 -1
  198. package/dist/esm/math/Line.d.ts +5 -5
  199. package/dist/esm/math/Line.js +23 -15
  200. package/dist/esm/math/Line.js.map +1 -1
  201. package/dist/esm/math/Matrix.js +14 -16
  202. package/dist/esm/math/Matrix.js.map +1 -1
  203. package/dist/esm/math/ObservableSize.js.map +1 -1
  204. package/dist/esm/math/ObservableVector.d.ts +1 -1
  205. package/dist/esm/math/ObservableVector.js.map +1 -1
  206. package/dist/esm/math/PolarVector.js.map +1 -1
  207. package/dist/esm/math/Polygon.d.ts +11 -11
  208. package/dist/esm/math/Polygon.js +37 -26
  209. package/dist/esm/math/Polygon.js.map +1 -1
  210. package/dist/esm/math/PolygonLike.d.ts +1 -1
  211. package/dist/esm/math/Quadtree.js +2 -8
  212. package/dist/esm/math/Quadtree.js.map +1 -1
  213. package/dist/esm/math/Random.js +5 -5
  214. package/dist/esm/math/Random.js.map +1 -1
  215. package/dist/esm/math/Rectangle.d.ts +4 -4
  216. package/dist/esm/math/Rectangle.js +59 -41
  217. package/dist/esm/math/Rectangle.js.map +1 -1
  218. package/dist/esm/math/Segment.d.ts +1 -1
  219. package/dist/esm/math/Segment.js +4 -4
  220. package/dist/esm/math/Segment.js.map +1 -1
  221. package/dist/esm/math/ShapeLike.d.ts +1 -1
  222. package/dist/esm/math/Size.js +1 -2
  223. package/dist/esm/math/Size.js.map +1 -1
  224. package/dist/esm/math/Vector.d.ts +4 -4
  225. package/dist/esm/math/Vector.js +19 -13
  226. package/dist/esm/math/Vector.js.map +1 -1
  227. package/dist/esm/math/collision-detection.d.ts +3 -3
  228. package/dist/esm/math/collision-detection.js +49 -49
  229. package/dist/esm/math/collision-detection.js.map +1 -1
  230. package/dist/esm/math/collision-primitives.d.ts +8 -8
  231. package/dist/esm/math/collision-primitives.js +27 -33
  232. package/dist/esm/math/collision-primitives.js.map +1 -1
  233. package/dist/esm/math/geometry.d.ts +3 -3
  234. package/dist/esm/math/geometry.js +55 -48
  235. package/dist/esm/math/geometry.js.map +1 -1
  236. package/dist/esm/math/index.d.ts +16 -16
  237. package/dist/esm/math/swept-collision.d.ts +3 -3
  238. package/dist/esm/math/swept-collision.js +5 -8
  239. package/dist/esm/math/swept-collision.js.map +1 -1
  240. package/dist/esm/math/triangulate.js +34 -24
  241. package/dist/esm/math/triangulate.js.map +1 -1
  242. package/dist/esm/math/utils.d.ts +2 -2
  243. package/dist/esm/math/utils.js +7 -7
  244. package/dist/esm/math/utils.js.map +1 -1
  245. package/dist/esm/particles/ParticleSystem.d.ts +9 -9
  246. package/dist/esm/particles/ParticleSystem.js +29 -29
  247. package/dist/esm/particles/ParticleSystem.js.map +1 -1
  248. package/dist/esm/particles/distributions/BoxArea.js.map +1 -1
  249. package/dist/esm/particles/distributions/CircleArea.js.map +1 -1
  250. package/dist/esm/particles/distributions/ConeDirection.js.map +1 -1
  251. package/dist/esm/particles/distributions/Constant.js.map +1 -1
  252. package/dist/esm/particles/distributions/Curve.d.ts +1 -1
  253. package/dist/esm/particles/distributions/Curve.js.map +1 -1
  254. package/dist/esm/particles/distributions/Gradient.d.ts +1 -1
  255. package/dist/esm/particles/distributions/Gradient.js +1 -1
  256. package/dist/esm/particles/distributions/Gradient.js.map +1 -1
  257. package/dist/esm/particles/distributions/LineSegment.js.map +1 -1
  258. package/dist/esm/particles/distributions/Range.js.map +1 -1
  259. package/dist/esm/particles/distributions/VectorRange.js.map +1 -1
  260. package/dist/esm/particles/distributions/index.d.ts +9 -9
  261. package/dist/esm/particles/gpu/ParticleGpuState.d.ts +3 -3
  262. package/dist/esm/particles/gpu/ParticleGpuState.js +48 -21
  263. package/dist/esm/particles/gpu/ParticleGpuState.js.map +1 -1
  264. package/dist/esm/particles/index.d.ts +1 -1
  265. package/dist/esm/particles/modules/AlphaFadeOverLifetime.d.ts +2 -2
  266. package/dist/esm/particles/modules/AlphaFadeOverLifetime.js.map +1 -1
  267. package/dist/esm/particles/modules/ApplyForce.d.ts +1 -1
  268. package/dist/esm/particles/modules/ApplyForce.js.map +1 -1
  269. package/dist/esm/particles/modules/AttractToPoint.d.ts +1 -1
  270. package/dist/esm/particles/modules/AttractToPoint.js.map +1 -1
  271. package/dist/esm/particles/modules/BurstSpawn.d.ts +4 -4
  272. package/dist/esm/particles/modules/BurstSpawn.js +2 -2
  273. package/dist/esm/particles/modules/BurstSpawn.js.map +1 -1
  274. package/dist/esm/particles/modules/ColorOverLifetime.d.ts +2 -2
  275. package/dist/esm/particles/modules/ColorOverLifetime.js +1 -1
  276. package/dist/esm/particles/modules/ColorOverLifetime.js.map +1 -1
  277. package/dist/esm/particles/modules/ColorOverSpeed.d.ts +2 -2
  278. package/dist/esm/particles/modules/ColorOverSpeed.js +1 -1
  279. package/dist/esm/particles/modules/ColorOverSpeed.js.map +1 -1
  280. package/dist/esm/particles/modules/DeathModule.js.map +1 -1
  281. package/dist/esm/particles/modules/Drag.d.ts +1 -1
  282. package/dist/esm/particles/modules/Drag.js +1 -3
  283. package/dist/esm/particles/modules/Drag.js.map +1 -1
  284. package/dist/esm/particles/modules/OrbitalForce.d.ts +1 -1
  285. package/dist/esm/particles/modules/OrbitalForce.js.map +1 -1
  286. package/dist/esm/particles/modules/RateSpawn.d.ts +3 -3
  287. package/dist/esm/particles/modules/RateSpawn.js +2 -2
  288. package/dist/esm/particles/modules/RateSpawn.js.map +1 -1
  289. package/dist/esm/particles/modules/RepelFromPoint.d.ts +1 -1
  290. package/dist/esm/particles/modules/RepelFromPoint.js.map +1 -1
  291. package/dist/esm/particles/modules/RotateOverLifetime.d.ts +1 -1
  292. package/dist/esm/particles/modules/RotateOverLifetime.js +1 -3
  293. package/dist/esm/particles/modules/RotateOverLifetime.js.map +1 -1
  294. package/dist/esm/particles/modules/ScaleOverLifetime.d.ts +2 -2
  295. package/dist/esm/particles/modules/ScaleOverLifetime.js.map +1 -1
  296. package/dist/esm/particles/modules/SpawnModule.js.map +1 -1
  297. package/dist/esm/particles/modules/SpawnOnDeath.d.ts +1 -1
  298. package/dist/esm/particles/modules/SpawnOnDeath.js.map +1 -1
  299. package/dist/esm/particles/modules/Turbulence.d.ts +1 -1
  300. package/dist/esm/particles/modules/Turbulence.js.map +1 -1
  301. package/dist/esm/particles/modules/UpdateModule.js.map +1 -1
  302. package/dist/esm/particles/modules/VelocityOverLifetime.d.ts +2 -2
  303. package/dist/esm/particles/modules/VelocityOverLifetime.js.map +1 -1
  304. package/dist/esm/particles/modules/WgslContribution.d.ts +3 -3
  305. package/dist/esm/particles/modules/WgslContribution.js.map +1 -1
  306. package/dist/esm/particles/modules/index.d.ts +17 -17
  307. package/dist/esm/rendering/CallbackRenderPass.js.map +1 -1
  308. package/dist/esm/rendering/Container.d.ts +2 -2
  309. package/dist/esm/rendering/Container.js +10 -11
  310. package/dist/esm/rendering/Container.js.map +1 -1
  311. package/dist/esm/rendering/Drawable.js.map +1 -1
  312. package/dist/esm/rendering/RenderBackend.d.ts +6 -6
  313. package/dist/esm/rendering/RenderBackendType.js.map +1 -1
  314. package/dist/esm/rendering/RenderNode.d.ts +10 -10
  315. package/dist/esm/rendering/RenderNode.js +31 -31
  316. package/dist/esm/rendering/RenderNode.js.map +1 -1
  317. package/dist/esm/rendering/RenderStats.js.map +1 -1
  318. package/dist/esm/rendering/RenderTarget.d.ts +2 -2
  319. package/dist/esm/rendering/RenderTarget.js +5 -5
  320. package/dist/esm/rendering/RenderTarget.js.map +1 -1
  321. package/dist/esm/rendering/RenderTargetPass.d.ts +3 -3
  322. package/dist/esm/rendering/RenderTargetPass.js.map +1 -1
  323. package/dist/esm/rendering/Renderer.d.ts +2 -2
  324. package/dist/esm/rendering/RendererRegistry.d.ts +3 -3
  325. package/dist/esm/rendering/RendererRegistry.js +2 -3
  326. package/dist/esm/rendering/RendererRegistry.js.map +1 -1
  327. package/dist/esm/rendering/View.d.ts +3 -3
  328. package/dist/esm/rendering/View.js +17 -20
  329. package/dist/esm/rendering/View.js.map +1 -1
  330. package/dist/esm/rendering/filters/BlurFilter.d.ts +1 -1
  331. package/dist/esm/rendering/filters/BlurFilter.js +4 -9
  332. package/dist/esm/rendering/filters/BlurFilter.js.map +1 -1
  333. package/dist/esm/rendering/filters/ColorFilter.d.ts +1 -1
  334. package/dist/esm/rendering/filters/ColorFilter.js +3 -9
  335. package/dist/esm/rendering/filters/ColorFilter.js.map +1 -1
  336. package/dist/esm/rendering/filters/Filter.d.ts +1 -1
  337. package/dist/esm/rendering/filters/Filter.js.map +1 -1
  338. package/dist/esm/rendering/filters/LutFilter.d.ts +87 -0
  339. package/dist/esm/rendering/filters/LutFilter.js +261 -0
  340. package/dist/esm/rendering/filters/LutFilter.js.map +1 -0
  341. package/dist/esm/rendering/filters/WebGl2ShaderFilter.d.ts +2 -2
  342. package/dist/esm/rendering/filters/WebGl2ShaderFilter.js +7 -14
  343. package/dist/esm/rendering/filters/WebGl2ShaderFilter.js.map +1 -1
  344. package/dist/esm/rendering/filters/WebGpuShaderFilter.d.ts +1 -1
  345. package/dist/esm/rendering/filters/WebGpuShaderFilter.js +16 -11
  346. package/dist/esm/rendering/filters/WebGpuShaderFilter.js.map +1 -1
  347. package/dist/esm/rendering/index.d.ts +30 -27
  348. package/dist/esm/rendering/mesh/Mesh.d.ts +6 -1
  349. package/dist/esm/rendering/mesh/Mesh.js +3 -1
  350. package/dist/esm/rendering/mesh/Mesh.js.map +1 -1
  351. package/dist/esm/rendering/mesh/MeshShader.d.ts +183 -0
  352. package/dist/esm/rendering/mesh/MeshShader.js +231 -0
  353. package/dist/esm/rendering/mesh/MeshShader.js.map +1 -0
  354. package/dist/esm/rendering/primitives/Graphics.d.ts +3 -3
  355. package/dist/esm/rendering/primitives/Graphics.js +12 -12
  356. package/dist/esm/rendering/primitives/Graphics.js.map +1 -1
  357. package/dist/esm/rendering/shader/Shader.js.map +1 -1
  358. package/dist/esm/rendering/shader/ShaderAttribute.js.map +1 -1
  359. package/dist/esm/rendering/shader/ShaderUniform.js.map +1 -1
  360. package/dist/esm/rendering/shader/upgradeFragmentShaderToGl300.js +6 -8
  361. package/dist/esm/rendering/shader/upgradeFragmentShaderToGl300.js.map +1 -1
  362. package/dist/esm/rendering/sprite/AnimatedSprite.d.ts +3 -3
  363. package/dist/esm/rendering/sprite/AnimatedSprite.js.map +1 -1
  364. package/dist/esm/rendering/sprite/Sprite.d.ts +4 -4
  365. package/dist/esm/rendering/sprite/Sprite.js +51 -35
  366. package/dist/esm/rendering/sprite/Sprite.js.map +1 -1
  367. package/dist/esm/rendering/sprite/Spritesheet.d.ts +5 -9
  368. package/dist/esm/rendering/sprite/Spritesheet.js +1 -1
  369. package/dist/esm/rendering/sprite/Spritesheet.js.map +1 -1
  370. package/dist/esm/rendering/text/DynamicGlyphAtlas.js +3 -9
  371. package/dist/esm/rendering/text/DynamicGlyphAtlas.js.map +1 -1
  372. package/dist/esm/rendering/text/Text.js +9 -9
  373. package/dist/esm/rendering/text/Text.js.map +1 -1
  374. package/dist/esm/rendering/text/TextLayout.d.ts +2 -2
  375. package/dist/esm/rendering/text/TextLayout.js.map +1 -1
  376. package/dist/esm/rendering/text/TextStyle.js.map +1 -1
  377. package/dist/esm/rendering/text/atlas-singleton.js.map +1 -1
  378. package/dist/esm/rendering/texture/DataTexture.d.ts +115 -0
  379. package/dist/esm/rendering/texture/DataTexture.js +173 -0
  380. package/dist/esm/rendering/texture/DataTexture.js.map +1 -0
  381. package/dist/esm/rendering/texture/RenderTexture.d.ts +1 -1
  382. package/dist/esm/rendering/texture/RenderTexture.js +4 -1
  383. package/dist/esm/rendering/texture/RenderTexture.js.map +1 -1
  384. package/dist/esm/rendering/texture/Sampler.js.map +1 -1
  385. package/dist/esm/rendering/texture/Texture.d.ts +2 -2
  386. package/dist/esm/rendering/texture/Texture.js +8 -5
  387. package/dist/esm/rendering/texture/Texture.js.map +1 -1
  388. package/dist/esm/rendering/types.js.map +1 -1
  389. package/dist/esm/rendering/utils.js.map +1 -1
  390. package/dist/esm/rendering/video/Video.d.ts +3 -3
  391. package/dist/esm/rendering/video/Video.js +7 -6
  392. package/dist/esm/rendering/video/Video.js.map +1 -1
  393. package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.d.ts +6 -6
  394. package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.js +7 -10
  395. package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.js.map +1 -1
  396. package/dist/esm/rendering/webgl2/AbstractWebGl2Renderer.d.ts +1 -1
  397. package/dist/esm/rendering/webgl2/AbstractWebGl2Renderer.js +1 -2
  398. package/dist/esm/rendering/webgl2/AbstractWebGl2Renderer.js.map +1 -1
  399. package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts +11 -11
  400. package/dist/esm/rendering/webgl2/WebGl2Backend.js +61 -22
  401. package/dist/esm/rendering/webgl2/WebGl2Backend.js.map +1 -1
  402. package/dist/esm/rendering/webgl2/WebGl2MaskCompositor.d.ts +2 -2
  403. package/dist/esm/rendering/webgl2/WebGl2MaskCompositor.js +6 -8
  404. package/dist/esm/rendering/webgl2/WebGl2MaskCompositor.js.map +1 -1
  405. package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.d.ts +7 -4
  406. package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.js +121 -43
  407. package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.js.map +1 -1
  408. package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.d.ts +1 -1
  409. package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.js +10 -18
  410. package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.js.map +1 -1
  411. package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.d.ts +1 -1
  412. package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.js.map +1 -1
  413. package/dist/esm/rendering/webgl2/WebGl2ShaderBlock.js.map +1 -1
  414. package/dist/esm/rendering/webgl2/WebGl2ShaderMappings.js.map +1 -1
  415. package/dist/esm/rendering/webgl2/WebGl2ShaderProgram.js +54 -22
  416. package/dist/esm/rendering/webgl2/WebGl2ShaderProgram.js.map +1 -1
  417. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.d.ts +1 -1
  418. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js +11 -14
  419. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js.map +1 -1
  420. package/dist/esm/rendering/webgl2/WebGl2VertexArrayObject.d.ts +1 -1
  421. package/dist/esm/rendering/webgl2/WebGl2VertexArrayObject.js.map +1 -1
  422. package/dist/esm/rendering/webgpu/AbstractWebGpuRenderer.d.ts +1 -1
  423. package/dist/esm/rendering/webgpu/AbstractWebGpuRenderer.js +1 -2
  424. package/dist/esm/rendering/webgpu/AbstractWebGpuRenderer.js.map +1 -1
  425. package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts +8 -7
  426. package/dist/esm/rendering/webgpu/WebGpuBackend.js +104 -37
  427. package/dist/esm/rendering/webgpu/WebGpuBackend.js.map +1 -1
  428. package/dist/esm/rendering/webgpu/WebGpuBlendState.js.map +1 -1
  429. package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.d.ts +2 -2
  430. package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.js +3 -4
  431. package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.js.map +1 -1
  432. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.d.ts +15 -2
  433. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js +657 -102
  434. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js.map +1 -1
  435. package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.d.ts +1 -1
  436. package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js +100 -56
  437. package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js.map +1 -1
  438. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.d.ts +2 -2
  439. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js +45 -45
  440. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js.map +1 -1
  441. package/dist/esm/rendering/webgpu/compute/WebGpuComputePipeline.d.ts +1 -1
  442. package/dist/esm/rendering/webgpu/compute/index.d.ts +2 -2
  443. package/dist/esm/resources/AbstractAssetFactory.d.ts +1 -1
  444. package/dist/esm/resources/AbstractAssetFactory.js.map +1 -1
  445. package/dist/esm/resources/AssetManifest.d.ts +1 -1
  446. package/dist/esm/resources/AssetManifest.js +2 -2
  447. package/dist/esm/resources/AssetManifest.js.map +1 -1
  448. package/dist/esm/resources/CacheFirstStrategy.d.ts +2 -2
  449. package/dist/esm/resources/CacheFirstStrategy.js.map +1 -1
  450. package/dist/esm/resources/CacheStrategy.d.ts +1 -1
  451. package/dist/esm/resources/FactoryRegistry.d.ts +1 -1
  452. package/dist/esm/resources/FactoryRegistry.js +2 -3
  453. package/dist/esm/resources/FactoryRegistry.js.map +1 -1
  454. package/dist/esm/resources/IndexedDbDatabase.d.ts +1 -1
  455. package/dist/esm/resources/IndexedDbDatabase.js +11 -14
  456. package/dist/esm/resources/IndexedDbDatabase.js.map +1 -1
  457. package/dist/esm/resources/IndexedDbStore.d.ts +1 -1
  458. package/dist/esm/resources/IndexedDbStore.js +2 -7
  459. package/dist/esm/resources/IndexedDbStore.js.map +1 -1
  460. package/dist/esm/resources/Loader.d.ts +9 -9
  461. package/dist/esm/resources/Loader.js +48 -35
  462. package/dist/esm/resources/Loader.js.map +1 -1
  463. package/dist/esm/resources/NetworkOnlyStrategy.d.ts +2 -2
  464. package/dist/esm/resources/NetworkOnlyStrategy.js.map +1 -1
  465. package/dist/esm/resources/factories/BinaryFactory.js.map +1 -1
  466. package/dist/esm/resources/factories/FontFactory.js +1 -1
  467. package/dist/esm/resources/factories/FontFactory.js.map +1 -1
  468. package/dist/esm/resources/factories/ImageFactory.js +4 -4
  469. package/dist/esm/resources/factories/ImageFactory.js.map +1 -1
  470. package/dist/esm/resources/factories/JsonFactory.d.ts +1 -1
  471. package/dist/esm/resources/factories/JsonFactory.js +1 -1
  472. package/dist/esm/resources/factories/JsonFactory.js.map +1 -1
  473. package/dist/esm/resources/factories/MusicFactory.d.ts +1 -1
  474. package/dist/esm/resources/factories/MusicFactory.js +4 -4
  475. package/dist/esm/resources/factories/MusicFactory.js.map +1 -1
  476. package/dist/esm/resources/factories/SoundFactory.d.ts +1 -1
  477. package/dist/esm/resources/factories/SoundFactory.js +3 -3
  478. package/dist/esm/resources/factories/SoundFactory.js.map +1 -1
  479. package/dist/esm/resources/factories/SvgFactory.js +3 -3
  480. package/dist/esm/resources/factories/SvgFactory.js.map +1 -1
  481. package/dist/esm/resources/factories/TextFactory.js +1 -1
  482. package/dist/esm/resources/factories/TextFactory.js.map +1 -1
  483. package/dist/esm/resources/factories/TextureFactory.d.ts +1 -1
  484. package/dist/esm/resources/factories/TextureFactory.js +3 -3
  485. package/dist/esm/resources/factories/TextureFactory.js.map +1 -1
  486. package/dist/esm/resources/factories/VideoFactory.d.ts +2 -2
  487. package/dist/esm/resources/factories/VideoFactory.js +5 -5
  488. package/dist/esm/resources/factories/VideoFactory.js.map +1 -1
  489. package/dist/esm/resources/factories/VttFactory.d.ts +2 -2
  490. package/dist/esm/resources/factories/VttFactory.js +6 -6
  491. package/dist/esm/resources/factories/VttFactory.js.map +1 -1
  492. package/dist/esm/resources/factories/WasmFactory.js.map +1 -1
  493. package/dist/esm/resources/index.d.ts +11 -11
  494. package/dist/esm/resources/utils.js +30 -25
  495. package/dist/esm/resources/utils.js.map +1 -1
  496. package/dist/exo.esm.js +26260 -24256
  497. package/dist/exo.esm.js.map +1 -1
  498. package/package.json +15 -4
@@ -1,56 +1,59 @@
1
+ export * from './CallbackRenderPass';
2
+ export * from './Container';
3
+ export * from './Drawable';
4
+ export * from './filters/BlurFilter';
5
+ export * from './filters/ColorFilter';
6
+ export * from './filters/Filter';
7
+ export * from './filters/LutFilter';
8
+ export * from './filters/WebGl2ShaderFilter';
9
+ export * from './filters/WebGpuShaderFilter';
1
10
  export * from './mesh/Mesh';
11
+ export * from './mesh/MeshShader';
2
12
  export * from './primitives/Graphics';
13
+ export * from './RenderBackend';
14
+ export * from './RenderBackendType';
15
+ export * from './Renderer';
16
+ export * from './RendererRegistry';
17
+ export * from './RenderNode';
18
+ export * from './RenderPass';
19
+ export * from './RenderStats';
20
+ export * from './RenderTarget';
21
+ export * from './RenderTargetPass';
3
22
  export * from './shader/Shader';
4
23
  export * from './shader/ShaderAttribute';
5
24
  export * from './shader/ShaderUniform';
6
25
  export * from './shader/upgradeFragmentShaderToGl300';
26
+ export * from './sprite/AnimatedSprite';
7
27
  export * from './sprite/Sprite';
8
28
  export * from './sprite/Spritesheet';
9
- export * from './sprite/AnimatedSprite';
10
29
  export * from './text/DynamicGlyphAtlas';
11
30
  export * from './text/Text';
12
31
  export * from './text/TextLayout';
13
32
  export * from './text/TextStyle';
14
33
  export * from './text/types';
34
+ export * from './texture/DataTexture';
15
35
  export * from './texture/RenderTexture';
16
36
  export * from './texture/Sampler';
17
37
  export * from './texture/Texture';
38
+ export * from './types';
18
39
  export * from './video/Video';
40
+ export * from './View';
19
41
  export * from './webgl2/AbstractWebGl2BatchedRenderer';
20
42
  export * from './webgl2/AbstractWebGl2Renderer';
43
+ export type { WebGl2Backend } from './webgl2/WebGl2Backend';
44
+ export * from './webgl2/WebGl2Backend';
45
+ export * from './webgl2/WebGl2MeshRenderer';
46
+ export * from './webgl2/WebGl2ParticleRenderer';
21
47
  export * from './webgl2/WebGl2RenderBuffer';
22
48
  export * from './webgl2/WebGl2ShaderBlock';
23
49
  export * from './webgl2/WebGl2ShaderMappings';
24
- export * from './webgl2/WebGl2VertexArrayObject';
25
- export * from './webgl2/WebGl2MeshRenderer';
26
- export * from './webgl2/WebGl2ParticleRenderer';
27
- export type { WebGl2Backend } from './webgl2/WebGl2Backend';
28
- export * from './webgl2/WebGl2Backend';
29
50
  export * from './webgl2/WebGl2ShaderProgram';
30
51
  export * from './webgl2/WebGl2SpriteRenderer';
52
+ export * from './webgl2/WebGl2VertexArrayObject';
31
53
  export * from './webgpu/AbstractWebGpuRenderer';
54
+ export type { WebGpuBackend } from './webgpu/WebGpuBackend';
55
+ export * from './webgpu/WebGpuBackend';
32
56
  export * from './webgpu/WebGpuBlendState';
33
57
  export * from './webgpu/WebGpuMeshRenderer';
34
58
  export * from './webgpu/WebGpuParticleRenderer';
35
- export type { WebGpuBackend } from './webgpu/WebGpuBackend';
36
- export * from './webgpu/WebGpuBackend';
37
59
  export * from './webgpu/WebGpuSpriteRenderer';
38
- export * from './types';
39
- export * from './Container';
40
- export * from './Drawable';
41
- export * from './RenderNode';
42
- export * from './RenderBackendType';
43
- export * from './RenderPass';
44
- export * from './RenderStats';
45
- export * from './RenderTarget';
46
- export * from './RenderTargetPass';
47
- export * from './CallbackRenderPass';
48
- export * from './Renderer';
49
- export * from './RendererRegistry';
50
- export * from './RenderBackend';
51
- export * from './View';
52
- export * from './filters/Filter';
53
- export * from './filters/BlurFilter';
54
- export * from './filters/ColorFilter';
55
- export * from './filters/WebGl2ShaderFilter';
56
- export * from './filters/WebGpuShaderFilter';
@@ -1,6 +1,7 @@
1
1
  import { Drawable } from '@/rendering/Drawable';
2
- import type { Texture } from '@/rendering/texture/Texture';
2
+ import type { MeshShader } from '@/rendering/mesh/MeshShader';
3
3
  import type { RenderTexture } from '@/rendering/texture/RenderTexture';
4
+ import type { Texture } from '@/rendering/texture/Texture';
4
5
  /**
5
6
  * Construction-time options for a {@link Mesh}.
6
7
  *
@@ -13,6 +14,8 @@ import type { RenderTexture } from '@/rendering/texture/RenderTexture';
13
14
  * supplied UVs while an untextured mesh paints solid vertex colors only.
14
15
  *
15
16
  * Validation is enforced at construction; any mismatch throws.
17
+ *
18
+ * For custom shaders, see {@link MeshShader}.
16
19
  */
17
20
  export interface MeshOptions {
18
21
  readonly vertices: Float32Array;
@@ -20,6 +23,7 @@ export interface MeshOptions {
20
23
  readonly uvs?: Float32Array;
21
24
  readonly colors?: Uint32Array;
22
25
  readonly texture?: Texture | RenderTexture | null;
26
+ readonly shader?: MeshShader;
23
27
  }
24
28
  /**
25
29
  * Arbitrary 2D triangle-mesh primitive.
@@ -54,6 +58,7 @@ export declare class Mesh extends Drawable {
54
58
  readonly indices: Uint16Array | null;
55
59
  readonly uvs: Float32Array | null;
56
60
  readonly colors: Uint32Array | null;
61
+ readonly shader: MeshShader | null;
57
62
  private _texture;
58
63
  constructor(options: MeshOptions);
59
64
  /** Number of (x, y) vertex pairs in the mesh (i.e. `vertices.length / 2`). */
@@ -33,10 +33,11 @@ class Mesh extends Drawable {
33
33
  indices;
34
34
  uvs;
35
35
  colors;
36
+ shader;
36
37
  _texture;
37
38
  constructor(options) {
38
39
  super();
39
- const { vertices, indices = null, uvs = null, colors = null, texture = null } = options;
40
+ const { vertices, indices = null, uvs = null, colors = null, texture = null, shader = null } = options;
40
41
  if (vertices.length === 0 || vertices.length % 2 !== 0) {
41
42
  throw new Error(`Mesh vertices must be a non-empty flat array of (x,y) pairs (got length ${vertices.length}).`);
42
43
  }
@@ -67,6 +68,7 @@ class Mesh extends Drawable {
67
68
  this.indices = indices;
68
69
  this.uvs = uvs;
69
70
  this.colors = colors;
71
+ this.shader = shader;
70
72
  this._texture = texture;
71
73
  this.recomputeLocalBounds();
72
74
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Mesh.js","sources":["../../../../../src/rendering/mesh/Mesh.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Mesh.js","sources":["../../../../../src/rendering/mesh/Mesh.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,183 @@
1
+ import type { RenderTexture } from '@/rendering/texture/RenderTexture';
2
+ import type { Texture } from '@/rendering/texture/Texture';
3
+ /**
4
+ * Uniform value passed to a custom mesh shader. Scalars and small tuples
5
+ * auto-marshal to the appropriate `Float32Array`/`Int32Array` for the
6
+ * backend's uniform call. `Texture`/`RenderTexture` values are bound to
7
+ * texture slots starting at slot 1 — slot 0 is reserved for the mesh's
8
+ * own `texture`.
9
+ */
10
+ export type MeshShaderUniformValue = number | readonly [number, number] | readonly [number, number, number] | readonly [number, number, number, number] | Float32Array | Int32Array | Texture | RenderTexture;
11
+ /**
12
+ * Construction options for {@link MeshShader}.
13
+ *
14
+ * At least one language must be supplied. Provide `glsl` for WebGL2,
15
+ * `wgsl` for WebGPU, or both for backend-portable meshes. The shader
16
+ * is compiled lazily on first use against the active backend; an
17
+ * unsupported backend at draw time throws with a clear error.
18
+ */
19
+ export interface MeshShaderOptions {
20
+ /**
21
+ * GLSL ES 3.00 sources for the WebGL2 backend. Both `vertex` and
22
+ * `fragment` are required when `glsl` is supplied.
23
+ */
24
+ readonly glsl?: {
25
+ readonly vertex: string;
26
+ readonly fragment: string;
27
+ };
28
+ /**
29
+ * WGSL source for the WebGPU backend. Vertex and fragment entry
30
+ * points live in the same source file (WGSL convention).
31
+ */
32
+ readonly wgsl?: string;
33
+ /** Initial uniform values; mutate per frame via {@link MeshShader.uniforms}. */
34
+ readonly uniforms?: Record<string, MeshShaderUniformValue>;
35
+ }
36
+ /**
37
+ * Custom shader pair attached to a {@link Mesh}.
38
+ *
39
+ * One `MeshShader` instance can be shared across many meshes; renderers
40
+ * cache compiled programs/pipelines on the instance reference. Call
41
+ * {@link destroy} when the shader is no longer needed to release the
42
+ * cached GPU resources on every backend the shader was used on.
43
+ *
44
+ * # Vertex layout
45
+ *
46
+ * The vertex layout is fixed and shared with the default mesh shader,
47
+ * so custom vertex shaders MUST pin the standard attribute locations:
48
+ *
49
+ * ## GLSL (location-qualified)
50
+ *
51
+ * ```glsl
52
+ * layout(location = 0) in vec2 a_position;
53
+ * layout(location = 1) in vec2 a_texcoord;
54
+ * layout(location = 2) in vec4 a_color;
55
+ * ```
56
+ *
57
+ * ## WGSL (location-qualified)
58
+ *
59
+ * ```wgsl
60
+ * struct VertexInput {
61
+ * @location(0) position: vec2<f32>,
62
+ * @location(1) texcoord: vec2<f32>,
63
+ * @location(2) color: vec4<f32>,
64
+ * };
65
+ * ```
66
+ *
67
+ * # Auto-bound uniforms
68
+ *
69
+ * The renderer auto-binds these when the shader declares them. Declared
70
+ * but unused is fine; absent is fine too. Both backends carry the same
71
+ * logical uniforms, only the binding scheme differs.
72
+ *
73
+ * ## GLSL
74
+ *
75
+ * ```glsl
76
+ * uniform mat3 u_projection; // active view's projection
77
+ * uniform mat3 u_translation; // mesh's global transform
78
+ * uniform vec4 u_tint; // mesh.tint as RGBA in 0..1
79
+ * uniform sampler2D u_texture; // bound to texture slot 0
80
+ * ```
81
+ *
82
+ * ## WGSL
83
+ *
84
+ * ```wgsl
85
+ * struct MeshUniforms {
86
+ * projection: mat3x3<f32>,
87
+ * translation: mat3x3<f32>,
88
+ * tint: vec4<f32>,
89
+ * };
90
+ *
91
+ * @group(0) @binding(0) var<uniform> u_mesh: MeshUniforms;
92
+ *
93
+ * @group(1) @binding(0) var u_texture: texture_2d<f32>;
94
+ * @group(1) @binding(1) var u_sampler: sampler;
95
+ * ```
96
+ *
97
+ * # User uniforms
98
+ *
99
+ * Anything in {@link uniforms} is set after the auto-binds. `Texture`/
100
+ * `RenderTexture` values claim slots 1..N (slot 0 belongs to the mesh).
101
+ *
102
+ * ## WGSL user-uniform contract
103
+ *
104
+ * User uniforms live in `@group(2)`:
105
+ *
106
+ * - `@group(2) @binding(0) var<uniform> u_user: <UserUniformsStruct>;`
107
+ * for the packed scalar/vector/matrix uniforms.
108
+ * - `@group(2) @binding(N)` for each `Texture`/`RenderTexture` uniform,
109
+ * in declaration order, alongside its sampler at `@binding(N+1)`.
110
+ */
111
+ export declare class MeshShader {
112
+ /**
113
+ * Mutable user uniform values. Mutate between frames to drive animated
114
+ * effects; the renderer reads from this map every draw.
115
+ *
116
+ * shader.uniforms.uTime = performance.now() / 1000;
117
+ * shader.uniforms.uColor = [1, 0.5, 0, 1];
118
+ */
119
+ uniforms: Record<string, MeshShaderUniformValue>;
120
+ /** GLSL source pair for the WebGL2 backend, or `null` if not provided. */
121
+ readonly glsl: {
122
+ readonly vertex: string;
123
+ readonly fragment: string;
124
+ } | null;
125
+ /** WGSL source for the WebGPU backend, or `null` if not provided. */
126
+ readonly wgsl: string | null;
127
+ private readonly _disposeCallbacks;
128
+ constructor(options: MeshShaderOptions);
129
+ /**
130
+ * Convenience setter equivalent to `shader.uniforms[name] = value`.
131
+ * Provided for symmetry with engine APIs that prefer explicit methods
132
+ * over property mutation.
133
+ */
134
+ setUniform(name: string, value: MeshShaderUniformValue): void;
135
+ /**
136
+ * Reflect declared uniforms from each language's source. Returns a per-
137
+ * language map of uniform-name → declared type, parsed from the shader
138
+ * sources via lightweight regex (not a full GLSL/WGSL grammar). Texture
139
+ * uniforms (`sampler2D`/`texture_2d`) are included; sampler bindings
140
+ * are not (they pair with textures by binding index).
141
+ *
142
+ * Reflection is best-effort and intended for CI drift-checks and editor
143
+ * tooling, not for runtime uniform binding decisions. The renderers do
144
+ * NOT consult this map; they bind uniforms by name from {@link uniforms}
145
+ * and let the underlying API resolve declared-but-unused entries.
146
+ */
147
+ getDeclaredUniforms(): {
148
+ glsl: Record<string, string>;
149
+ wgsl: Record<string, string>;
150
+ };
151
+ /**
152
+ * Compare declared uniform names between the GLSL and WGSL sources.
153
+ * Returns lists of names declared in only one language. Use in CI to
154
+ * catch drift when both languages should expose the same logical
155
+ * uniforms. When only one language is provided, returns empty arrays.
156
+ *
157
+ * Auto-bound uniforms (`u_projection`, `u_translation`, `u_tint`,
158
+ * `u_texture`) are excluded from the comparison since the GLSL source
159
+ * declares them at the top-level uniform scope while the WGSL source
160
+ * receives them via the `@group(0)` mesh-uniforms struct and the
161
+ * `@group(1)` texture binding.
162
+ */
163
+ detectUniformDrift(): {
164
+ onlyInGlsl: readonly string[];
165
+ onlyInWgsl: readonly string[];
166
+ };
167
+ /**
168
+ * Release GPU resources cached against this `MeshShader` on every
169
+ * backend that has compiled it. Safe to call multiple times. After
170
+ * destroy, the shader can still be re-used — renderers will recompile
171
+ * on next draw — but typical usage is to drop the reference.
172
+ */
173
+ destroy(): void;
174
+ /**
175
+ * Internal hook for renderers to register a per-shader-instance cleanup
176
+ * callback (release compiled program, pipeline, or bind groups). The
177
+ * callback fires on {@link destroy}; renderers MUST also tolerate the
178
+ * shader being garbage-collected without destroy ever being called.
179
+ *
180
+ * @internal
181
+ */
182
+ _onDispose(callback: () => void): void;
183
+ }
@@ -0,0 +1,231 @@
1
+ /**
2
+ * Custom shader pair attached to a {@link Mesh}.
3
+ *
4
+ * One `MeshShader` instance can be shared across many meshes; renderers
5
+ * cache compiled programs/pipelines on the instance reference. Call
6
+ * {@link destroy} when the shader is no longer needed to release the
7
+ * cached GPU resources on every backend the shader was used on.
8
+ *
9
+ * # Vertex layout
10
+ *
11
+ * The vertex layout is fixed and shared with the default mesh shader,
12
+ * so custom vertex shaders MUST pin the standard attribute locations:
13
+ *
14
+ * ## GLSL (location-qualified)
15
+ *
16
+ * ```glsl
17
+ * layout(location = 0) in vec2 a_position;
18
+ * layout(location = 1) in vec2 a_texcoord;
19
+ * layout(location = 2) in vec4 a_color;
20
+ * ```
21
+ *
22
+ * ## WGSL (location-qualified)
23
+ *
24
+ * ```wgsl
25
+ * struct VertexInput {
26
+ * @location(0) position: vec2<f32>,
27
+ * @location(1) texcoord: vec2<f32>,
28
+ * @location(2) color: vec4<f32>,
29
+ * };
30
+ * ```
31
+ *
32
+ * # Auto-bound uniforms
33
+ *
34
+ * The renderer auto-binds these when the shader declares them. Declared
35
+ * but unused is fine; absent is fine too. Both backends carry the same
36
+ * logical uniforms, only the binding scheme differs.
37
+ *
38
+ * ## GLSL
39
+ *
40
+ * ```glsl
41
+ * uniform mat3 u_projection; // active view's projection
42
+ * uniform mat3 u_translation; // mesh's global transform
43
+ * uniform vec4 u_tint; // mesh.tint as RGBA in 0..1
44
+ * uniform sampler2D u_texture; // bound to texture slot 0
45
+ * ```
46
+ *
47
+ * ## WGSL
48
+ *
49
+ * ```wgsl
50
+ * struct MeshUniforms {
51
+ * projection: mat3x3<f32>,
52
+ * translation: mat3x3<f32>,
53
+ * tint: vec4<f32>,
54
+ * };
55
+ *
56
+ * @group(0) @binding(0) var<uniform> u_mesh: MeshUniforms;
57
+ *
58
+ * @group(1) @binding(0) var u_texture: texture_2d<f32>;
59
+ * @group(1) @binding(1) var u_sampler: sampler;
60
+ * ```
61
+ *
62
+ * # User uniforms
63
+ *
64
+ * Anything in {@link uniforms} is set after the auto-binds. `Texture`/
65
+ * `RenderTexture` values claim slots 1..N (slot 0 belongs to the mesh).
66
+ *
67
+ * ## WGSL user-uniform contract
68
+ *
69
+ * User uniforms live in `@group(2)`:
70
+ *
71
+ * - `@group(2) @binding(0) var<uniform> u_user: <UserUniformsStruct>;`
72
+ * for the packed scalar/vector/matrix uniforms.
73
+ * - `@group(2) @binding(N)` for each `Texture`/`RenderTexture` uniform,
74
+ * in declaration order, alongside its sampler at `@binding(N+1)`.
75
+ */
76
+ class MeshShader {
77
+ /**
78
+ * Mutable user uniform values. Mutate between frames to drive animated
79
+ * effects; the renderer reads from this map every draw.
80
+ *
81
+ * shader.uniforms.uTime = performance.now() / 1000;
82
+ * shader.uniforms.uColor = [1, 0.5, 0, 1];
83
+ */
84
+ uniforms;
85
+ /** GLSL source pair for the WebGL2 backend, or `null` if not provided. */
86
+ glsl;
87
+ /** WGSL source for the WebGPU backend, or `null` if not provided. */
88
+ wgsl;
89
+ _disposeCallbacks = new Set();
90
+ constructor(options) {
91
+ if (options.glsl === undefined && options.wgsl === undefined) {
92
+ throw new Error('MeshShader requires at least one of `glsl` or `wgsl`.');
93
+ }
94
+ if (options.glsl !== undefined) {
95
+ if (typeof options.glsl.vertex !== 'string' || options.glsl.vertex.length === 0) {
96
+ throw new Error('MeshShader.glsl.vertex must be a non-empty string.');
97
+ }
98
+ if (typeof options.glsl.fragment !== 'string' || options.glsl.fragment.length === 0) {
99
+ throw new Error('MeshShader.glsl.fragment must be a non-empty string.');
100
+ }
101
+ }
102
+ if (options.wgsl !== undefined && (typeof options.wgsl !== 'string' || options.wgsl.length === 0)) {
103
+ throw new Error('MeshShader.wgsl must be a non-empty string.');
104
+ }
105
+ this.glsl = options.glsl ?? null;
106
+ this.wgsl = options.wgsl ?? null;
107
+ this.uniforms = { ...(options.uniforms ?? {}) };
108
+ }
109
+ /**
110
+ * Convenience setter equivalent to `shader.uniforms[name] = value`.
111
+ * Provided for symmetry with engine APIs that prefer explicit methods
112
+ * over property mutation.
113
+ */
114
+ setUniform(name, value) {
115
+ this.uniforms[name] = value;
116
+ }
117
+ /**
118
+ * Reflect declared uniforms from each language's source. Returns a per-
119
+ * language map of uniform-name → declared type, parsed from the shader
120
+ * sources via lightweight regex (not a full GLSL/WGSL grammar). Texture
121
+ * uniforms (`sampler2D`/`texture_2d`) are included; sampler bindings
122
+ * are not (they pair with textures by binding index).
123
+ *
124
+ * Reflection is best-effort and intended for CI drift-checks and editor
125
+ * tooling, not for runtime uniform binding decisions. The renderers do
126
+ * NOT consult this map; they bind uniforms by name from {@link uniforms}
127
+ * and let the underlying API resolve declared-but-unused entries.
128
+ */
129
+ getDeclaredUniforms() {
130
+ return {
131
+ glsl: this.glsl !== null ? parseGlslUniforms(this.glsl.vertex, this.glsl.fragment) : {},
132
+ wgsl: this.wgsl !== null ? parseWgslUniforms(this.wgsl) : {},
133
+ };
134
+ }
135
+ /**
136
+ * Compare declared uniform names between the GLSL and WGSL sources.
137
+ * Returns lists of names declared in only one language. Use in CI to
138
+ * catch drift when both languages should expose the same logical
139
+ * uniforms. When only one language is provided, returns empty arrays.
140
+ *
141
+ * Auto-bound uniforms (`u_projection`, `u_translation`, `u_tint`,
142
+ * `u_texture`) are excluded from the comparison since the GLSL source
143
+ * declares them at the top-level uniform scope while the WGSL source
144
+ * receives them via the `@group(0)` mesh-uniforms struct and the
145
+ * `@group(1)` texture binding.
146
+ */
147
+ detectUniformDrift() {
148
+ if (this.glsl === null || this.wgsl === null) {
149
+ return { onlyInGlsl: [], onlyInWgsl: [] };
150
+ }
151
+ const declared = this.getDeclaredUniforms();
152
+ const glslNames = new Set(Object.keys(declared.glsl).filter(n => !autoBoundUniformNames.has(n)));
153
+ const wgslNames = new Set(Object.keys(declared.wgsl).filter(n => !autoBoundUniformNames.has(n)));
154
+ const onlyInGlsl = [];
155
+ const onlyInWgsl = [];
156
+ for (const name of glslNames) {
157
+ if (!wgslNames.has(name))
158
+ onlyInGlsl.push(name);
159
+ }
160
+ for (const name of wgslNames) {
161
+ if (!glslNames.has(name))
162
+ onlyInWgsl.push(name);
163
+ }
164
+ return { onlyInGlsl, onlyInWgsl };
165
+ }
166
+ /**
167
+ * Release GPU resources cached against this `MeshShader` on every
168
+ * backend that has compiled it. Safe to call multiple times. After
169
+ * destroy, the shader can still be re-used — renderers will recompile
170
+ * on next draw — but typical usage is to drop the reference.
171
+ */
172
+ destroy() {
173
+ for (const callback of this._disposeCallbacks) {
174
+ callback();
175
+ }
176
+ this._disposeCallbacks.clear();
177
+ }
178
+ /**
179
+ * Internal hook for renderers to register a per-shader-instance cleanup
180
+ * callback (release compiled program, pipeline, or bind groups). The
181
+ * callback fires on {@link destroy}; renderers MUST also tolerate the
182
+ * shader being garbage-collected without destroy ever being called.
183
+ *
184
+ * @internal
185
+ */
186
+ _onDispose(callback) {
187
+ this._disposeCallbacks.add(callback);
188
+ }
189
+ }
190
+ const autoBoundUniformNames = new Set(['u_projection', 'u_translation', 'u_tint', 'u_texture', 'u_mesh']);
191
+ const glslUniformPattern = /\buniform\s+(?:mediump\s+|highp\s+|lowp\s+|)(\w+)\s+(\w+)[^;]*;/g;
192
+ const wgslUserUniformPattern = /@group\(\s*2\s*\)\s*@binding\(\s*\d+\s*\)\s*var(?:<[^>]+>|)\s+(\w+)\s*:\s*([^;]+);/g;
193
+ /**
194
+ * Strip line and block comments from a shader source so the uniform
195
+ * regexes don't match commented-out declarations. Conservative: works
196
+ * for both GLSL and WGSL syntax (both use `//` and `/* ... *\/`).
197
+ */
198
+ function stripComments(source) {
199
+ return source.replaceAll(/\/\*[\s\S]*?\*\//g, '').replaceAll(/\/\/[^\n]*/g, '');
200
+ }
201
+ function parseGlslUniforms(vertex, fragment) {
202
+ const result = {};
203
+ for (const source of [vertex, fragment]) {
204
+ const stripped = stripComments(source);
205
+ glslUniformPattern.lastIndex = 0;
206
+ let match;
207
+ while ((match = glslUniformPattern.exec(stripped)) !== null) {
208
+ const [, type, name] = match;
209
+ result[name] = type;
210
+ }
211
+ }
212
+ return result;
213
+ }
214
+ function parseWgslUniforms(source) {
215
+ const result = {};
216
+ const stripped = stripComments(source);
217
+ // User uniforms in @group(2). Each user-uniform binding is either:
218
+ // - var<uniform> u_user: SomeStruct;
219
+ // - var u_extraTex: texture_2d<f32>;
220
+ // We extract the name and the (trimmed) type expression.
221
+ wgslUserUniformPattern.lastIndex = 0;
222
+ let match;
223
+ while ((match = wgslUserUniformPattern.exec(stripped)) !== null) {
224
+ const [, name, type] = match;
225
+ result[name] = type.trim();
226
+ }
227
+ return result;
228
+ }
229
+
230
+ export { MeshShader };
231
+ //# sourceMappingURL=MeshShader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MeshShader.js","sources":["../../../../../src/rendering/mesh/MeshShader.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Color } from '@/core/Color';
2
- import { Container } from '@/rendering/Container';
3
2
  import { Vector } from '@/math/Vector';
3
+ import { Container } from '@/rendering/Container';
4
4
  import { Mesh } from '@/rendering/mesh/Mesh';
5
5
  import type { RenderNode } from '@/rendering/RenderNode';
6
6
  /**
@@ -50,9 +50,9 @@ export declare class Graphics extends Container {
50
50
  /** Draw a stroked line between two explicit points, independent of the current pen position. */
51
51
  drawLine(startX: number, startY: number, endX: number, endY: number): this;
52
52
  /** Draw a stroked polyline from a flat `[x0,y0, x1,y1, ...]` coordinate array. */
53
- drawPath(path: Array<number>): this;
53
+ drawPath(path: number[]): this;
54
54
  /** Fill a closed polygon defined by `[x0,y0, x1,y1, ...]` and optionally stroke its outline. */
55
- drawPolygon(path: Array<number>): this;
55
+ drawPolygon(path: number[]): this;
56
56
  /** Fill a circle and optionally stroke its outline if `lineWidth > 0`. */
57
57
  drawCircle(centerX: number, centerY: number, radius: number): this;
58
58
  /** Fill an ellipse and optionally stroke its outline if `lineWidth > 0`. */
@@ -1,8 +1,8 @@
1
1
  import { Color } from '../../core/Color.js';
2
- import { Container } from '../Container.js';
3
- import { quadraticCurveTo, bezierCurveTo, tau, clamp } from '../../math/utils.js';
4
2
  import { buildLine, buildPath, buildPolygon, buildCircle, buildEllipse, buildStar, buildRectangle } from '../../math/geometry.js';
3
+ import { quadraticCurveTo, bezierCurveTo, tau, clamp } from '../../math/utils.js';
5
4
  import { Vector } from '../../math/Vector.js';
5
+ import { Container } from '../Container.js';
6
6
  import { Mesh } from '../mesh/Mesh.js';
7
7
 
8
8
  /**
@@ -109,7 +109,7 @@ class Graphics extends Container {
109
109
  const inDirY = inY / inLen;
110
110
  const outDirX = outX / outLen;
111
111
  const outDirY = outY / outLen;
112
- const dot = clamp((inDirX * outDirX) + (inDirY * outDirY), -1, 1);
112
+ const dot = clamp(inDirX * outDirX + inDirY * outDirY, -1, 1);
113
113
  const angle = Math.acos(dot);
114
114
  if (angle === 0 || angle === Math.PI) {
115
115
  return this.lineTo(x1, y1);
@@ -118,16 +118,16 @@ class Graphics extends Container {
118
118
  if (!Number.isFinite(distanceToTangent) || distanceToTangent > inLen || distanceToTangent > outLen) {
119
119
  return this.lineTo(x1, y1);
120
120
  }
121
- const startX = x1 - (inDirX * distanceToTangent);
122
- const startY = y1 - (inDirY * distanceToTangent);
123
- const endX = x1 + (outDirX * distanceToTangent);
124
- const endY = y1 + (outDirY * distanceToTangent);
125
- const cross = (inDirX * outDirY) - (inDirY * outDirX);
121
+ const startX = x1 - inDirX * distanceToTangent;
122
+ const startY = y1 - inDirY * distanceToTangent;
123
+ const endX = x1 + outDirX * distanceToTangent;
124
+ const endY = y1 + outDirY * distanceToTangent;
125
+ const cross = inDirX * outDirY - inDirY * outDirX;
126
126
  const leftTurn = cross > 0;
127
127
  const normalX = leftTurn ? -inDirY : inDirY;
128
128
  const normalY = leftTurn ? inDirX : -inDirX;
129
- const centerX = startX + (normalX * r);
130
- const centerY = startY + (normalY * r);
129
+ const centerX = startX + normalX * r;
130
+ const centerY = startY + normalY * r;
131
131
  const startAngle = Math.atan2(startY - centerY, startX - centerX);
132
132
  const endAngle = Math.atan2(endY - centerY, endX - centerX);
133
133
  this.lineTo(startX, startY);
@@ -153,8 +153,8 @@ class Graphics extends Container {
153
153
  const path = [];
154
154
  for (let i = 0; i <= segments; i++) {
155
155
  const ratio = i / segments;
156
- const angle = startAngle + (sweep * ratio);
157
- path.push(x + (Math.cos(angle) * r), y + (Math.sin(angle) * r));
156
+ const angle = startAngle + sweep * ratio;
157
+ path.push(x + Math.cos(angle) * r, y + Math.sin(angle) * r);
158
158
  }
159
159
  this.drawPath(path);
160
160
  this.moveTo(path[path.length - 2], path[path.length - 1]);