@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
@@ -0,0 +1,82 @@
1
+ /**
2
+ * @internal
3
+ *
4
+ * Stable key derivation for {@link Material}. Keys are interned from a
5
+ * normalized string descriptor, so identical material state always maps to
6
+ * the exact same integer (no hashing, no collisions), and distinct state
7
+ * maps to distinct integers. Descriptors are built from scalar fields in a
8
+ * fixed order and from sorted texture-binding entries — never from
9
+ * `JSON.stringify` over objects with unstable key order.
10
+ *
11
+ * Two key spaces:
12
+ * - {@link derivePipelineKey}: shader identity + blend + sampler state.
13
+ * Drives GPU pipeline/program reuse and material grouping. Independent of
14
+ * the owning material instance, so identically configured materials share
15
+ * a pipeline key.
16
+ * - {@link deriveBindKey}: material identity + bound texture identities.
17
+ * Drives bind-group/slot reuse; changes when a material swaps a texture.
18
+ */
19
+ const textureIds = new WeakMap();
20
+ let nextTextureId = 1;
21
+ const getTextureId = (texture) => {
22
+ const cached = textureIds.get(texture);
23
+ if (cached !== undefined) {
24
+ return cached;
25
+ }
26
+ const id = nextTextureId++;
27
+ textureIds.set(texture, id);
28
+ return id;
29
+ };
30
+ const pipelineKeyRegistry = new Map();
31
+ let nextPipelineKey = 1;
32
+ const bindKeyRegistry = new Map();
33
+ let nextBindKey = 1;
34
+ const intern = (registry, descriptor, allocate) => {
35
+ const cached = registry.get(descriptor);
36
+ if (cached !== undefined) {
37
+ return cached;
38
+ }
39
+ const key = allocate();
40
+ registry.set(descriptor, key);
41
+ return key;
42
+ };
43
+ const samplerDescriptor = (sampler) => {
44
+ if (sampler === null) {
45
+ return '-';
46
+ }
47
+ return [sampler.scaleMode, sampler.wrapMode, sampler.premultiplyAlpha ? 1 : 0, sampler.generateMipMap ? 1 : 0, sampler.flipY ? 1 : 0].join(':');
48
+ };
49
+ const isTextureBinding = (value) => typeof value === 'object' && value !== null && !Array.isArray(value) && !ArrayBuffer.isView(value);
50
+ /**
51
+ * Pipeline key from shader identity, blend mode, and sampler state.
52
+ * @internal
53
+ */
54
+ const derivePipelineKey = (shaderId, blendMode, sampler) => {
55
+ const descriptor = `${shaderId}|${blendMode}|${samplerDescriptor(sampler)}`;
56
+ return intern(pipelineKeyRegistry, descriptor, () => nextPipelineKey++);
57
+ };
58
+ /**
59
+ * Bind key from material identity and the identities of every bound
60
+ * texture, whether declared in the `textures` map or carried as a
61
+ * texture-valued uniform. Texture entries are sorted before joining so the
62
+ * descriptor is independent of insertion order.
63
+ * @internal
64
+ */
65
+ const deriveBindKey = (materialId, uniforms, textures) => {
66
+ const entries = [];
67
+ for (const name of Object.keys(textures)) {
68
+ entries.push(`t:${name}=${getTextureId(textures[name])}`);
69
+ }
70
+ for (const name of Object.keys(uniforms)) {
71
+ const value = uniforms[name];
72
+ if (isTextureBinding(value)) {
73
+ entries.push(`u:${name}=${getTextureId(value)}`);
74
+ }
75
+ }
76
+ entries.sort();
77
+ const descriptor = `${materialId}|${entries.join(',')}`;
78
+ return intern(bindKeyRegistry, descriptor, () => nextBindKey++);
79
+ };
80
+
81
+ export { deriveBindKey, derivePipelineKey };
82
+ //# sourceMappingURL=MaterialKey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MaterialKey.js","sources":["../../../../../src/rendering/material/MaterialKey.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { MaterialOptions } from './Material';
2
+ import { Material } from './Material';
3
+ /**
4
+ * Material specialization for {@link Mesh} drawables.
5
+ *
6
+ * Carries the mesh contract conceptually: fixed vertex attribute locations
7
+ * (0 = position, 1 = texcoord, 2 = color), the auto-bound uniforms
8
+ * `u_projection`/`u_translation`/`u_tint`/`u_texture`, and the WGSL
9
+ * group(0)=mesh-uniforms / group(1)=texture / group(2)=user binding scheme.
10
+ * Renderer wiring is added in a later phase.
11
+ * @advanced
12
+ */
13
+ export declare class MeshMaterial extends Material {
14
+ readonly target = "mesh";
15
+ constructor(options: MaterialOptions);
16
+ }
@@ -0,0 +1,21 @@
1
+ import { Material } from './Material.js';
2
+
3
+ /**
4
+ * Material specialization for {@link Mesh} drawables.
5
+ *
6
+ * Carries the mesh contract conceptually: fixed vertex attribute locations
7
+ * (0 = position, 1 = texcoord, 2 = color), the auto-bound uniforms
8
+ * `u_projection`/`u_translation`/`u_tint`/`u_texture`, and the WGSL
9
+ * group(0)=mesh-uniforms / group(1)=texture / group(2)=user binding scheme.
10
+ * Renderer wiring is added in a later phase.
11
+ * @advanced
12
+ */
13
+ class MeshMaterial extends Material {
14
+ target = 'mesh';
15
+ constructor(options) {
16
+ super(options);
17
+ }
18
+ }
19
+
20
+ export { MeshMaterial };
21
+ //# sourceMappingURL=MeshMaterial.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MeshMaterial.js","sources":["../../../../../src/rendering/material/MeshMaterial.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAGA;;;;;;;;;AASG;AACG,MAAO,YAAa,SAAQ,QAAQ,CAAA;IACxB,MAAM,GAAG,MAAM;AAE/B,IAAA,WAAA,CAAmB,OAAwB,EAAA;QACzC,KAAK,CAAC,OAAO,CAAC;IAChB;AACD;;;;"}
@@ -1,22 +1,12 @@
1
- import type { RenderTexture } from '@/rendering/texture/RenderTexture';
2
- import type { Texture } from '@/rendering/texture/Texture';
3
1
  /**
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}.
2
+ * Construction options for {@link ShaderSource}.
13
3
  *
14
4
  * At least one language must be supplied. Provide `glsl` for WebGL2,
15
- * `wgsl` for WebGPU, or both for backend-portable meshes. The shader
5
+ * `wgsl` for WebGPU, or both for backend-portable materials. The source
16
6
  * is compiled lazily on first use against the active backend; an
17
7
  * unsupported backend at draw time throws with a clear error.
18
8
  */
19
- export interface MeshShaderOptions {
9
+ export interface ShaderSourceOptions {
20
10
  /**
21
11
  * GLSL ES 3.00 sources for the WebGL2 backend. Both `vertex` and
22
12
  * `fragment` are required when `glsl` is supplied.
@@ -30,21 +20,21 @@ export interface MeshShaderOptions {
30
20
  * points live in the same source file (WGSL convention).
31
21
  */
32
22
  readonly wgsl?: string;
33
- /** Initial uniform values; mutate per frame via {@link MeshShader.uniforms}. */
34
- readonly uniforms?: Record<string, MeshShaderUniformValue>;
35
23
  }
36
24
  /**
37
- * Custom shader pair attached to a {@link Mesh}.
25
+ * Immutable shader source pair shared by {@link Material} instances.
38
26
  *
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.
27
+ * `ShaderSource` owns only the GLSL/WGSL text and its stable identity;
28
+ * it carries no uniform/texture state (that lives on the {@link Material}).
29
+ * One `ShaderSource` can back many materials, and renderers key their
30
+ * compiled program/pipeline caches on the source identity exposed via
31
+ * {@link id}.
43
32
  *
44
33
  * # Vertex layout
45
34
  *
46
- * The vertex layout is fixed and shared with the default mesh shader,
47
- * so custom vertex shaders MUST pin the standard attribute locations:
35
+ * The vertex layout for the mesh path is fixed and shared with the default
36
+ * mesh material, so custom vertex shaders MUST pin the standard attribute
37
+ * locations:
48
38
  *
49
39
  * ## GLSL (location-qualified)
50
40
  *
@@ -66,16 +56,16 @@ export interface MeshShaderOptions {
66
56
  *
67
57
  * # Auto-bound uniforms
68
58
  *
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.
59
+ * Renderers auto-bind these when the source declares them. Declared but
60
+ * unused is fine; absent is fine too. Both backends carry the same logical
61
+ * uniforms, only the binding scheme differs.
72
62
  *
73
63
  * ## GLSL
74
64
  *
75
65
  * ```glsl
76
66
  * 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
67
+ * uniform mat3 u_translation; // drawable's global transform
68
+ * uniform vec4 u_tint; // tint as RGBA in 0..1
79
69
  * uniform sampler2D u_texture; // bound to texture slot 0
80
70
  * ```
81
71
  *
@@ -96,8 +86,9 @@ export interface MeshShaderOptions {
96
86
  *
97
87
  * # User uniforms
98
88
  *
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).
89
+ * Anything in {@link Material.uniforms} is set after the auto-binds.
90
+ * `Texture`/`RenderTexture` values claim slots 1..N (slot 0 belongs to the
91
+ * drawable's own texture).
101
92
  *
102
93
  * ## WGSL user-uniform contract
103
94
  *
@@ -107,16 +98,9 @@ export interface MeshShaderOptions {
107
98
  * for the packed scalar/vector/matrix uniforms.
108
99
  * - `@group(2) @binding(N)` for each `Texture`/`RenderTexture` uniform,
109
100
  * in declaration order, alongside its sampler at `@binding(N+1)`.
101
+ * @advanced
110
102
  */
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>;
103
+ export declare class ShaderSource {
120
104
  /** GLSL source pair for the WebGL2 backend, or `null` if not provided. */
121
105
  readonly glsl: {
122
106
  readonly vertex: string;
@@ -124,14 +108,13 @@ export declare class MeshShader {
124
108
  } | null;
125
109
  /** WGSL source for the WebGPU backend, or `null` if not provided. */
126
110
  readonly wgsl: string | null;
127
- private readonly _disposeCallbacks;
128
- constructor(options: MeshShaderOptions);
111
+ private readonly _id;
112
+ constructor(options: ShaderSourceOptions);
129
113
  /**
130
- * Convenience setter equivalent to `shader.uniforms[name] = value`.
131
- * Provided for symmetry with engine APIs that prefer explicit methods
132
- * over property mutation.
114
+ * Stable per-instance identity. Identical `id` same compiled program/
115
+ * pipeline can be reused. Monotonic across the session; never reused.
133
116
  */
134
- setUniform(name: string, value: MeshShaderUniformValue): void;
117
+ get id(): number;
135
118
  /**
136
119
  * Reflect declared uniforms from each language's source. Returns a per-
137
120
  * language map of uniform-name → declared type, parsed from the shader
@@ -141,8 +124,9 @@ export declare class MeshShader {
141
124
  *
142
125
  * Reflection is best-effort and intended for CI drift-checks and editor
143
126
  * 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.
127
+ * NOT consult this map; they bind uniforms by name from
128
+ * {@link Material.uniforms} and let the underlying API resolve declared-
129
+ * but-unused entries.
146
130
  */
147
131
  getDeclaredUniforms(): {
148
132
  glsl: Record<string, string>;
@@ -164,20 +148,4 @@ export declare class MeshShader {
164
148
  onlyInGlsl: readonly string[];
165
149
  onlyInWgsl: readonly string[];
166
150
  };
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
151
  }
@@ -1,15 +1,18 @@
1
+ let nextShaderSourceId = 1;
1
2
  /**
2
- * Custom shader pair attached to a {@link Mesh}.
3
+ * Immutable shader source pair shared by {@link Material} instances.
3
4
  *
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.
5
+ * `ShaderSource` owns only the GLSL/WGSL text and its stable identity;
6
+ * it carries no uniform/texture state (that lives on the {@link Material}).
7
+ * One `ShaderSource` can back many materials, and renderers key their
8
+ * compiled program/pipeline caches on the source identity exposed via
9
+ * {@link id}.
8
10
  *
9
11
  * # Vertex layout
10
12
  *
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
+ * The vertex layout for the mesh path is fixed and shared with the default
14
+ * mesh material, so custom vertex shaders MUST pin the standard attribute
15
+ * locations:
13
16
  *
14
17
  * ## GLSL (location-qualified)
15
18
  *
@@ -31,16 +34,16 @@
31
34
  *
32
35
  * # Auto-bound uniforms
33
36
  *
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
+ * Renderers auto-bind these when the source declares them. Declared but
38
+ * unused is fine; absent is fine too. Both backends carry the same logical
39
+ * uniforms, only the binding scheme differs.
37
40
  *
38
41
  * ## GLSL
39
42
  *
40
43
  * ```glsl
41
44
  * 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
45
+ * uniform mat3 u_translation; // drawable's global transform
46
+ * uniform vec4 u_tint; // tint as RGBA in 0..1
44
47
  * uniform sampler2D u_texture; // bound to texture slot 0
45
48
  * ```
46
49
  *
@@ -61,8 +64,9 @@
61
64
  *
62
65
  * # User uniforms
63
66
  *
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).
67
+ * Anything in {@link Material.uniforms} is set after the auto-binds.
68
+ * `Texture`/`RenderTexture` values claim slots 1..N (slot 0 belongs to the
69
+ * drawable's own texture).
66
70
  *
67
71
  * ## WGSL user-uniform contract
68
72
  *
@@ -72,47 +76,39 @@
72
76
  * for the packed scalar/vector/matrix uniforms.
73
77
  * - `@group(2) @binding(N)` for each `Texture`/`RenderTexture` uniform,
74
78
  * in declaration order, alongside its sampler at `@binding(N+1)`.
79
+ * @advanced
75
80
  */
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;
81
+ class ShaderSource {
85
82
  /** GLSL source pair for the WebGL2 backend, or `null` if not provided. */
86
83
  glsl;
87
84
  /** WGSL source for the WebGPU backend, or `null` if not provided. */
88
85
  wgsl;
89
- _disposeCallbacks = new Set();
86
+ _id;
90
87
  constructor(options) {
91
88
  if (options.glsl === undefined && options.wgsl === undefined) {
92
- throw new Error('MeshShader requires at least one of `glsl` or `wgsl`.');
89
+ throw new Error('ShaderSource requires at least one of `glsl` or `wgsl`.');
93
90
  }
94
91
  if (options.glsl !== undefined) {
95
92
  if (typeof options.glsl.vertex !== 'string' || options.glsl.vertex.length === 0) {
96
- throw new Error('MeshShader.glsl.vertex must be a non-empty string.');
93
+ throw new Error('ShaderSource.glsl.vertex must be a non-empty string.');
97
94
  }
98
95
  if (typeof options.glsl.fragment !== 'string' || options.glsl.fragment.length === 0) {
99
- throw new Error('MeshShader.glsl.fragment must be a non-empty string.');
96
+ throw new Error('ShaderSource.glsl.fragment must be a non-empty string.');
100
97
  }
101
98
  }
102
99
  if (options.wgsl !== undefined && (typeof options.wgsl !== 'string' || options.wgsl.length === 0)) {
103
- throw new Error('MeshShader.wgsl must be a non-empty string.');
100
+ throw new Error('ShaderSource.wgsl must be a non-empty string.');
104
101
  }
105
102
  this.glsl = options.glsl ?? null;
106
103
  this.wgsl = options.wgsl ?? null;
107
- this.uniforms = { ...(options.uniforms ?? {}) };
104
+ this._id = nextShaderSourceId++;
108
105
  }
109
106
  /**
110
- * Convenience setter equivalent to `shader.uniforms[name] = value`.
111
- * Provided for symmetry with engine APIs that prefer explicit methods
112
- * over property mutation.
107
+ * Stable per-instance identity. Identical `id` same compiled program/
108
+ * pipeline can be reused. Monotonic across the session; never reused.
113
109
  */
114
- setUniform(name, value) {
115
- this.uniforms[name] = value;
110
+ get id() {
111
+ return this._id;
116
112
  }
117
113
  /**
118
114
  * Reflect declared uniforms from each language's source. Returns a per-
@@ -123,8 +119,9 @@ class MeshShader {
123
119
  *
124
120
  * Reflection is best-effort and intended for CI drift-checks and editor
125
121
  * 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.
122
+ * NOT consult this map; they bind uniforms by name from
123
+ * {@link Material.uniforms} and let the underlying API resolve declared-
124
+ * but-unused entries.
128
125
  */
129
126
  getDeclaredUniforms() {
130
127
  return {
@@ -163,29 +160,6 @@ class MeshShader {
163
160
  }
164
161
  return { onlyInGlsl, onlyInWgsl };
165
162
  }
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
163
  }
190
164
  const autoBoundUniformNames = new Set(['u_projection', 'u_translation', 'u_tint', 'u_texture', 'u_mesh']);
191
165
  const glslUniformPattern = /\buniform\s+(?:mediump\s+|highp\s+|lowp\s+|)(\w+)\s+(\w+)[^;]*;/g;
@@ -193,7 +167,7 @@ const wgslUserUniformPattern = /@group\(\s*2\s*\)\s*@binding\(\s*\d+\s*\)\s*var(
193
167
  /**
194
168
  * Strip line and block comments from a shader source so the uniform
195
169
  * regexes don't match commented-out declarations. Conservative: works
196
- * for both GLSL and WGSL syntax (both use `//` and `/* ... *\/`).
170
+ * for both GLSL and WGSL syntax (both use `//` and block comments).
197
171
  */
198
172
  function stripComments(source) {
199
173
  return source.replaceAll(/\/\*[\s\S]*?\*\//g, '').replaceAll(/\/\/[^\n]*/g, '');
@@ -227,5 +201,5 @@ function parseWgslUniforms(source) {
227
201
  return result;
228
202
  }
229
203
 
230
- export { MeshShader };
231
- //# sourceMappingURL=MeshShader.js.map
204
+ export { ShaderSource };
205
+ //# sourceMappingURL=ShaderSource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShaderSource.js","sources":["../../../../../src/rendering/material/ShaderSource.ts"],"sourcesContent":[null],"names":[],"mappings":"AAyBA,IAAI,kBAAkB,GAAG,CAAC;AAE1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8EG;MACU,YAAY,CAAA;;AAEP,IAAA,IAAI;;AAGJ,IAAA,IAAI;AAEH,IAAA,GAAG;AAEpB,IAAA,WAAA,CAAmB,OAA4B,EAAA;AAC7C,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;AAC5D,YAAA,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC;QAC5E;AAEA,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;AAC9B,YAAA,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/E,gBAAA,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC;YACzE;AACA,YAAA,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACnF,gBAAA,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC;YAC3E;QACF;QAEA,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,KAAK,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;AACjG,YAAA,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC;QAClE;QAEA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI;QAChC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI;AAChC,QAAA,IAAI,CAAC,GAAG,GAAG,kBAAkB,EAAE;IACjC;AAEA;;;AAGG;AACH,IAAA,IAAW,EAAE,GAAA;QACX,OAAO,IAAI,CAAC,GAAG;IACjB;AAEA;;;;;;;;;;;;AAYG;IACI,mBAAmB,GAAA;QACxB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;AACvF,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;SAC7D;IACH;AAEA;;;;;;;;;;;AAWG;IACI,kBAAkB,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;YAC5C,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QAC3C;AAEA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,EAAE;AAC3C,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAChG,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhG,MAAM,UAAU,GAAa,EAAE;QAC/B,MAAM,UAAU,GAAa,EAAE;AAE/B,QAAA,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE;AAC5B,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AAAE,gBAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QACjD;AACA,QAAA,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE;AAC5B,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AAAE,gBAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QACjD;AAEA,QAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE;IACnC;AACD;AAED,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAS,CAAC,cAAc,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;AAEjH,MAAM,kBAAkB,GAAG,kEAAkE;AAE7F,MAAM,sBAAsB,GAAG,qFAAqF;AAEpH;;;;AAIG;AACH,SAAS,aAAa,CAAC,MAAc,EAAA;AACnC,IAAA,OAAO,MAAM,CAAC,UAAU,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,CAAC;AACjF;AAEA,SAAS,iBAAiB,CAAC,MAAc,EAAE,QAAgB,EAAA;IACzD,MAAM,MAAM,GAA2B,EAAE;IACzC,KAAK,MAAM,MAAM,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE;AACvC,QAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC;AACtC,QAAA,kBAAkB,CAAC,SAAS,GAAG,CAAC;AAChC,QAAA,IAAI,KAA6B;AACjC,QAAA,OAAO,CAAC,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE;YAC3D,MAAM,GAAG,IAAI,EAAE,IAAI,CAAC,GAAG,KAAK;AAC5B,YAAA,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI;QACrB;IACF;AACA,IAAA,OAAO,MAAM;AACf;AAEA,SAAS,iBAAiB,CAAC,MAAc,EAAA;IACvC,MAAM,MAAM,GAA2B,EAAE;AACzC,IAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC;;;;;AAMtC,IAAA,sBAAsB,CAAC,SAAS,GAAG,CAAC;AACpC,IAAA,IAAI,KAA6B;AACjC,IAAA,OAAO,CAAC,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE;QAC/D,MAAM,GAAG,IAAI,EAAE,IAAI,CAAC,GAAG,KAAK;QAC5B,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;IAC5B;AAEA,IAAA,OAAO,MAAM;AACf;;;;"}
@@ -0,0 +1,15 @@
1
+ import type { MaterialOptions } from './Material';
2
+ import { Material } from './Material';
3
+ /**
4
+ * Material specialization for {@link Sprite} drawables.
5
+ *
6
+ * API shell for the sprite custom-material path; the renderer integration
7
+ * and instancing contract are added in a later phase. The base texture
8
+ * stays on the sprite — this material supplies the fragment program,
9
+ * uniforms, and additional texture bindings.
10
+ * @advanced
11
+ */
12
+ export declare class SpriteMaterial extends Material {
13
+ readonly target = "sprite";
14
+ constructor(options: MaterialOptions);
15
+ }
@@ -0,0 +1,20 @@
1
+ import { Material } from './Material.js';
2
+
3
+ /**
4
+ * Material specialization for {@link Sprite} drawables.
5
+ *
6
+ * API shell for the sprite custom-material path; the renderer integration
7
+ * and instancing contract are added in a later phase. The base texture
8
+ * stays on the sprite — this material supplies the fragment program,
9
+ * uniforms, and additional texture bindings.
10
+ * @advanced
11
+ */
12
+ class SpriteMaterial extends Material {
13
+ target = 'sprite';
14
+ constructor(options) {
15
+ super(options);
16
+ }
17
+ }
18
+
19
+ export { SpriteMaterial };
20
+ //# sourceMappingURL=SpriteMaterial.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpriteMaterial.js","sources":["../../../../../src/rendering/material/SpriteMaterial.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAGA;;;;;;;;AAQG;AACG,MAAO,cAAe,SAAQ,QAAQ,CAAA;IAC1B,MAAM,GAAG,QAAQ;AAEjC,IAAA,WAAA,CAAmB,OAAwB,EAAA;QACzC,KAAK,CAAC,OAAO,CAAC;IAChB;AACD;;;;"}
@@ -1,29 +1,43 @@
1
1
  import { Drawable } from '@/rendering/Drawable';
2
- import type { MeshShader } from '@/rendering/mesh/MeshShader';
2
+ import type { Geometry } from '@/rendering/geometry/Geometry';
3
+ import type { MeshMaterial } from '@/rendering/material/MeshMaterial';
3
4
  import type { RenderTexture } from '@/rendering/texture/RenderTexture';
4
5
  import type { Texture } from '@/rendering/texture/Texture';
5
6
  /**
6
7
  * Construction-time options for a {@link Mesh}.
7
8
  *
8
- * Vertices are required and must be a flat sequence of (x, y) pairs in
9
- * local space. UVs and per-vertex colors are optional but, when present,
10
- * must match the vertex count (UVs as (u, v) pairs, colors as one
11
- * packed-RGBA8 u32 per vertex). Indices are optional if absent, the
12
- * vertex stream is drawn as a flat triangle list (3*N vertices = N
13
- * triangles). A texture is optional; a textured mesh samples it at the
14
- * supplied UVs while an untextured mesh paints solid vertex colors only.
9
+ * Provide the geometry in exactly one of two forms:
10
+ *
11
+ * - **Convenience form** a flat `vertices` array of (x, y) pairs in local
12
+ * space, with optional `uvs`, per-vertex `colors`, and `indices`. This is
13
+ * the simplest path: `new Mesh({ vertices })`.
14
+ * - **Geometry form** a {@link Geometry} object whose standard attributes
15
+ * (`a_position`/`position`, `a_texcoord`/`texcoord`, `a_color`/`color`) are
16
+ * read into the mesh: `new Mesh({ geometry })`. The geometry must use the
17
+ * `triangle-list` topology.
18
+ *
19
+ * Supplying both `vertices` and `geometry`, or neither, throws.
20
+ *
21
+ * When present, `uvs` must match the vertex count (as (u, v) pairs) and
22
+ * `colors` must supply one packed-RGBA8 u32 per vertex. `indices` are optional
23
+ * — if absent, the vertex stream is drawn as a flat triangle list (3*N
24
+ * vertices = N triangles). A texture is optional; a textured mesh samples it
25
+ * at the supplied UVs while an untextured mesh paints solid vertex colors only.
15
26
  *
16
27
  * Validation is enforced at construction; any mismatch throws.
17
28
  *
18
- * For custom shaders, see {@link MeshShader}.
29
+ * For custom shaders/uniforms/textures, attach a {@link MeshMaterial}.
19
30
  */
20
31
  export interface MeshOptions {
21
- readonly vertices: Float32Array;
32
+ readonly vertices?: Float32Array;
22
33
  readonly indices?: Uint16Array;
23
34
  readonly uvs?: Float32Array;
24
35
  readonly colors?: Uint32Array;
36
+ /** Interleaved geometry source; mutually exclusive with `vertices`. */
37
+ readonly geometry?: Geometry;
25
38
  readonly texture?: Texture | RenderTexture | null;
26
- readonly shader?: MeshShader;
39
+ /** Custom look (shader/uniforms/textures/blendMode); `null` uses the default mesh material. */
40
+ readonly material?: MeshMaterial;
27
41
  }
28
42
  /**
29
43
  * Arbitrary 2D triangle-mesh primitive.
@@ -58,7 +72,10 @@ export declare class Mesh extends Drawable {
58
72
  readonly indices: Uint16Array | null;
59
73
  readonly uvs: Float32Array | null;
60
74
  readonly colors: Uint32Array | null;
61
- readonly shader: MeshShader | null;
75
+ /** Custom material attached to this mesh, or `null` for the default mesh path. */
76
+ readonly material: MeshMaterial | null;
77
+ /** Source geometry when constructed from the geometry form, otherwise `null`. */
78
+ readonly geometry: Geometry | null;
62
79
  private _texture;
63
80
  constructor(options: MeshOptions);
64
81
  /** Number of (x, y) vertex pairs in the mesh (i.e. `vertices.length / 2`). */