@codexo/exojs 0.8.4 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (470) hide show
  1. package/CHANGELOG.md +99 -0
  2. package/README.md +34 -13
  3. package/dist/esm/animation/Tween.d.ts +20 -3
  4. package/dist/esm/animation/Tween.js +16 -8
  5. package/dist/esm/animation/Tween.js.map +1 -1
  6. package/dist/esm/animation/TweenManager.d.ts +16 -1
  7. package/dist/esm/animation/TweenManager.js +27 -2
  8. package/dist/esm/animation/TweenManager.js.map +1 -1
  9. package/dist/esm/audio/AudioAnalyser.d.ts +2 -0
  10. package/dist/esm/audio/AudioAnalyser.js +24 -9
  11. package/dist/esm/audio/AudioAnalyser.js.map +1 -1
  12. package/dist/esm/audio/AudioBus.d.ts +1 -0
  13. package/dist/esm/audio/AudioBus.js +8 -4
  14. package/dist/esm/audio/AudioBus.js.map +1 -1
  15. package/dist/esm/audio/AudioListener.d.ts +1 -0
  16. package/dist/esm/audio/AudioListener.js +7 -5
  17. package/dist/esm/audio/AudioListener.js.map +1 -1
  18. package/dist/esm/audio/AudioManager.d.ts +8 -2
  19. package/dist/esm/audio/AudioManager.js +14 -1
  20. package/dist/esm/audio/AudioManager.js.map +1 -1
  21. package/dist/esm/audio/BeatDetector.d.ts +2 -0
  22. package/dist/esm/audio/BeatDetector.js +27 -661
  23. package/dist/esm/audio/BeatDetector.js.map +1 -1
  24. package/dist/esm/audio/Music.d.ts +1 -0
  25. package/dist/esm/audio/Music.js +7 -3
  26. package/dist/esm/audio/Music.js.map +1 -1
  27. package/dist/esm/audio/OscillatorSound.d.ts +1 -0
  28. package/dist/esm/audio/OscillatorSound.js +7 -3
  29. package/dist/esm/audio/OscillatorSound.js.map +1 -1
  30. package/dist/esm/audio/Sound.d.ts +1 -0
  31. package/dist/esm/audio/Sound.js +7 -3
  32. package/dist/esm/audio/Sound.js.map +1 -1
  33. package/dist/esm/audio/audio-context.d.ts +2 -2
  34. package/dist/esm/audio/audio-context.js +4 -4
  35. package/dist/esm/audio/audio-context.js.map +1 -1
  36. package/dist/esm/audio/filters/ChorusFilter.d.ts +1 -0
  37. package/dist/esm/audio/filters/ChorusFilter.js +7 -3
  38. package/dist/esm/audio/filters/ChorusFilter.js.map +1 -1
  39. package/dist/esm/audio/filters/CompressorFilter.d.ts +1 -0
  40. package/dist/esm/audio/filters/CompressorFilter.js +7 -3
  41. package/dist/esm/audio/filters/CompressorFilter.js.map +1 -1
  42. package/dist/esm/audio/filters/DelayFilter.d.ts +1 -0
  43. package/dist/esm/audio/filters/DelayFilter.js +7 -3
  44. package/dist/esm/audio/filters/DelayFilter.js.map +1 -1
  45. package/dist/esm/audio/filters/EqualizerFilter.d.ts +1 -0
  46. package/dist/esm/audio/filters/EqualizerFilter.js +7 -3
  47. package/dist/esm/audio/filters/EqualizerFilter.js.map +1 -1
  48. package/dist/esm/audio/filters/GranularFilter.js +1 -86
  49. package/dist/esm/audio/filters/GranularFilter.js.map +1 -1
  50. package/dist/esm/audio/filters/HighpassFilter.d.ts +1 -0
  51. package/dist/esm/audio/filters/HighpassFilter.js +7 -3
  52. package/dist/esm/audio/filters/HighpassFilter.js.map +1 -1
  53. package/dist/esm/audio/filters/LowpassFilter.d.ts +1 -0
  54. package/dist/esm/audio/filters/LowpassFilter.js +7 -3
  55. package/dist/esm/audio/filters/LowpassFilter.js.map +1 -1
  56. package/dist/esm/audio/filters/PitchShiftFilter.js +1 -71
  57. package/dist/esm/audio/filters/PitchShiftFilter.js.map +1 -1
  58. package/dist/esm/audio/filters/ReverbFilter.d.ts +1 -0
  59. package/dist/esm/audio/filters/ReverbFilter.js +7 -3
  60. package/dist/esm/audio/filters/ReverbFilter.js.map +1 -1
  61. package/dist/esm/audio/filters/VocoderFilter.js +1 -89
  62. package/dist/esm/audio/filters/VocoderFilter.js.map +1 -1
  63. package/dist/esm/audio/filters/WorkletFilter.d.ts +2 -0
  64. package/dist/esm/audio/filters/WorkletFilter.js +10 -5
  65. package/dist/esm/audio/filters/WorkletFilter.js.map +1 -1
  66. package/dist/esm/audio/index.d.ts +15 -10
  67. package/dist/esm/audio/worklet/registerWorklet.d.ts +1 -1
  68. package/dist/esm/audio/worklet/registerWorklet.js +2 -2
  69. package/dist/esm/audio/worklet/registerWorklet.js.map +1 -1
  70. package/dist/esm/audio/worklets/beat-detector.worklet.d.ts +1 -0
  71. package/dist/esm/audio/worklets/beat-detector.worklet.js +647 -0
  72. package/dist/esm/audio/worklets/beat-detector.worklet.js.map +1 -0
  73. package/dist/esm/audio/worklets/granular.worklet.d.ts +1 -0
  74. package/dist/esm/audio/worklets/granular.worklet.js +89 -0
  75. package/dist/esm/audio/worklets/granular.worklet.js.map +1 -0
  76. package/dist/esm/audio/worklets/pitch-shift.worklet.d.ts +1 -0
  77. package/dist/esm/audio/worklets/pitch-shift.worklet.js +74 -0
  78. package/dist/esm/audio/worklets/pitch-shift.worklet.js.map +1 -0
  79. package/dist/esm/audio/worklets/vocoder.worklet.d.ts +1 -0
  80. package/dist/esm/audio/worklets/vocoder.worklet.js +92 -0
  81. package/dist/esm/audio/worklets/vocoder.worklet.js.map +1 -0
  82. package/dist/esm/core/Application.d.ts +86 -29
  83. package/dist/esm/core/Application.js +157 -47
  84. package/dist/esm/core/Application.js.map +1 -1
  85. package/dist/esm/core/Color.d.ts +0 -8
  86. package/dist/esm/core/Color.js +0 -24
  87. package/dist/esm/core/Color.js.map +1 -1
  88. package/dist/esm/core/Perf.d.ts +23 -0
  89. package/dist/esm/core/Perf.js +49 -0
  90. package/dist/esm/core/Perf.js.map +1 -0
  91. package/dist/esm/core/Scene.d.ts +40 -80
  92. package/dist/esm/core/Scene.js +63 -43
  93. package/dist/esm/core/Scene.js.map +1 -1
  94. package/dist/esm/core/SceneManager.d.ts +11 -25
  95. package/dist/esm/core/SceneManager.js +37 -100
  96. package/dist/esm/core/SceneManager.js.map +1 -1
  97. package/dist/esm/core/SceneNode.d.ts +28 -17
  98. package/dist/esm/core/SceneNode.js +66 -42
  99. package/dist/esm/core/SceneNode.js.map +1 -1
  100. package/dist/esm/core/Signal.d.ts +24 -28
  101. package/dist/esm/core/Signal.js +64 -50
  102. package/dist/esm/core/Signal.js.map +1 -1
  103. package/dist/esm/core/Timer.d.ts +1 -0
  104. package/dist/esm/core/Timer.js +3 -0
  105. package/dist/esm/core/Timer.js.map +1 -1
  106. package/dist/esm/core/capabilities.d.ts +2 -0
  107. package/dist/esm/core/capabilities.js +15 -0
  108. package/dist/esm/core/capabilities.js.map +1 -1
  109. package/dist/esm/core/index.d.ts +1 -0
  110. package/dist/esm/core/types.d.ts +1 -1
  111. package/dist/esm/core/utils.d.ts +12 -0
  112. package/dist/esm/core/utils.js +18 -1
  113. package/dist/esm/core/utils.js.map +1 -1
  114. package/dist/esm/debug/BoundingBoxesLayer.js +1 -1
  115. package/dist/esm/debug/BoundingBoxesLayer.js.map +1 -1
  116. package/dist/esm/debug/HitTestLayer.js +1 -1
  117. package/dist/esm/debug/HitTestLayer.js.map +1 -1
  118. package/dist/esm/debug/PerformanceLayer.js +1 -2
  119. package/dist/esm/debug/PerformanceLayer.js.map +1 -1
  120. package/dist/esm/debug/PointerStackLayer.js +1 -2
  121. package/dist/esm/debug/PointerStackLayer.js.map +1 -1
  122. package/dist/esm/debug/RenderPassInspectorLayer.js +1 -2
  123. package/dist/esm/debug/RenderPassInspectorLayer.js.map +1 -1
  124. package/dist/esm/index.js +37 -10
  125. package/dist/esm/index.js.map +1 -1
  126. package/dist/esm/input/InputManager.d.ts +1 -0
  127. package/dist/esm/input/InputManager.js +30 -3
  128. package/dist/esm/input/InputManager.js.map +1 -1
  129. package/dist/esm/input/InteractionManager.d.ts +5 -2
  130. package/dist/esm/input/InteractionManager.js +29 -18
  131. package/dist/esm/input/InteractionManager.js.map +1 -1
  132. package/dist/esm/input/Pointer.js +3 -2
  133. package/dist/esm/input/Pointer.js.map +1 -1
  134. package/dist/esm/input/internal/interactionManagerRegistry.d.ts +9 -0
  135. package/dist/esm/input/internal/interactionManagerRegistry.js +10 -0
  136. package/dist/esm/input/internal/interactionManagerRegistry.js.map +1 -0
  137. package/dist/esm/math/AbstractVector.d.ts +1 -7
  138. package/dist/esm/math/AbstractVector.js +6 -20
  139. package/dist/esm/math/AbstractVector.js.map +1 -1
  140. package/dist/esm/math/Circle.js +0 -2
  141. package/dist/esm/math/Circle.js.map +1 -1
  142. package/dist/esm/math/Collision.d.ts +9 -3
  143. package/dist/esm/math/Ellipse.d.ts +2 -5
  144. package/dist/esm/math/Ellipse.js +10 -7
  145. package/dist/esm/math/Ellipse.js.map +1 -1
  146. package/dist/esm/math/ObservableVector.d.ts +1 -1
  147. package/dist/esm/math/ObservableVector.js +3 -3
  148. package/dist/esm/math/ObservableVector.js.map +1 -1
  149. package/dist/esm/math/Polygon.d.ts +0 -2
  150. package/dist/esm/math/Polygon.js +1 -9
  151. package/dist/esm/math/Polygon.js.map +1 -1
  152. package/dist/esm/math/Rectangle.js +0 -2
  153. package/dist/esm/math/Rectangle.js.map +1 -1
  154. package/dist/esm/math/collision-detection.d.ts +19 -4
  155. package/dist/esm/math/collision-detection.js +61 -4
  156. package/dist/esm/math/collision-detection.js.map +1 -1
  157. package/dist/esm/math/swept-collision.d.ts +16 -12
  158. package/dist/esm/math/swept-collision.js +109 -19
  159. package/dist/esm/math/swept-collision.js.map +1 -1
  160. package/dist/esm/particles/ParticleSystem.d.ts +8 -5
  161. package/dist/esm/particles/ParticleSystem.js +10 -6
  162. package/dist/esm/particles/ParticleSystem.js.map +1 -1
  163. package/dist/esm/particles/distributions/{Gradient.d.ts → ColorGradient.d.ts} +5 -5
  164. package/dist/esm/particles/distributions/{Gradient.js → ColorGradient.js} +5 -5
  165. package/dist/esm/particles/distributions/ColorGradient.js.map +1 -0
  166. package/dist/esm/particles/distributions/Distribution.d.ts +2 -2
  167. package/dist/esm/particles/distributions/index.d.ts +2 -2
  168. package/dist/esm/particles/gpu/ParticleGpuState.js +1 -1
  169. package/dist/esm/particles/index.d.ts +1 -0
  170. package/dist/esm/particles/modules/ColorOverLifetime.d.ts +3 -3
  171. package/dist/esm/particles/modules/ColorOverLifetime.js.map +1 -1
  172. package/dist/esm/particles/modules/ColorOverSpeed.d.ts +3 -3
  173. package/dist/esm/particles/modules/ColorOverSpeed.js.map +1 -1
  174. package/dist/esm/particles/modules/UpdateModule.d.ts +2 -2
  175. package/dist/esm/particles/modules/UpdateModule.js +1 -1
  176. package/dist/esm/particles/modules/WgslContribution.d.ts +2 -2
  177. package/dist/esm/rendering/CallbackRenderPass.d.ts +1 -0
  178. package/dist/esm/rendering/CallbackRenderPass.js +1 -0
  179. package/dist/esm/rendering/CallbackRenderPass.js.map +1 -1
  180. package/dist/esm/rendering/Camera.d.ts +33 -0
  181. package/dist/esm/rendering/Camera.js +38 -0
  182. package/dist/esm/rendering/Camera.js.map +1 -0
  183. package/dist/esm/rendering/Container.d.ts +7 -25
  184. package/dist/esm/rendering/Container.js +25 -87
  185. package/dist/esm/rendering/Container.js.map +1 -1
  186. package/dist/esm/rendering/Drawable.d.ts +8 -10
  187. package/dist/esm/rendering/Drawable.js +12 -20
  188. package/dist/esm/rendering/Drawable.js.map +1 -1
  189. package/dist/esm/rendering/RenderBackend.d.ts +19 -0
  190. package/dist/esm/rendering/RenderNode.d.ts +82 -11
  191. package/dist/esm/rendering/RenderNode.js +133 -163
  192. package/dist/esm/rendering/RenderNode.js.map +1 -1
  193. package/dist/esm/rendering/RenderPass.d.ts +1 -0
  194. package/dist/esm/rendering/RenderStats.d.ts +9 -0
  195. package/dist/esm/rendering/RenderStats.js +2 -0
  196. package/dist/esm/rendering/RenderStats.js.map +1 -1
  197. package/dist/esm/rendering/RenderTarget.d.ts +13 -0
  198. package/dist/esm/rendering/RenderTarget.js +13 -0
  199. package/dist/esm/rendering/RenderTarget.js.map +1 -1
  200. package/dist/esm/rendering/RenderTargetPass.js +17 -0
  201. package/dist/esm/rendering/RenderTargetPass.js.map +1 -1
  202. package/dist/esm/rendering/RendererRegistry.d.ts +1 -0
  203. package/dist/esm/rendering/RendererRegistry.js +1 -0
  204. package/dist/esm/rendering/RendererRegistry.js.map +1 -1
  205. package/dist/esm/rendering/RenderingContext.d.ts +87 -0
  206. package/dist/esm/rendering/RenderingContext.js +157 -0
  207. package/dist/esm/rendering/RenderingContext.js.map +1 -0
  208. package/dist/esm/rendering/TransformBuffer.d.ts +38 -0
  209. package/dist/esm/rendering/TransformBuffer.js +116 -0
  210. package/dist/esm/rendering/TransformBuffer.js.map +1 -0
  211. package/dist/esm/rendering/View.d.ts +23 -0
  212. package/dist/esm/rendering/View.js +42 -0
  213. package/dist/esm/rendering/View.js.map +1 -1
  214. package/dist/esm/rendering/filters/WebGpuShaderFilter.js +5 -12
  215. package/dist/esm/rendering/filters/WebGpuShaderFilter.js.map +1 -1
  216. package/dist/esm/rendering/geometry/Geometry.d.ts +40 -0
  217. package/dist/esm/rendering/geometry/Geometry.js +228 -0
  218. package/dist/esm/rendering/geometry/Geometry.js.map +1 -0
  219. package/dist/esm/rendering/geometry/GeometryAttribute.d.ts +32 -0
  220. package/dist/esm/rendering/geometry/QuadGeometry.d.ts +5 -0
  221. package/dist/esm/rendering/gradient/Gradient.d.ts +34 -0
  222. package/dist/esm/rendering/gradient/Gradient.js +114 -0
  223. package/dist/esm/rendering/gradient/Gradient.js.map +1 -0
  224. package/dist/esm/rendering/gradient/LinearGradient.d.ts +10 -0
  225. package/dist/esm/rendering/gradient/LinearGradient.js +26 -0
  226. package/dist/esm/rendering/gradient/LinearGradient.js.map +1 -0
  227. package/dist/esm/rendering/gradient/RadialGradient.d.ts +10 -0
  228. package/dist/esm/rendering/gradient/RadialGradient.js +25 -0
  229. package/dist/esm/rendering/gradient/RadialGradient.js.map +1 -0
  230. package/dist/esm/rendering/index.d.ts +103 -59
  231. package/dist/esm/rendering/material/Material.d.ts +114 -0
  232. package/dist/esm/rendering/material/Material.js +111 -0
  233. package/dist/esm/rendering/material/Material.js.map +1 -0
  234. package/dist/esm/rendering/material/MaterialKey.d.ts +18 -0
  235. package/dist/esm/rendering/material/MaterialKey.js +82 -0
  236. package/dist/esm/rendering/material/MaterialKey.js.map +1 -0
  237. package/dist/esm/rendering/material/MeshMaterial.d.ts +16 -0
  238. package/dist/esm/rendering/material/MeshMaterial.js +21 -0
  239. package/dist/esm/rendering/material/MeshMaterial.js.map +1 -0
  240. package/dist/esm/rendering/{mesh/MeshShader.d.ts → material/ShaderSource.d.ts} +30 -62
  241. package/dist/esm/rendering/{mesh/MeshShader.js → material/ShaderSource.js} +36 -62
  242. package/dist/esm/rendering/material/ShaderSource.js.map +1 -0
  243. package/dist/esm/rendering/material/SpriteMaterial.d.ts +15 -0
  244. package/dist/esm/rendering/material/SpriteMaterial.js +20 -0
  245. package/dist/esm/rendering/material/SpriteMaterial.js.map +1 -0
  246. package/dist/esm/rendering/mesh/Mesh.d.ts +29 -12
  247. package/dist/esm/rendering/mesh/Mesh.js +123 -4
  248. package/dist/esm/rendering/mesh/Mesh.js.map +1 -1
  249. package/dist/esm/rendering/pass/RenderPassCoordinator.d.ts +63 -0
  250. package/dist/esm/rendering/pass/RenderPassDescriptor.d.ts +48 -0
  251. package/dist/esm/rendering/pass/RenderPassDescriptor.js +16 -0
  252. package/dist/esm/rendering/pass/RenderPassDescriptor.js.map +1 -0
  253. package/dist/esm/rendering/plan/RenderCommand.d.ts +67 -0
  254. package/dist/esm/rendering/plan/RenderCommand.js +94 -0
  255. package/dist/esm/rendering/plan/RenderCommand.js.map +1 -0
  256. package/dist/esm/rendering/plan/RenderEffectExecutor.d.ts +10 -0
  257. package/dist/esm/rendering/plan/RenderEffectExecutor.js +159 -0
  258. package/dist/esm/rendering/plan/RenderEffectExecutor.js.map +1 -0
  259. package/dist/esm/rendering/plan/RenderPlan.d.ts +23 -0
  260. package/dist/esm/rendering/plan/RenderPlan.js +12 -0
  261. package/dist/esm/rendering/plan/RenderPlan.js.map +1 -0
  262. package/dist/esm/rendering/plan/RenderPlanBuilder.d.ts +31 -0
  263. package/dist/esm/rendering/plan/RenderPlanBuilder.js +242 -0
  264. package/dist/esm/rendering/plan/RenderPlanBuilder.js.map +1 -0
  265. package/dist/esm/rendering/plan/RenderPlanOptimizer.d.ts +10 -0
  266. package/dist/esm/rendering/plan/RenderPlanOptimizer.js +180 -0
  267. package/dist/esm/rendering/plan/RenderPlanOptimizer.js.map +1 -0
  268. package/dist/esm/rendering/plan/RenderPlanPlayer.d.ts +9 -0
  269. package/dist/esm/rendering/plan/RenderPlanPlayer.js +56 -0
  270. package/dist/esm/rendering/plan/RenderPlanPlayer.js.map +1 -0
  271. package/dist/esm/rendering/plan/RenderScope.d.ts +70 -0
  272. package/dist/esm/rendering/plan/RenderScope.js +16 -0
  273. package/dist/esm/rendering/plan/RenderScope.js.map +1 -0
  274. package/dist/esm/rendering/plan/playRenderTree.d.ts +4 -0
  275. package/dist/esm/rendering/plan/playRenderTree.js +19 -0
  276. package/dist/esm/rendering/plan/playRenderTree.js.map +1 -0
  277. package/dist/esm/rendering/shader/Shader.d.ts +1 -0
  278. package/dist/esm/rendering/shader/Shader.js +1 -0
  279. package/dist/esm/rendering/shader/Shader.js.map +1 -1
  280. package/dist/esm/rendering/shader/ShaderUniform.d.ts +1 -0
  281. package/dist/esm/rendering/shader/ShaderUniform.js +1 -0
  282. package/dist/esm/rendering/shader/ShaderUniform.js.map +1 -1
  283. package/dist/esm/rendering/sprite/Sprite.d.ts +25 -3
  284. package/dist/esm/rendering/sprite/Sprite.js +48 -15
  285. package/dist/esm/rendering/sprite/Sprite.js.map +1 -1
  286. package/dist/esm/rendering/sprite/spriteMaterialSources.d.ts +36 -0
  287. package/dist/esm/rendering/sprite/spriteMaterialSources.js +128 -0
  288. package/dist/esm/rendering/sprite/spriteMaterialSources.js.map +1 -0
  289. package/dist/esm/rendering/text/AbstractText.d.ts +36 -0
  290. package/dist/esm/rendering/text/AbstractText.js +49 -0
  291. package/dist/esm/rendering/text/AbstractText.js.map +1 -0
  292. package/dist/esm/rendering/text/BitmapText.d.ts +97 -0
  293. package/dist/esm/rendering/text/BitmapText.js +220 -0
  294. package/dist/esm/rendering/text/BitmapText.js.map +1 -0
  295. package/dist/esm/rendering/text/BmFont.d.ts +50 -0
  296. package/dist/esm/rendering/text/BmFont.js +24 -0
  297. package/dist/esm/rendering/text/BmFont.js.map +1 -0
  298. package/dist/esm/rendering/text/GlyphAtlas.d.ts +104 -0
  299. package/dist/esm/rendering/text/GlyphAtlas.js +347 -0
  300. package/dist/esm/rendering/text/GlyphAtlas.js.map +1 -0
  301. package/dist/esm/rendering/text/GlyphAtlasPool.d.ts +40 -0
  302. package/dist/esm/rendering/text/GlyphAtlasPool.js +67 -0
  303. package/dist/esm/rendering/text/GlyphAtlasPool.js.map +1 -0
  304. package/dist/esm/rendering/text/GlyphSdf.d.ts +92 -0
  305. package/dist/esm/rendering/text/GlyphSdf.js +220 -0
  306. package/dist/esm/rendering/text/GlyphSdf.js.map +1 -0
  307. package/dist/esm/rendering/text/HTMLText.d.ts +107 -0
  308. package/dist/esm/rendering/text/HTMLText.js +284 -0
  309. package/dist/esm/rendering/text/HTMLText.js.map +1 -0
  310. package/dist/esm/rendering/text/LayoutOptions.d.ts +30 -0
  311. package/dist/esm/rendering/text/Text.d.ts +89 -20
  312. package/dist/esm/rendering/text/Text.js +176 -101
  313. package/dist/esm/rendering/text/Text.js.map +1 -1
  314. package/dist/esm/rendering/text/TextLayout.d.ts +20 -8
  315. package/dist/esm/rendering/text/TextLayout.js +234 -25
  316. package/dist/esm/rendering/text/TextLayout.js.map +1 -1
  317. package/dist/esm/rendering/text/TextStyle.d.ts +154 -87
  318. package/dist/esm/rendering/text/TextStyle.js +257 -203
  319. package/dist/esm/rendering/text/TextStyle.js.map +1 -1
  320. package/dist/esm/rendering/text/types.d.ts +73 -13
  321. package/dist/esm/rendering/texture/DataTexture.d.ts +5 -0
  322. package/dist/esm/rendering/texture/DataTexture.js +7 -0
  323. package/dist/esm/rendering/texture/DataTexture.js.map +1 -1
  324. package/dist/esm/rendering/texture/Texture.d.ts +1 -0
  325. package/dist/esm/rendering/texture/Texture.js +1 -0
  326. package/dist/esm/rendering/texture/Texture.js.map +1 -1
  327. package/dist/esm/rendering/types.d.ts +3 -1
  328. package/dist/esm/rendering/types.js +2 -0
  329. package/dist/esm/rendering/types.js.map +1 -1
  330. package/dist/esm/rendering/video/Video.d.ts +5 -8
  331. package/dist/esm/rendering/video/Video.js +12 -13
  332. package/dist/esm/rendering/video/Video.js.map +1 -1
  333. package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts +40 -0
  334. package/dist/esm/rendering/webgl2/WebGl2Backend.js +344 -27
  335. package/dist/esm/rendering/webgl2/WebGl2Backend.js.map +1 -1
  336. package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.d.ts +22 -2
  337. package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.js +404 -112
  338. package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.js.map +1 -1
  339. package/dist/esm/rendering/webgl2/WebGl2PassCoordinator.d.ts +57 -0
  340. package/dist/esm/rendering/webgl2/WebGl2PassCoordinator.js +79 -0
  341. package/dist/esm/rendering/webgl2/WebGl2PassCoordinator.js.map +1 -0
  342. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.d.ts +12 -0
  343. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js +214 -58
  344. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js.map +1 -1
  345. package/dist/esm/rendering/webgl2/WebGl2StencilClipper.d.ts +34 -0
  346. package/dist/esm/rendering/webgl2/WebGl2StencilClipper.js +169 -0
  347. package/dist/esm/rendering/webgl2/WebGl2StencilClipper.js.map +1 -0
  348. package/dist/esm/rendering/webgl2/WebGl2TextRenderer.d.ts +56 -0
  349. package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js +486 -0
  350. package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js.map +1 -0
  351. package/dist/esm/rendering/webgl2/glsl/mesh.frag.js +1 -1
  352. package/dist/esm/rendering/webgl2/glsl/mesh.vert.js +1 -1
  353. package/dist/esm/rendering/webgl2/glsl/stencil-clip.frag.js +4 -0
  354. package/dist/esm/rendering/webgl2/glsl/stencil-clip.frag.js.map +1 -0
  355. package/dist/esm/rendering/webgl2/glsl/stencil-clip.vert.js +4 -0
  356. package/dist/esm/rendering/webgl2/glsl/stencil-clip.vert.js.map +1 -0
  357. package/dist/esm/rendering/webgl2/glsl/text-color.frag.js +4 -0
  358. package/dist/esm/rendering/webgl2/glsl/text-color.frag.js.map +1 -0
  359. package/dist/esm/rendering/webgl2/glsl/text-msdf.frag.js +4 -0
  360. package/dist/esm/rendering/webgl2/glsl/text-msdf.frag.js.map +1 -0
  361. package/dist/esm/rendering/webgl2/glsl/text-sdf.frag.js +4 -0
  362. package/dist/esm/rendering/webgl2/glsl/text-sdf.frag.js.map +1 -0
  363. package/dist/esm/rendering/webgl2/glsl/text.vert.js +4 -0
  364. package/dist/esm/rendering/webgl2/glsl/text.vert.js.map +1 -0
  365. package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts +50 -0
  366. package/dist/esm/rendering/webgpu/WebGpuBackend.js +151 -27
  367. package/dist/esm/rendering/webgpu/WebGpuBackend.js.map +1 -1
  368. package/dist/esm/rendering/webgpu/WebGpuBlendState.js +26 -0
  369. package/dist/esm/rendering/webgpu/WebGpuBlendState.js.map +1 -1
  370. package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.js +22 -17
  371. package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.js.map +1 -1
  372. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.d.ts +26 -2
  373. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js +511 -89
  374. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js.map +1 -1
  375. package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js +13 -17
  376. package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js.map +1 -1
  377. package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.d.ts +141 -0
  378. package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.js +270 -0
  379. package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.js.map +1 -0
  380. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.d.ts +16 -0
  381. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js +344 -27
  382. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js.map +1 -1
  383. package/dist/esm/rendering/webgpu/WebGpuStencilClipper.d.ts +57 -0
  384. package/dist/esm/rendering/webgpu/WebGpuStencilClipper.js +257 -0
  385. package/dist/esm/rendering/webgpu/WebGpuStencilClipper.js.map +1 -0
  386. package/dist/esm/rendering/webgpu/WebGpuStencilState.d.ts +14 -0
  387. package/dist/esm/rendering/webgpu/WebGpuStencilState.js +36 -0
  388. package/dist/esm/rendering/webgpu/WebGpuStencilState.js.map +1 -0
  389. package/dist/esm/rendering/webgpu/WebGpuTextRenderer.d.ts +70 -0
  390. package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js +775 -0
  391. package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js.map +1 -0
  392. package/dist/esm/rendering/webgpu/WebGpuTransformStorage.d.ts +16 -0
  393. package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js +57 -0
  394. package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js.map +1 -0
  395. package/dist/esm/rendering/webgpu/compute/WebGpuComputePipeline.js +96 -0
  396. package/dist/esm/rendering/webgpu/compute/WebGpuComputePipeline.js.map +1 -0
  397. package/dist/esm/rendering/webgpu/compute/WebGpuStorageBuffer.js +68 -0
  398. package/dist/esm/rendering/webgpu/compute/WebGpuStorageBuffer.js.map +1 -0
  399. package/dist/esm/resources/Asset.d.ts +23 -0
  400. package/dist/esm/resources/Asset.js +23 -0
  401. package/dist/esm/resources/Asset.js.map +1 -0
  402. package/dist/esm/resources/AssetDefinitions.d.ts +137 -0
  403. package/dist/esm/resources/Assets.d.ts +35 -0
  404. package/dist/esm/resources/Assets.js +32 -0
  405. package/dist/esm/resources/Assets.js.map +1 -0
  406. package/dist/esm/resources/IndexedDbDatabase.js +17 -1
  407. package/dist/esm/resources/IndexedDbDatabase.js.map +1 -1
  408. package/dist/esm/resources/IndexedDbStore.js +17 -1
  409. package/dist/esm/resources/IndexedDbStore.js.map +1 -1
  410. package/dist/esm/resources/JsonStore.d.ts +18 -0
  411. package/dist/esm/resources/JsonStore.js +62 -0
  412. package/dist/esm/resources/JsonStore.js.map +1 -0
  413. package/dist/esm/resources/Loader.d.ts +244 -18
  414. package/dist/esm/resources/Loader.js +456 -50
  415. package/dist/esm/resources/Loader.js.map +1 -1
  416. package/dist/esm/resources/LoadingQueue.d.ts +28 -0
  417. package/dist/esm/resources/LoadingQueue.js +59 -0
  418. package/dist/esm/resources/LoadingQueue.js.map +1 -0
  419. package/dist/esm/resources/factories/BmFontFactory.d.ts +25 -0
  420. package/dist/esm/resources/factories/BmFontFactory.js +96 -0
  421. package/dist/esm/resources/factories/BmFontFactory.js.map +1 -0
  422. package/dist/esm/resources/factories/CsvFactory.d.ts +35 -0
  423. package/dist/esm/resources/factories/CsvFactory.js +87 -0
  424. package/dist/esm/resources/factories/CsvFactory.js.map +1 -0
  425. package/dist/esm/resources/factories/ImageFactory.d.ts +14 -8
  426. package/dist/esm/resources/factories/ImageFactory.js +13 -6
  427. package/dist/esm/resources/factories/ImageFactory.js.map +1 -1
  428. package/dist/esm/resources/factories/MusicFactory.d.ts +8 -2
  429. package/dist/esm/resources/factories/MusicFactory.js +25 -14
  430. package/dist/esm/resources/factories/MusicFactory.js.map +1 -1
  431. package/dist/esm/resources/factories/SoundFactory.d.ts +2 -2
  432. package/dist/esm/resources/factories/SoundFactory.js.map +1 -1
  433. package/dist/esm/resources/factories/SubtitleFactory.d.ts +28 -0
  434. package/dist/esm/resources/factories/SubtitleFactory.js +203 -0
  435. package/dist/esm/resources/factories/SubtitleFactory.js.map +1 -0
  436. package/dist/esm/resources/factories/SvgFactory.d.ts +18 -1
  437. package/dist/esm/resources/factories/SvgFactory.js +21 -2
  438. package/dist/esm/resources/factories/SvgFactory.js.map +1 -1
  439. package/dist/esm/resources/factories/TextureFactory.d.ts +4 -4
  440. package/dist/esm/resources/factories/TextureFactory.js +8 -4
  441. package/dist/esm/resources/factories/TextureFactory.js.map +1 -1
  442. package/dist/esm/resources/factories/VideoFactory.d.ts +8 -2
  443. package/dist/esm/resources/factories/VideoFactory.js +27 -20
  444. package/dist/esm/resources/factories/VideoFactory.js.map +1 -1
  445. package/dist/esm/resources/factories/XmlFactory.d.ts +24 -0
  446. package/dist/esm/resources/factories/XmlFactory.js +37 -0
  447. package/dist/esm/resources/factories/XmlFactory.js.map +1 -0
  448. package/dist/esm/resources/index.d.ts +9 -1
  449. package/dist/esm/resources/tokens.d.ts +49 -3
  450. package/dist/esm/resources/tokens.js +50 -4
  451. package/dist/esm/resources/tokens.js.map +1 -1
  452. package/dist/exo.esm.js +15382 -8078
  453. package/dist/exo.esm.js.map +1 -1
  454. package/package.json +34 -16
  455. package/dist/esm/input/interaction-hooks.d.ts +0 -34
  456. package/dist/esm/input/interaction-hooks.js +0 -35
  457. package/dist/esm/input/interaction-hooks.js.map +0 -1
  458. package/dist/esm/particles/distributions/Gradient.js.map +0 -1
  459. package/dist/esm/rendering/mesh/MeshShader.js.map +0 -1
  460. package/dist/esm/rendering/text/DynamicGlyphAtlas.d.ts +0 -33
  461. package/dist/esm/rendering/text/DynamicGlyphAtlas.js +0 -134
  462. package/dist/esm/rendering/text/DynamicGlyphAtlas.js.map +0 -1
  463. package/dist/esm/rendering/text/atlas-singleton.d.ts +0 -7
  464. package/dist/esm/rendering/text/atlas-singleton.js +0 -17
  465. package/dist/esm/rendering/text/atlas-singleton.js.map +0 -1
  466. package/dist/esm/resources/factories/VttFactory.d.ts +0 -24
  467. package/dist/esm/resources/factories/VttFactory.js +0 -158
  468. package/dist/esm/resources/factories/VttFactory.js.map +0 -1
  469. package/dist/esm/vendor/webgl-debug.js +0 -1160
  470. package/dist/esm/vendor/webgl-debug.js.map +0 -1
@@ -33,11 +33,40 @@ class Mesh extends Drawable {
33
33
  indices;
34
34
  uvs;
35
35
  colors;
36
- shader;
36
+ /** Custom material attached to this mesh, or `null` for the default mesh path. */
37
+ material;
38
+ /** Source geometry when constructed from the geometry form, otherwise `null`. */
39
+ geometry;
37
40
  _texture;
38
41
  constructor(options) {
39
42
  super();
40
- const { vertices, indices = null, uvs = null, colors = null, texture = null, shader = null } = options;
43
+ const { texture = null, material = null } = options;
44
+ let vertices;
45
+ let indices;
46
+ let uvs;
47
+ let colors;
48
+ let geometry;
49
+ if (options.geometry !== undefined) {
50
+ if (options.vertices !== undefined) {
51
+ throw new Error('Mesh accepts either `vertices` or `geometry`, not both.');
52
+ }
53
+ geometry = options.geometry;
54
+ const data = readGeometry(geometry);
55
+ vertices = data.vertices;
56
+ uvs = data.uvs;
57
+ colors = data.colors;
58
+ indices = data.indices;
59
+ }
60
+ else {
61
+ if (options.vertices === undefined) {
62
+ throw new Error('Mesh requires either `vertices` or `geometry`.');
63
+ }
64
+ geometry = null;
65
+ vertices = options.vertices;
66
+ indices = options.indices ?? null;
67
+ uvs = options.uvs ?? null;
68
+ colors = options.colors ?? null;
69
+ }
41
70
  if (vertices.length === 0 || vertices.length % 2 !== 0) {
42
71
  throw new Error(`Mesh vertices must be a non-empty flat array of (x,y) pairs (got length ${vertices.length}).`);
43
72
  }
@@ -68,7 +97,8 @@ class Mesh extends Drawable {
68
97
  this.indices = indices;
69
98
  this.uvs = uvs;
70
99
  this.colors = colors;
71
- this.shader = shader;
100
+ this.material = material;
101
+ this.geometry = geometry;
72
102
  this._texture = texture;
73
103
  this.recomputeLocalBounds();
74
104
  }
@@ -109,11 +139,100 @@ class Mesh extends Drawable {
109
139
  if (y > maxY)
110
140
  maxY = y;
111
141
  }
112
- this.localBounds.set(minX, minY, maxX - minX, maxY - minY);
142
+ this.getLocalBounds().set(minX, minY, maxX - minX, maxY - minY);
113
143
  this._invalidateBoundsCascade();
114
144
  return this;
115
145
  }
116
146
  }
147
+ const positionAttributeNames = new Set(['a_position', 'position']);
148
+ const texcoordAttributeNames = new Set(['a_texcoord', 'texcoord', 'a_uv', 'uv']);
149
+ const colorAttributeNames = new Set(['a_color', 'color']);
150
+ const findAttribute = (attributes, names) => attributes.find(attribute => names.has(attribute.name));
151
+ /**
152
+ * Read a {@link Geometry}'s standard mesh attributes into the flat
153
+ * `vertices`/`uvs`/`colors` arrays the mesh renderers consume. Only the
154
+ * `triangle-list` topology and the canonical attribute layout (`f32` position
155
+ * and texcoord, `u8`/`u32`/`f32` color) are supported — this is the immediate
156
+ * (non-batched) bridge; shared GPU buffers and instancing arrive later.
157
+ */
158
+ function readGeometry(geometry) {
159
+ if (geometry.topology !== 'triangle-list') {
160
+ throw new Error(`Mesh only supports triangle-list geometry (got "${geometry.topology}").`);
161
+ }
162
+ const position = findAttribute(geometry.attributes, positionAttributeNames);
163
+ if (position === undefined) {
164
+ throw new Error('Mesh geometry requires a position attribute named `a_position` or `position`.');
165
+ }
166
+ if (position.type !== 'f32' || position.size < 2) {
167
+ throw new Error('Mesh geometry position attribute must be a float vector with at least 2 components.');
168
+ }
169
+ const texcoord = findAttribute(geometry.attributes, texcoordAttributeNames);
170
+ if (texcoord !== undefined && (texcoord.type !== 'f32' || texcoord.size < 2)) {
171
+ throw new Error('Mesh geometry texcoord attribute must be a float vector with at least 2 components.');
172
+ }
173
+ const color = findAttribute(geometry.attributes, colorAttributeNames);
174
+ const vertexCount = geometry.vertexCount;
175
+ const { stride } = geometry;
176
+ const source = geometry.vertexData;
177
+ const view = source instanceof Float32Array ? new DataView(source.buffer, source.byteOffset, source.byteLength) : new DataView(source);
178
+ const vertices = new Float32Array(vertexCount * 2);
179
+ const uvs = texcoord !== undefined ? new Float32Array(vertexCount * 2) : null;
180
+ const colors = color !== undefined ? new Uint32Array(vertexCount) : null;
181
+ for (let i = 0; i < vertexCount; i++) {
182
+ const base = i * stride;
183
+ vertices[i * 2] = view.getFloat32(base + position.offset, true);
184
+ vertices[i * 2 + 1] = view.getFloat32(base + position.offset + 4, true);
185
+ if (uvs !== null && texcoord !== undefined) {
186
+ uvs[i * 2] = view.getFloat32(base + texcoord.offset, true);
187
+ uvs[i * 2 + 1] = view.getFloat32(base + texcoord.offset + 4, true);
188
+ }
189
+ if (colors !== null && color !== undefined) {
190
+ colors[i] = readPackedColor(view, base + color.offset, color);
191
+ }
192
+ }
193
+ const indices = readIndices(geometry.indices, vertexCount);
194
+ return { vertices, uvs, colors, indices };
195
+ }
196
+ /** Pack a geometry color attribute into the mesh's RGBA8 u32 representation. */
197
+ function readPackedColor(view, offset, attribute) {
198
+ if (attribute.type === 'u32' && attribute.size === 1) {
199
+ return view.getUint32(offset, true) >>> 0;
200
+ }
201
+ if (attribute.type === 'u8' && attribute.size === 4) {
202
+ const r = view.getUint8(offset);
203
+ const g = view.getUint8(offset + 1);
204
+ const b = view.getUint8(offset + 2);
205
+ const a = view.getUint8(offset + 3);
206
+ return (r | (g << 8) | (b << 16) | (a << 24)) >>> 0;
207
+ }
208
+ if (attribute.type === 'f32' && attribute.size === 4) {
209
+ const r = Math.round(clamp01(view.getFloat32(offset, true)) * 255);
210
+ const g = Math.round(clamp01(view.getFloat32(offset + 4, true)) * 255);
211
+ const b = Math.round(clamp01(view.getFloat32(offset + 8, true)) * 255);
212
+ const a = Math.round(clamp01(view.getFloat32(offset + 12, true)) * 255);
213
+ return (r | (g << 8) | (b << 16) | (a << 24)) >>> 0;
214
+ }
215
+ throw new Error('Mesh geometry color attribute must be u8x4, u32x1, or f32x4.');
216
+ }
217
+ function readIndices(indices, vertexCount) {
218
+ if (indices === null) {
219
+ return null;
220
+ }
221
+ if (indices instanceof Uint16Array) {
222
+ return indices;
223
+ }
224
+ if (vertexCount > 0xffff) {
225
+ throw new Error(`Mesh geometry with ${vertexCount} vertices exceeds the 16-bit index limit.`);
226
+ }
227
+ return Uint16Array.from(indices);
228
+ }
229
+ function clamp01(value) {
230
+ if (value < 0)
231
+ return 0;
232
+ if (value > 1)
233
+ return 1;
234
+ return value;
235
+ }
117
236
 
118
237
  export { Mesh };
119
238
  //# sourceMappingURL=Mesh.js.map
@@ -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,63 @@
1
+ import type { Matrix } from '@/math/Matrix';
2
+ import type { Rectangle } from '@/math/Rectangle';
3
+ import type { Geometry } from '../geometry/Geometry';
4
+ import type { RenderTarget } from '../RenderTarget';
5
+ import type { View } from '../View';
6
+ import type { RenderPassDescriptor, RenderPassLoad } from './RenderPassDescriptor';
7
+ /**
8
+ * Internal, backend-owned owner of render-pass lifecycle: target / view / clear
9
+ * orchestration, the scissor and stencil-clip stacks, and — on WebGPU, from
10
+ * phase 12D — the active `GPURenderPassEncoder`.
11
+ *
12
+ * There is no public RenderPass API. This abstraction exists so the WebGL2 and
13
+ * WebGPU backends can share the orchestration shape that geometric stencil
14
+ * clipping needs, while each maps it onto its own state model: WebGL2 onto
15
+ * ambient GL state (bound framebuffer, viewport, scissor, stencil), WebGPU onto
16
+ * explicit render passes built up front with their attachments.
17
+ * @internal
18
+ */
19
+ export interface RenderPassCoordinator {
20
+ /** The target the active pass draws into (the backend root when idle). */
21
+ readonly activeTarget: RenderTarget;
22
+ /** The view the active pass renders with. */
23
+ readonly activeView: View;
24
+ /** Whether a pass is currently open. */
25
+ readonly hasActivePass: boolean;
26
+ /** Open a pass for `descriptor`, applying its target / view / clear / stencil state. */
27
+ beginPass(descriptor: RenderPassDescriptor): void;
28
+ /** Close the active pass, flushing any pending draws into it. */
29
+ endPass(): void;
30
+ /**
31
+ * Run `body` inside a child pass described by `descriptor`, restoring the
32
+ * previous target and view afterwards — even if `body` throws. Preserves the
33
+ * save / restore semantics of {@link RenderTargetPass}.
34
+ */
35
+ withChildPass(descriptor: RenderPassDescriptor, body: () => void): void;
36
+ /** Push an axis-aligned scissor rectangle; nested rectangles intersect. */
37
+ pushScissorRect(bounds: Rectangle): void;
38
+ /** Pop the most recently pushed scissor rectangle. */
39
+ popScissorRect(): void;
40
+ /** Push a geometric stencil clip — the `shape` silhouette under `transform`. */
41
+ pushStencilClip(shape: Geometry, transform: Matrix): void;
42
+ /** Pop the most recently pushed stencil clip. */
43
+ popStencilClip(): void;
44
+ /**
45
+ * Decide whether `target` should be cleared or loaded given an explicit clear
46
+ * request. Centralizes the clear-vs-load / content-preservation decision so a
47
+ * render texture's contents survive across multiple passes in one frame.
48
+ */
49
+ resolveLoad(target: RenderTarget, clearRequested: boolean): RenderPassLoad;
50
+ }
51
+ /**
52
+ * Duck-typing host for backends that own a {@link RenderPassCoordinator}.
53
+ *
54
+ * Generic, `RenderBackend`-typed orchestration code ({@link RenderTargetPass},
55
+ * {@link RenderingContext.renderTo}) reaches the coordinator through this
56
+ * optional accessor and falls back to a legacy inline target/view save-restore
57
+ * when it is absent (e.g. test stub backends), mirroring the `_beginDrawPlan?`
58
+ * hook pattern used by `RenderPlanPlayer`.
59
+ * @internal
60
+ */
61
+ export interface RenderPassCoordinatorHost {
62
+ readonly _passCoordinator: RenderPassCoordinator;
63
+ }
@@ -0,0 +1,48 @@
1
+ import type { Color } from '@/core/Color';
2
+ import type { RenderTarget } from '../RenderTarget';
3
+ import type { View } from '../View';
4
+ /**
5
+ * Whether a render pass carries a stencil attachment.
6
+ *
7
+ * WebGL2 stencil is ambient per-target GL state, so this flag is largely
8
+ * informational there; the WebGPU backend (from phase 12D onwards) uses it to
9
+ * decide whether a pass descriptor needs a `depthStencilAttachment`.
10
+ * @internal
11
+ */
12
+ export declare enum StencilAttachmentMode {
13
+ None = 0,
14
+ Enabled = 1
15
+ }
16
+ /** Load behaviour for a pass's colour attachment. @internal */
17
+ export type RenderPassLoad = 'clear' | 'load';
18
+ /**
19
+ * Backend-agnostic description of a single render pass: which target and view
20
+ * it draws into, whether it clears or loads its colour attachment, and whether
21
+ * it carries a stencil attachment.
22
+ *
23
+ * WebGL2 maps this onto ambient framebuffer / viewport / scissor / stencil
24
+ * state; WebGPU (phase 12D onwards) maps it onto a `GPURenderPassEncoder`.
25
+ * @internal
26
+ */
27
+ export interface RenderPassDescriptor {
28
+ /** Target to draw into. `null` selects the backend's root (canvas) target. */
29
+ readonly target: RenderTarget | null;
30
+ /** View to render with. `null` inherits the target's current view. */
31
+ readonly view: View | null;
32
+ /** Whether the colour attachment is cleared or preserved when the pass begins. */
33
+ readonly load: RenderPassLoad;
34
+ /** Clear colour used when `load === 'clear'`. `null` keeps the backend's current clear colour. */
35
+ readonly clearColor: Color | null;
36
+ /** Whether this pass carries a stencil attachment. */
37
+ readonly stencil: StencilAttachmentMode;
38
+ }
39
+ /**
40
+ * Snapshot of the pass currently open on a {@link RenderPassCoordinator}. The
41
+ * WebGPU coordinator exposes the live encoder alongside these fields from phase
42
+ * 12D; the shared shape lives here so both backends agree on it.
43
+ * @internal
44
+ */
45
+ export interface ActiveRenderPass {
46
+ readonly view: View;
47
+ readonly stencilEnabled: boolean;
48
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Whether a render pass carries a stencil attachment.
3
+ *
4
+ * WebGL2 stencil is ambient per-target GL state, so this flag is largely
5
+ * informational there; the WebGPU backend (from phase 12D onwards) uses it to
6
+ * decide whether a pass descriptor needs a `depthStencilAttachment`.
7
+ * @internal
8
+ */
9
+ var StencilAttachmentMode;
10
+ (function (StencilAttachmentMode) {
11
+ StencilAttachmentMode[StencilAttachmentMode["None"] = 0] = "None";
12
+ StencilAttachmentMode[StencilAttachmentMode["Enabled"] = 1] = "Enabled";
13
+ })(StencilAttachmentMode || (StencilAttachmentMode = {}));
14
+
15
+ export { StencilAttachmentMode };
16
+ //# sourceMappingURL=RenderPassDescriptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RenderPassDescriptor.js","sources":["../../../../../src/rendering/pass/RenderPassDescriptor.ts"],"sourcesContent":[null],"names":[],"mappings":"AAKA;;;;;;;AAOG;IACS;AAAZ,CAAA,UAAY,qBAAqB,EAAA;AAC/B,IAAA,qBAAA,CAAA,qBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ;AACR,IAAA,qBAAA,CAAA,qBAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW;AACb,CAAC,EAHW,qBAAqB,KAArB,qBAAqB,GAAA,EAAA,CAAA,CAAA;;;;"}
@@ -0,0 +1,67 @@
1
+ import type { Drawable } from '@/rendering/Drawable';
2
+ import type { RenderBackend } from '@/rendering/RenderBackend';
3
+ import type { BlendModes } from '@/rendering/types';
4
+ /** @internal */
5
+ export declare const enum RenderEntryKind {
6
+ Draw = 0,
7
+ Group = 1,
8
+ Barrier = 2
9
+ }
10
+ /**
11
+ * @internal
12
+ *
13
+ * Stable material identity used for safe draw-command grouping and
14
+ * eventual instanced batching.
15
+ *
16
+ * - {@link pipelineKey} drives pipeline/program reuse: identical key ⇒
17
+ * identical GPU pipeline state (shader + blend + sampler). Two draws
18
+ * with the same pipeline key can be issued with a single pipeline bind.
19
+ * - {@link bindKey} drives texture-bind reuse: identical key ⇒ identical
20
+ * texture bindings. Two draws with the same bind key can share a bind
21
+ * group / texture-slot state.
22
+ *
23
+ * When the drawable carries a {@link Material}, both keys are taken
24
+ * directly from `material.pipelineKey` and `material.bindKey` (Phase 4+
25
+ * Material system). When the drawable uses its default path (no material),
26
+ * the keys are derived conservatively from renderer identity, blend mode,
27
+ * and texture identity so grouping never accidentally merges draws with
28
+ * incompatible state.
29
+ */
30
+ export interface MaterialKey {
31
+ readonly rendererId: number;
32
+ readonly blendMode: BlendModes;
33
+ readonly textureId: number;
34
+ readonly shaderId: number;
35
+ readonly pipelineKey: number;
36
+ readonly bindKey: number;
37
+ }
38
+ /** @internal */
39
+ export interface DrawCommand {
40
+ readonly kind: RenderEntryKind.Draw;
41
+ readonly drawable: Drawable;
42
+ nodeIndex: number;
43
+ seq: number;
44
+ zIndex: number;
45
+ material: MaterialKey;
46
+ /** Assigned by the optimizer; consecutive draws with the same groupIndex
47
+ * form a batch-safe unit. Undefined before optimisation. */
48
+ groupIndex?: number;
49
+ minX: number;
50
+ minY: number;
51
+ maxX: number;
52
+ maxY: number;
53
+ }
54
+ /**
55
+ * Derive a stable material key from the drawable.
56
+ *
57
+ * When the drawable carries a {@link Material} (e.g. a {@link MeshMaterial}
58
+ * or {@link SpriteMaterial}), the pipeline and bind keys are taken directly
59
+ * from the material so identically configured materials group together.
60
+ * When the drawable uses its default rendering path, both keys fall back
61
+ * to a conservative derivation from renderer identity, blend mode, and
62
+ * texture identity — keeping grouping safe but still enabling adjacency
63
+ * coalescing for default-pipeline draws of the same type.
64
+ *
65
+ * @internal
66
+ */
67
+ export declare const makeMaterialKey: (drawable: Drawable, backend: RenderBackend | null) => MaterialKey;
@@ -0,0 +1,94 @@
1
+ /** @internal */
2
+ var RenderEntryKind;
3
+ (function (RenderEntryKind) {
4
+ RenderEntryKind[RenderEntryKind["Draw"] = 0] = "Draw";
5
+ RenderEntryKind[RenderEntryKind["Group"] = 1] = "Group";
6
+ RenderEntryKind[RenderEntryKind["Barrier"] = 2] = "Barrier";
7
+ })(RenderEntryKind || (RenderEntryKind = {}));
8
+ const rendererIds = new WeakMap();
9
+ const constructorRendererIds = new WeakMap();
10
+ const textureIds = new WeakMap();
11
+ const shaderIds = new WeakMap();
12
+ let nextRendererId = 1;
13
+ let nextTextureId = 1;
14
+ let nextShaderId = 1;
15
+ const getOrCreateId = (map, target, allocate) => {
16
+ const cached = map.get(target);
17
+ if (cached !== undefined) {
18
+ return cached;
19
+ }
20
+ const id = allocate();
21
+ map.set(target, id);
22
+ return id;
23
+ };
24
+ const getRendererId = (drawable, backend) => {
25
+ const registry = backend?.rendererRegistry;
26
+ if (registry && typeof registry.resolve === 'function') {
27
+ try {
28
+ const renderer = registry.resolve(drawable);
29
+ if (renderer && typeof renderer === 'object') {
30
+ return getOrCreateId(rendererIds, renderer, () => nextRendererId++);
31
+ }
32
+ }
33
+ catch {
34
+ // Resolve can throw if no renderer is registered for a custom drawable.
35
+ // Fall back to a conservative constructor-based id.
36
+ }
37
+ }
38
+ const ctor = drawable.constructor;
39
+ if (ctor && typeof ctor === 'function') {
40
+ return getOrCreateId(constructorRendererIds, ctor, () => nextRendererId++);
41
+ }
42
+ return 0;
43
+ };
44
+ const getTextureId = (drawable) => {
45
+ const texture = drawable.texture;
46
+ if (texture && typeof texture === 'object') {
47
+ return getOrCreateId(textureIds, texture, () => nextTextureId++);
48
+ }
49
+ return -1;
50
+ };
51
+ const getShaderId = (drawable) => {
52
+ const shader = drawable.shader;
53
+ if (shader && typeof shader === 'object') {
54
+ return getOrCreateId(shaderIds, shader, () => nextShaderId++);
55
+ }
56
+ return -1;
57
+ };
58
+ const getMaterial = (drawable) => {
59
+ const material = drawable.material;
60
+ return material ?? null;
61
+ };
62
+ /**
63
+ * Derive a stable material key from the drawable.
64
+ *
65
+ * When the drawable carries a {@link Material} (e.g. a {@link MeshMaterial}
66
+ * or {@link SpriteMaterial}), the pipeline and bind keys are taken directly
67
+ * from the material so identically configured materials group together.
68
+ * When the drawable uses its default rendering path, both keys fall back
69
+ * to a conservative derivation from renderer identity, blend mode, and
70
+ * texture identity — keeping grouping safe but still enabling adjacency
71
+ * coalescing for default-pipeline draws of the same type.
72
+ *
73
+ * @internal
74
+ */
75
+ const makeMaterialKey = (drawable, backend) => {
76
+ const rendererId = getRendererId(drawable, backend);
77
+ const blendMode = drawable.blendMode;
78
+ const textureId = getTextureId(drawable);
79
+ const shaderId = getShaderId(drawable);
80
+ const material = getMaterial(drawable);
81
+ const pipelineKey = material !== null ? material.pipelineKey : rendererId * 31 + blendMode;
82
+ const bindKey = material !== null ? material.bindKey : rendererId * 31 + (textureId > 0 ? textureId : 0);
83
+ return {
84
+ rendererId,
85
+ blendMode,
86
+ textureId,
87
+ shaderId,
88
+ pipelineKey,
89
+ bindKey,
90
+ };
91
+ };
92
+
93
+ export { RenderEntryKind, makeMaterialKey };
94
+ //# sourceMappingURL=RenderCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RenderCommand.js","sources":["../../../../../src/rendering/plan/RenderCommand.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { RenderBackend } from '@/rendering/RenderBackend';
2
+ import { type BarrierScope, type GroupScope } from './RenderScope';
3
+ /** @internal */
4
+ export declare class RenderEffectExecutor {
5
+ static play(barrier: BarrierScope, backend: RenderBackend, playScope: (scope: GroupScope) => void): void;
6
+ private static _withClip;
7
+ private static _withRectClip;
8
+ private static _withMask;
9
+ private static _resolveMaskTexture;
10
+ }
@@ -0,0 +1,159 @@
1
+ import { Rectangle } from '../../math/Rectangle.js';
2
+ import { RenderTexture } from '../texture/RenderTexture.js';
3
+ import { Texture } from '../texture/Texture.js';
4
+ import { ClipKind } from './RenderScope.js';
5
+
6
+ /** @internal */
7
+ class RenderEffectExecutor {
8
+ static play(barrier, backend, playScope) {
9
+ const { node, effect } = barrier;
10
+ const hasFilters = effect.filters.length > 0;
11
+ const needsBitmapCache = effect.cacheAsBitmap;
12
+ const { left, top, width, height } = barrier;
13
+ if (!hasFilters && !needsBitmapCache) {
14
+ this._withClip(node, backend, barrier, () => {
15
+ if (barrier.childPlan !== null) {
16
+ playScope(barrier.childPlan);
17
+ }
18
+ });
19
+ return;
20
+ }
21
+ if (needsBitmapCache && barrier.childPlan === null) {
22
+ const cachedTexture = node._renderPlanGetCacheTexture();
23
+ if (cachedTexture !== null) {
24
+ this._withClip(node, backend, barrier, () => {
25
+ node._renderPlanDrawTexture(backend, cachedTexture, left, top, width, height, effect.blendMode);
26
+ });
27
+ }
28
+ return;
29
+ }
30
+ const cacheTexture = needsBitmapCache ? node._renderPlanEnsureCacheTexture(width, height) : null;
31
+ let pooledTexture = null;
32
+ try {
33
+ const sourceTexture = needsBitmapCache && !hasFilters ? cacheTexture : backend.acquireRenderTexture(width, height);
34
+ if (sourceTexture !== cacheTexture) {
35
+ pooledTexture = sourceTexture;
36
+ }
37
+ node._renderPlanRenderToTexture(backend, sourceTexture, left, top, width, height, () => {
38
+ if (barrier.childPlan !== null) {
39
+ playScope(barrier.childPlan);
40
+ }
41
+ });
42
+ let finalTexture = sourceTexture;
43
+ if (hasFilters) {
44
+ for (let index = 0; index < effect.filters.length; index++) {
45
+ const isLast = index === effect.filters.length - 1;
46
+ const output = isLast && needsBitmapCache ? cacheTexture : backend.acquireRenderTexture(width, height);
47
+ try {
48
+ effect.filters[index].apply(backend, finalTexture, output);
49
+ }
50
+ catch (error) {
51
+ if (output !== cacheTexture) {
52
+ backend.releaseRenderTexture(output);
53
+ }
54
+ throw error;
55
+ }
56
+ if (pooledTexture !== null) {
57
+ backend.releaseRenderTexture(pooledTexture);
58
+ pooledTexture = null;
59
+ }
60
+ finalTexture = output;
61
+ if (output !== cacheTexture) {
62
+ pooledTexture = output;
63
+ }
64
+ }
65
+ }
66
+ if (needsBitmapCache) {
67
+ node._renderPlanStoreCacheTexture(cacheTexture, left, top, width, height);
68
+ }
69
+ this._withClip(node, backend, barrier, () => {
70
+ node._renderPlanDrawTexture(backend, finalTexture, left, top, width, height, effect.blendMode);
71
+ });
72
+ }
73
+ finally {
74
+ if (pooledTexture !== null) {
75
+ backend.releaseRenderTexture(pooledTexture);
76
+ }
77
+ }
78
+ }
79
+ // Clip wraps the mask block as the outermost effect boundary, so it acts on
80
+ // the final filtered/masked output. Stencil (Geometry) is outermost; the Rect
81
+ // scissor sits between it and the alpha-mask machinery; both compose with any
82
+ // existing mask scissor since scissors/stencil are all restrictive.
83
+ static _withClip(node, backend, barrier, callback) {
84
+ if (barrier.effect.clip === ClipKind.Stencil) {
85
+ backend.pushStencilClip(barrier.effect.clipShape, node.getGlobalTransform());
86
+ try {
87
+ this._withRectClip(node, backend, barrier, callback);
88
+ }
89
+ finally {
90
+ backend.popStencilClip();
91
+ }
92
+ return;
93
+ }
94
+ this._withRectClip(node, backend, barrier, callback);
95
+ }
96
+ static _withRectClip(node, backend, barrier, callback) {
97
+ if (barrier.effect.clip === ClipKind.Rect) {
98
+ const rect = barrier.effect.clipShape ?? node.getBounds();
99
+ if (rect.width <= 0 || rect.height <= 0) {
100
+ return;
101
+ }
102
+ backend.pushScissorRect(rect);
103
+ try {
104
+ this._withMask(node, backend, barrier, callback);
105
+ }
106
+ finally {
107
+ backend.popScissorRect();
108
+ }
109
+ return;
110
+ }
111
+ this._withMask(node, backend, barrier, callback);
112
+ }
113
+ static _withMask(node, backend, barrier, callback) {
114
+ const mask = barrier.effect.maskSource;
115
+ if (mask === null) {
116
+ callback();
117
+ return;
118
+ }
119
+ if (mask instanceof Rectangle) {
120
+ if (mask.width <= 0 || mask.height <= 0) {
121
+ return;
122
+ }
123
+ backend.pushScissorRect(mask);
124
+ try {
125
+ callback();
126
+ }
127
+ finally {
128
+ backend.popScissorRect();
129
+ }
130
+ return;
131
+ }
132
+ const contentTexture = backend.acquireRenderTexture(barrier.width, barrier.height);
133
+ const releasePool = [contentTexture];
134
+ try {
135
+ node._renderPlanRenderToTexture(backend, contentTexture, barrier.left, barrier.top, barrier.width, barrier.height, callback);
136
+ const maskTexture = this._resolveMaskTexture(node, backend, mask, barrier, releasePool);
137
+ backend.composeWithAlphaMask(contentTexture, maskTexture, barrier.left, barrier.top, barrier.width, barrier.height, barrier.effect.blendMode);
138
+ }
139
+ finally {
140
+ for (const texture of releasePool) {
141
+ backend.releaseRenderTexture(texture);
142
+ }
143
+ }
144
+ }
145
+ static _resolveMaskTexture(node, backend, mask, barrier, releasePool) {
146
+ if (!(mask instanceof Texture) && !(mask instanceof RenderTexture)) {
147
+ const maskTexture = backend.acquireRenderTexture(barrier.width, barrier.height);
148
+ releasePool.push(maskTexture);
149
+ node._renderPlanRenderToTexture(backend, maskTexture, barrier.left, barrier.top, barrier.width, barrier.height, () => {
150
+ mask.render(backend);
151
+ });
152
+ return maskTexture;
153
+ }
154
+ return mask;
155
+ }
156
+ }
157
+
158
+ export { RenderEffectExecutor };
159
+ //# sourceMappingURL=RenderEffectExecutor.js.map