@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,114 @@
1
+ import { clamp } from '../../math/utils.js';
2
+ import { DataTexture } from '../texture/DataTexture.js';
3
+
4
+ const sortedStopOffset = (left, right) => left.offset - right.offset;
5
+ /**
6
+ * CPU-rasterized gradient base that can be converted into a {@link DataTexture}.
7
+ */
8
+ class Gradient {
9
+ _stops;
10
+ _sample = new Float32Array(4);
11
+ constructor(stops) {
12
+ if (stops.length < 2) {
13
+ throw new Error('Gradient requires at least 2 color stops.');
14
+ }
15
+ this._stops = [...stops].map(stop => ({ offset: clamp(stop.offset, 0, 1), color: stop.color.clone() })).sort(sortedStopOffset);
16
+ }
17
+ get stops() {
18
+ return this._stops;
19
+ }
20
+ toTexture(width, height, options = {}) {
21
+ if (!Number.isInteger(width) || !Number.isInteger(height) || width <= 0 || height <= 0) {
22
+ throw new Error('Gradient.toTexture() width/height must be positive integers.');
23
+ }
24
+ if (options.format === 'rgba32f') {
25
+ return this._toRgba32fTexture(width, height, options);
26
+ }
27
+ return this._toRgba8Texture(width, height, options);
28
+ }
29
+ destroy() {
30
+ for (const stop of this._stops) {
31
+ stop.color.destroy();
32
+ }
33
+ this._stops = [];
34
+ }
35
+ /**
36
+ * Shared stop sampling logic ported from the legacy GLSL implementation.
37
+ */
38
+ sampleAt(t, out) {
39
+ const clamped = clamp(t, 0, 1);
40
+ const first = this._stops[0];
41
+ let previousOffset = first.offset;
42
+ let previousColor = first.color;
43
+ for (let i = 1; i < this._stops.length; i++) {
44
+ const current = this._stops[i];
45
+ if (clamped <= current.offset) {
46
+ const span = Math.max(current.offset - previousOffset, 0.000001);
47
+ const ratio = clamp((clamped - previousOffset) / span, 0, 1);
48
+ out[0] = previousColor.r / 255 + (current.color.r / 255 - previousColor.r / 255) * ratio;
49
+ out[1] = previousColor.g / 255 + (current.color.g / 255 - previousColor.g / 255) * ratio;
50
+ out[2] = previousColor.b / 255 + (current.color.b / 255 - previousColor.b / 255) * ratio;
51
+ out[3] = previousColor.a + (current.color.a - previousColor.a) * ratio;
52
+ return;
53
+ }
54
+ previousOffset = current.offset;
55
+ previousColor = current.color;
56
+ }
57
+ out[0] = previousColor.r / 255;
58
+ out[1] = previousColor.g / 255;
59
+ out[2] = previousColor.b / 255;
60
+ out[3] = previousColor.a;
61
+ }
62
+ _toRgba8Texture(width, height, options) {
63
+ const texture = new DataTexture({
64
+ width,
65
+ height,
66
+ format: 'rgba8',
67
+ samplerOptions: options.samplerOptions,
68
+ });
69
+ const buffer = texture.buffer;
70
+ let offset = 0;
71
+ for (let y = 0; y < height; y++) {
72
+ const v = height === 1 ? 0 : y / (height - 1);
73
+ for (let x = 0; x < width; x++) {
74
+ const u = width === 1 ? 0 : x / (width - 1);
75
+ this.sampleAt(this.resolveT(u, v), this._sample);
76
+ buffer[offset] = toUnorm8(this._sample[0]);
77
+ buffer[offset + 1] = toUnorm8(this._sample[1]);
78
+ buffer[offset + 2] = toUnorm8(this._sample[2]);
79
+ buffer[offset + 3] = toUnorm8(this._sample[3]);
80
+ offset += 4;
81
+ }
82
+ }
83
+ texture.commit();
84
+ return texture;
85
+ }
86
+ _toRgba32fTexture(width, height, options) {
87
+ const texture = new DataTexture({
88
+ width,
89
+ height,
90
+ format: 'rgba32f',
91
+ samplerOptions: options.samplerOptions,
92
+ });
93
+ const buffer = texture.buffer;
94
+ let offset = 0;
95
+ for (let y = 0; y < height; y++) {
96
+ const v = height === 1 ? 0 : y / (height - 1);
97
+ for (let x = 0; x < width; x++) {
98
+ const u = width === 1 ? 0 : x / (width - 1);
99
+ this.sampleAt(this.resolveT(u, v), this._sample);
100
+ buffer[offset] = this._sample[0];
101
+ buffer[offset + 1] = this._sample[1];
102
+ buffer[offset + 2] = this._sample[2];
103
+ buffer[offset + 3] = this._sample[3];
104
+ offset += 4;
105
+ }
106
+ }
107
+ texture.commit();
108
+ return texture;
109
+ }
110
+ }
111
+ const toUnorm8 = (value) => (clamp(value, 0, 1) * 255 + 0.5) | 0;
112
+
113
+ export { Gradient };
114
+ //# sourceMappingURL=Gradient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Gradient.js","sources":["../../../../../src/rendering/gradient/Gradient.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { Gradient, type GradientStop } from './Gradient';
2
+ /**
3
+ * Linear gradient in UV space projected from `start` to `end`.
4
+ */
5
+ export declare class LinearGradient extends Gradient {
6
+ private readonly _start;
7
+ private readonly _end;
8
+ constructor(stops: readonly GradientStop[], start?: readonly [number, number], end?: readonly [number, number]);
9
+ protected resolveT(u: number, v: number): number;
10
+ }
@@ -0,0 +1,26 @@
1
+ import { Gradient } from './Gradient.js';
2
+
3
+ /**
4
+ * Linear gradient in UV space projected from `start` to `end`.
5
+ */
6
+ class LinearGradient extends Gradient {
7
+ _start;
8
+ _end;
9
+ constructor(stops, start = [0, 0], end = [1, 0]) {
10
+ super(stops);
11
+ this._start = [start[0], start[1]];
12
+ this._end = [end[0], end[1]];
13
+ }
14
+ resolveT(u, v) {
15
+ const axisX = this._end[0] - this._start[0];
16
+ const axisY = this._end[1] - this._start[1];
17
+ const lengthSquared = axisX * axisX + axisY * axisY;
18
+ if (lengthSquared <= 0.000001) {
19
+ return 0;
20
+ }
21
+ return ((u - this._start[0]) * axisX + (v - this._start[1]) * axisY) / lengthSquared;
22
+ }
23
+ }
24
+
25
+ export { LinearGradient };
26
+ //# sourceMappingURL=LinearGradient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinearGradient.js","sources":["../../../../../src/rendering/gradient/LinearGradient.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAEA;;AAEG;AACG,MAAO,cAAe,SAAQ,QAAQ,CAAA;AACzB,IAAA,MAAM;AACN,IAAA,IAAI;AAErB,IAAA,WAAA,CAAmB,KAA8B,EAAE,KAAA,GAAmC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAA,GAAiC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAA;QACnI,KAAK,CAAC,KAAK,CAAC;AAEZ,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9B;IAEmB,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAA;AAC9C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3C,MAAM,aAAa,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK;AAEnD,QAAA,IAAI,aAAa,IAAI,QAAQ,EAAE;AAC7B,YAAA,OAAO,CAAC;QACV;AAEA,QAAA,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,aAAa;IACtF;AACD;;;;"}
@@ -0,0 +1,10 @@
1
+ import { Gradient, type GradientStop } from './Gradient';
2
+ /**
3
+ * Radial gradient in UV space around `center` with normalized radius.
4
+ */
5
+ export declare class RadialGradient extends Gradient {
6
+ private readonly _center;
7
+ private readonly _radius;
8
+ constructor(stops: readonly GradientStop[], center?: readonly [number, number], radius?: number);
9
+ protected resolveT(u: number, v: number): number;
10
+ }
@@ -0,0 +1,25 @@
1
+ import { Gradient } from './Gradient.js';
2
+
3
+ /**
4
+ * Radial gradient in UV space around `center` with normalized radius.
5
+ */
6
+ class RadialGradient extends Gradient {
7
+ _center;
8
+ _radius;
9
+ constructor(stops, center = [0.5, 0.5], radius = 0.5) {
10
+ super(stops);
11
+ this._center = [center[0], center[1]];
12
+ this._radius = Math.max(0, radius);
13
+ }
14
+ resolveT(u, v) {
15
+ if (this._radius <= 0.000001) {
16
+ return 1;
17
+ }
18
+ const dx = u - this._center[0];
19
+ const dy = v - this._center[1];
20
+ return Math.sqrt(dx * dx + dy * dy) / this._radius;
21
+ }
22
+ }
23
+
24
+ export { RadialGradient };
25
+ //# sourceMappingURL=RadialGradient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RadialGradient.js","sources":["../../../../../src/rendering/gradient/RadialGradient.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAEA;;AAEG;AACG,MAAO,cAAe,SAAQ,QAAQ,CAAA;AACzB,IAAA,OAAO;AACP,IAAA,OAAO;IAExB,WAAA,CAAmB,KAA8B,EAAE,MAAA,GAAoC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,EAAA;QAC7G,KAAK,CAAC,KAAK,CAAC;AAEZ,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC;IACpC;IAEmB,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAA;AAC9C,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,QAAQ,EAAE;AAC5B,YAAA,OAAO,CAAC;QACV;QAEA,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAE9B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO;IACpD;AACD;;;;"}
@@ -1,59 +1,103 @@
1
- export * from './CallbackRenderPass';
2
- export * from './Container';
3
- export * from './Drawable';
4
- export * from './filters/BlurFilter';
5
- export * from './filters/ColorFilter';
6
- export * from './filters/Filter';
7
- export * from './filters/LutFilter';
8
- export * from './filters/WebGl2ShaderFilter';
9
- export * from './filters/WebGpuShaderFilter';
10
- export * from './mesh/Mesh';
11
- export * from './mesh/MeshShader';
12
- export * from './primitives/Graphics';
13
- export * from './RenderBackend';
14
- export * from './RenderBackendType';
15
- export * from './Renderer';
16
- export * from './RendererRegistry';
17
- export * from './RenderNode';
18
- export * from './RenderPass';
19
- export * from './RenderStats';
20
- export * from './RenderTarget';
21
- export * from './RenderTargetPass';
22
- export * from './shader/Shader';
23
- export * from './shader/ShaderAttribute';
24
- export * from './shader/ShaderUniform';
25
- export * from './shader/upgradeFragmentShaderToGl300';
26
- export * from './sprite/AnimatedSprite';
27
- export * from './sprite/Sprite';
28
- export * from './sprite/Spritesheet';
29
- export * from './text/DynamicGlyphAtlas';
30
- export * from './text/Text';
31
- export * from './text/TextLayout';
32
- export * from './text/TextStyle';
33
- export * from './text/types';
34
- export * from './texture/DataTexture';
35
- export * from './texture/RenderTexture';
36
- export * from './texture/Sampler';
37
- export * from './texture/Texture';
38
- export * from './types';
39
- export * from './video/Video';
40
- export * from './View';
41
- export * from './webgl2/AbstractWebGl2BatchedRenderer';
42
- export * from './webgl2/AbstractWebGl2Renderer';
43
- export type { WebGl2Backend } from './webgl2/WebGl2Backend';
44
- export * from './webgl2/WebGl2Backend';
45
- export * from './webgl2/WebGl2MeshRenderer';
46
- export * from './webgl2/WebGl2ParticleRenderer';
47
- export * from './webgl2/WebGl2RenderBuffer';
48
- export * from './webgl2/WebGl2ShaderBlock';
49
- export * from './webgl2/WebGl2ShaderMappings';
50
- export * from './webgl2/WebGl2ShaderProgram';
51
- export * from './webgl2/WebGl2SpriteRenderer';
52
- export * from './webgl2/WebGl2VertexArrayObject';
53
- export * from './webgpu/AbstractWebGpuRenderer';
54
- export type { WebGpuBackend } from './webgpu/WebGpuBackend';
55
- export * from './webgpu/WebGpuBackend';
56
- export * from './webgpu/WebGpuBlendState';
57
- export * from './webgpu/WebGpuMeshRenderer';
58
- export * from './webgpu/WebGpuParticleRenderer';
59
- export * from './webgpu/WebGpuSpriteRenderer';
1
+ export { CallbackRenderPass } from './CallbackRenderPass';
2
+ export type { CameraOptions } from './Camera';
3
+ export { Camera } from './Camera';
4
+ export { Container } from './Container';
5
+ export { Drawable } from './Drawable';
6
+ export type { BlurFilterOptions } from './filters/BlurFilter';
7
+ export { BlurFilter } from './filters/BlurFilter';
8
+ export { ColorFilter } from './filters/ColorFilter';
9
+ export { Filter } from './filters/Filter';
10
+ export type { LutFilterOptions, LutMode } from './filters/LutFilter';
11
+ export { LutFilter } from './filters/LutFilter';
12
+ export type { ShaderFilterUniformValue, WebGl2ShaderFilterOptions } from './filters/WebGl2ShaderFilter';
13
+ export { WebGl2ShaderFilter } from './filters/WebGl2ShaderFilter';
14
+ export type { WebGpuShaderFilterOptions } from './filters/WebGpuShaderFilter';
15
+ export { WebGpuShaderFilter } from './filters/WebGpuShaderFilter';
16
+ export { Geometry } from './geometry/Geometry';
17
+ export type { AttributeType, GeometryAttribute, GeometryOptions, GeometryUsage, Topology } from './geometry/GeometryAttribute';
18
+ export type { GradientStop, GradientToTextureOptions } from './gradient/Gradient';
19
+ export { Gradient } from './gradient/Gradient';
20
+ export { LinearGradient } from './gradient/LinearGradient';
21
+ export { RadialGradient } from './gradient/RadialGradient';
22
+ export type { MaterialOptions, UniformValue } from './material/Material';
23
+ export { Material } from './material/Material';
24
+ export { MeshMaterial } from './material/MeshMaterial';
25
+ export type { ShaderSourceOptions } from './material/ShaderSource';
26
+ export { ShaderSource } from './material/ShaderSource';
27
+ export { SpriteMaterial } from './material/SpriteMaterial';
28
+ export type { MeshOptions } from './mesh/Mesh';
29
+ export { Mesh } from './mesh/Mesh';
30
+ export { Graphics } from './primitives/Graphics';
31
+ export type { RenderBackend } from './RenderBackend';
32
+ export { RenderBackendType } from './RenderBackendType';
33
+ export type { DrawableConstructor, Renderer } from './Renderer';
34
+ export { RendererRegistry } from './RendererRegistry';
35
+ export type { RenderOptions, RenderToOptions } from './RenderingContext';
36
+ export { RenderingContext } from './RenderingContext';
37
+ export type { MaskSource } from './RenderNode';
38
+ export { RenderNode } from './RenderNode';
39
+ export type { RenderPass } from './RenderPass';
40
+ export type { RenderStats } from './RenderStats';
41
+ export { createRenderStats, resetRenderStats } from './RenderStats';
42
+ export { RenderTarget } from './RenderTarget';
43
+ export type { RenderTargetPassOptions } from './RenderTargetPass';
44
+ export { RenderTargetPass } from './RenderTargetPass';
45
+ export type { ShaderProgram } from './shader/Shader';
46
+ export { Shader } from './shader/Shader';
47
+ export { ShaderAttribute } from './shader/ShaderAttribute';
48
+ export { ShaderUniform } from './shader/ShaderUniform';
49
+ export { upgradeFragmentShaderToGl300 } from './shader/upgradeFragmentShaderToGl300';
50
+ export type { AnimatedSpriteClipDefinition, AnimatedSpritePlayOptions } from './sprite/AnimatedSprite';
51
+ export { AnimatedSprite } from './sprite/AnimatedSprite';
52
+ export { Sprite, SpriteFlags } from './sprite/Sprite';
53
+ export type { SpritesheetData, SpritesheetFrame } from './sprite/Spritesheet';
54
+ export { Spritesheet } from './sprite/Spritesheet';
55
+ export { AbstractText } from './text/AbstractText';
56
+ export type { BitmapTextOptions } from './text/BitmapText';
57
+ export { BitmapText, BmFontAdapter } from './text/BitmapText';
58
+ export type { BmFontChar, BmFontData } from './text/BmFont';
59
+ export { BmFont } from './text/BmFont';
60
+ export type { AtlasMode } from './text/GlyphAtlas';
61
+ export { AtlasPage, GlyphAtlas, SDF_RADIUS } from './text/GlyphAtlas';
62
+ export { getDefaultGlyphAtlasPool, GlyphAtlasPool, resetDefaultGlyphAtlasPool } from './text/GlyphAtlasPool';
63
+ export type { FontFormat, HTMLTextOptions } from './text/HTMLText';
64
+ export { HTMLText } from './text/HTMLText';
65
+ export type { LayoutOptions } from './text/LayoutOptions';
66
+ export { Text } from './text/Text';
67
+ export { buildTextPageQuads, layoutText, measureText } from './text/TextLayout';
68
+ export type { FontFamily, FontRegistry, FontWeight, GradientAxis, StyleChangeHint, TextStyleOptions } from './text/TextStyle';
69
+ export { TextStyle } from './text/TextStyle';
70
+ export type { GlyphInfo, GlyphKey, GlyphPlacement, GlyphProvider, TextAlignment, TextLayoutStyle, TextPageQuads, TextSize } from './text/types';
71
+ export type { DataTextureBuffer, DataTextureDirtyRegion, DataTextureFormat, DataTextureOptions } from './texture/DataTexture';
72
+ export { DataTexture } from './texture/DataTexture';
73
+ export { RenderTexture } from './texture/RenderTexture';
74
+ export type { SamplerOptions } from './texture/Sampler';
75
+ export { Sampler } from './texture/Sampler';
76
+ export { Texture } from './texture/Texture';
77
+ export { BlendModes, BufferTypes, BufferUsage, RenderingPrimitives, ScaleModes, ShaderPrimitives, WrapModes } from './types';
78
+ export { Video } from './video/Video';
79
+ export type { ViewFollowOptions, ViewFollowTarget, ViewShakeOptions } from './View';
80
+ export { View, ViewFlags } from './View';
81
+ export { AbstractWebGl2BatchedRenderer } from './webgl2/AbstractWebGl2BatchedRenderer';
82
+ export { AbstractWebGl2Renderer } from './webgl2/AbstractWebGl2Renderer';
83
+ export { WebGl2Backend } from './webgl2/WebGl2Backend';
84
+ export { WebGl2MeshRenderer } from './webgl2/WebGl2MeshRenderer';
85
+ export { WebGl2ParticleRenderer } from './webgl2/WebGl2ParticleRenderer';
86
+ export type { WebGl2RenderBufferRuntime } from './webgl2/WebGl2RenderBuffer';
87
+ export { WebGl2RenderBuffer } from './webgl2/WebGl2RenderBuffer';
88
+ export { WebGl2ShaderBlock } from './webgl2/WebGl2ShaderBlock';
89
+ export { webGl2PrimitiveArrayConstructors, webGl2PrimitiveByteSizeMapping, webGl2PrimitiveTypeNames } from './webgl2/WebGl2ShaderMappings';
90
+ export { createWebGl2ShaderProgram } from './webgl2/WebGl2ShaderProgram';
91
+ export { WebGl2SpriteRenderer } from './webgl2/WebGl2SpriteRenderer';
92
+ export { WebGl2TextRenderer } from './webgl2/WebGl2TextRenderer';
93
+ export type { WebGl2VertexArrayObjectRuntime } from './webgl2/WebGl2VertexArrayObject';
94
+ export { WebGl2VertexArrayObject } from './webgl2/WebGl2VertexArrayObject';
95
+ export { AbstractWebGpuRenderer } from './webgpu/AbstractWebGpuRenderer';
96
+ export type { ComputeBinding } from './webgpu/compute';
97
+ export { WebGpuComputePipeline, WebGpuStorageBuffer } from './webgpu/compute';
98
+ export { WebGpuBackend } from './webgpu/WebGpuBackend';
99
+ export { getWebGpuBlendState } from './webgpu/WebGpuBlendState';
100
+ export { WebGpuMeshRenderer } from './webgpu/WebGpuMeshRenderer';
101
+ export { WebGpuParticleRenderer } from './webgpu/WebGpuParticleRenderer';
102
+ export { WebGpuSpriteRenderer } from './webgpu/WebGpuSpriteRenderer';
103
+ export { WebGpuTextRenderer } from './webgpu/WebGpuTextRenderer';
@@ -0,0 +1,114 @@
1
+ import type { RenderTexture } from '@/rendering/texture/RenderTexture';
2
+ import type { SamplerOptions } from '@/rendering/texture/Sampler';
3
+ import type { Texture } from '@/rendering/texture/Texture';
4
+ import { BlendModes } from '@/rendering/types';
5
+ import type { ShaderSource } from './ShaderSource';
6
+ /**
7
+ * Value accepted by a material uniform. Scalars and small tuples
8
+ * auto-marshal to the appropriate `Float32Array`/`Int32Array` for the
9
+ * backend's uniform call. `Texture`/`RenderTexture` values are bound to
10
+ * texture slots starting at slot 1 — slot 0 is reserved for the drawable's
11
+ * own `texture`.
12
+ */
13
+ export type UniformValue = number | readonly [number, number] | readonly [number, number, number] | readonly [number, number, number, number] | Float32Array | Int32Array | Texture | RenderTexture;
14
+ /**
15
+ * Construction options shared by every {@link Material}.
16
+ *
17
+ * Only `shader` is required. Textures may be supplied either through the
18
+ * dedicated `textures` map or as texture-valued entries in `uniforms`;
19
+ * both are honoured by the bind-key derivation.
20
+ */
21
+ export interface MaterialOptions {
22
+ /** GLSL/WGSL source pair backing this material. */
23
+ readonly shader: ShaderSource;
24
+ /** Initial uniform values; mutate per frame via {@link Material.uniforms}. */
25
+ readonly uniforms?: Record<string, UniformValue>;
26
+ /** Named texture bindings claimed in addition to the drawable's own texture. */
27
+ readonly textures?: Record<string, Texture | RenderTexture>;
28
+ /** Compositing blend mode; defaults to {@link BlendModes.Normal}. */
29
+ readonly blendMode?: BlendModes;
30
+ /**
31
+ * Backend-agnostic sampling state descriptor, or `null` to inherit the
32
+ * backend/texture default. Defaults to `null`.
33
+ */
34
+ readonly sampler?: SamplerOptions | null;
35
+ }
36
+ /**
37
+ * Describes the look of a renderable — shader, uniforms, textures, blend
38
+ * mode, and sampling state — independent of its geometry.
39
+ *
40
+ * A `Material` can be shared across many drawables; renderers cache
41
+ * compiled programs/pipelines keyed on {@link pipelineKey} and reuse
42
+ * bindings keyed on {@link bindKey}. Subclasses fix the {@link target}
43
+ * drawable class. Call {@link destroy} when the material is no longer
44
+ * needed to release the GPU resources cached on every backend it was used
45
+ * on.
46
+ *
47
+ * Both keys are derived live from the current material state, so they stay
48
+ * stable across repeated reads and change exactly when the relevant state
49
+ * changes — even when {@link uniforms}, {@link textures}, {@link blendMode},
50
+ * or {@link sampler} are mutated in place.
51
+ * @advanced
52
+ */
53
+ export declare abstract class Material {
54
+ /** GLSL/WGSL source pair backing this material. */
55
+ readonly shader: ShaderSource;
56
+ /**
57
+ * Mutable user uniform values. Mutate between frames to drive animated
58
+ * effects; the renderer reads from this map every draw.
59
+ *
60
+ * material.uniforms.u_time = performance.now() / 1000;
61
+ * material.uniforms.u_color = [1, 0.5, 0, 1];
62
+ */
63
+ uniforms: Record<string, UniformValue>;
64
+ /** Named texture bindings claimed in addition to the drawable's own texture. */
65
+ textures: Record<string, Texture | RenderTexture>;
66
+ /** Compositing blend mode applied when drawing with this material. */
67
+ blendMode: BlendModes;
68
+ /** Backend-agnostic sampling state descriptor, or `null` for the default. */
69
+ sampler: SamplerOptions | null;
70
+ /** Which drawable class this material can serve; renderers check compatibility. */
71
+ abstract readonly target: 'mesh' | 'sprite';
72
+ private readonly _id;
73
+ private readonly _disposeCallbacks;
74
+ protected constructor(options: MaterialOptions);
75
+ /**
76
+ * Stable pipeline key: identical ⇒ same GPU pipeline/program can be used.
77
+ * Derived from shader identity, blend mode, and sampler state, and is
78
+ * independent of the owning material instance so identically configured
79
+ * materials share a pipeline. Drives grouping and the pipeline cache.
80
+ */
81
+ get pipelineKey(): number;
82
+ /**
83
+ * Stable bind key: identical ⇒ same bindings (textures unchanged). Derived
84
+ * from this material's identity and the identities of its bound textures.
85
+ * Changes when a texture is swapped; drives bind-group/slot reuse.
86
+ */
87
+ get bindKey(): number;
88
+ /**
89
+ * Set a uniform value. Equivalent to `material.uniforms[name] = value`,
90
+ * returned `this` for chaining.
91
+ */
92
+ setUniform(name: string, value: UniformValue): this;
93
+ /**
94
+ * Bind a named texture. Equivalent to `material.textures[name] = texture`,
95
+ * returned `this` for chaining.
96
+ */
97
+ setTexture(name: string, texture: Texture | RenderTexture): this;
98
+ /**
99
+ * Release GPU resources cached against this material on every backend
100
+ * that has compiled it. Safe to call multiple times. After destroy, the
101
+ * material can still be re-used — renderers recompile on next draw — but
102
+ * typical usage is to drop the reference.
103
+ */
104
+ destroy(): void;
105
+ /**
106
+ * Internal hook for renderers to register a per-material-instance cleanup
107
+ * callback (release compiled program, pipeline, or bind groups). The
108
+ * callback fires on {@link destroy}; renderers MUST also tolerate the
109
+ * material being garbage-collected without destroy ever being called.
110
+ *
111
+ * @internal
112
+ */
113
+ _onDispose(callback: () => void): void;
114
+ }
@@ -0,0 +1,111 @@
1
+ import { BlendModes } from '../types.js';
2
+ import { derivePipelineKey, deriveBindKey } from './MaterialKey.js';
3
+
4
+ let nextMaterialId = 1;
5
+ /**
6
+ * Describes the look of a renderable — shader, uniforms, textures, blend
7
+ * mode, and sampling state — independent of its geometry.
8
+ *
9
+ * A `Material` can be shared across many drawables; renderers cache
10
+ * compiled programs/pipelines keyed on {@link pipelineKey} and reuse
11
+ * bindings keyed on {@link bindKey}. Subclasses fix the {@link target}
12
+ * drawable class. Call {@link destroy} when the material is no longer
13
+ * needed to release the GPU resources cached on every backend it was used
14
+ * on.
15
+ *
16
+ * Both keys are derived live from the current material state, so they stay
17
+ * stable across repeated reads and change exactly when the relevant state
18
+ * changes — even when {@link uniforms}, {@link textures}, {@link blendMode},
19
+ * or {@link sampler} are mutated in place.
20
+ * @advanced
21
+ */
22
+ class Material {
23
+ /** GLSL/WGSL source pair backing this material. */
24
+ shader;
25
+ /**
26
+ * Mutable user uniform values. Mutate between frames to drive animated
27
+ * effects; the renderer reads from this map every draw.
28
+ *
29
+ * material.uniforms.u_time = performance.now() / 1000;
30
+ * material.uniforms.u_color = [1, 0.5, 0, 1];
31
+ */
32
+ uniforms;
33
+ /** Named texture bindings claimed in addition to the drawable's own texture. */
34
+ textures;
35
+ /** Compositing blend mode applied when drawing with this material. */
36
+ blendMode;
37
+ /** Backend-agnostic sampling state descriptor, or `null` for the default. */
38
+ sampler;
39
+ _id;
40
+ _disposeCallbacks = new Set();
41
+ constructor(options) {
42
+ if (options.shader === undefined || options.shader === null) {
43
+ throw new Error('Material requires a `shader` ShaderSource.');
44
+ }
45
+ this.shader = options.shader;
46
+ this.uniforms = { ...(options.uniforms ?? {}) };
47
+ this.textures = { ...(options.textures ?? {}) };
48
+ this.blendMode = options.blendMode ?? BlendModes.Normal;
49
+ this.sampler = options.sampler ?? null;
50
+ this._id = nextMaterialId++;
51
+ }
52
+ /**
53
+ * Stable pipeline key: identical ⇒ same GPU pipeline/program can be used.
54
+ * Derived from shader identity, blend mode, and sampler state, and is
55
+ * independent of the owning material instance so identically configured
56
+ * materials share a pipeline. Drives grouping and the pipeline cache.
57
+ */
58
+ get pipelineKey() {
59
+ return derivePipelineKey(this.shader.id, this.blendMode, this.sampler);
60
+ }
61
+ /**
62
+ * Stable bind key: identical ⇒ same bindings (textures unchanged). Derived
63
+ * from this material's identity and the identities of its bound textures.
64
+ * Changes when a texture is swapped; drives bind-group/slot reuse.
65
+ */
66
+ get bindKey() {
67
+ return deriveBindKey(this._id, this.uniforms, this.textures);
68
+ }
69
+ /**
70
+ * Set a uniform value. Equivalent to `material.uniforms[name] = value`,
71
+ * returned `this` for chaining.
72
+ */
73
+ setUniform(name, value) {
74
+ this.uniforms[name] = value;
75
+ return this;
76
+ }
77
+ /**
78
+ * Bind a named texture. Equivalent to `material.textures[name] = texture`,
79
+ * returned `this` for chaining.
80
+ */
81
+ setTexture(name, texture) {
82
+ this.textures[name] = texture;
83
+ return this;
84
+ }
85
+ /**
86
+ * Release GPU resources cached against this material on every backend
87
+ * that has compiled it. Safe to call multiple times. After destroy, the
88
+ * material can still be re-used — renderers recompile on next draw — but
89
+ * typical usage is to drop the reference.
90
+ */
91
+ destroy() {
92
+ for (const callback of this._disposeCallbacks) {
93
+ callback();
94
+ }
95
+ this._disposeCallbacks.clear();
96
+ }
97
+ /**
98
+ * Internal hook for renderers to register a per-material-instance cleanup
99
+ * callback (release compiled program, pipeline, or bind groups). The
100
+ * callback fires on {@link destroy}; renderers MUST also tolerate the
101
+ * material being garbage-collected without destroy ever being called.
102
+ *
103
+ * @internal
104
+ */
105
+ _onDispose(callback) {
106
+ this._disposeCallbacks.add(callback);
107
+ }
108
+ }
109
+
110
+ export { Material };
111
+ //# sourceMappingURL=Material.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Material.js","sources":["../../../../../src/rendering/material/Material.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAoDA,IAAI,cAAc,GAAG,CAAC;AAEtB;;;;;;;;;;;;;;;;AAgBG;MACmB,QAAQ,CAAA;;AAEZ,IAAA,MAAM;AAEtB;;;;;;AAMG;AACI,IAAA,QAAQ;;AAGR,IAAA,QAAQ;;AAGR,IAAA,SAAS;;AAGT,IAAA,OAAO;AAKG,IAAA,GAAG;AACH,IAAA,iBAAiB,GAAG,IAAI,GAAG,EAAc;AAE1D,IAAA,WAAA,CAAsB,OAAwB,EAAA;AAC5C,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE;AAC3D,YAAA,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC;QAC/D;AAEA,QAAA,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,IAAI,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE;AAC/C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,IAAI,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE;QAC/C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,UAAU,CAAC,MAAM;QACvD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI;AACtC,QAAA,IAAI,CAAC,GAAG,GAAG,cAAc,EAAE;IAC7B;AAEA;;;;;AAKG;AACH,IAAA,IAAW,WAAW,GAAA;AACpB,QAAA,OAAO,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC;IACxE;AAEA;;;;AAIG;AACH,IAAA,IAAW,OAAO,GAAA;AAChB,QAAA,OAAO,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;IAC9D;AAEA;;;AAGG;IACI,UAAU,CAAC,IAAY,EAAE,KAAmB,EAAA;AACjD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK;AAE3B,QAAA,OAAO,IAAI;IACb;AAEA;;;AAGG;IACI,UAAU,CAAC,IAAY,EAAE,OAAgC,EAAA;AAC9D,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO;AAE7B,QAAA,OAAO,IAAI;IACb;AAEA;;;;;AAKG;IACI,OAAO,GAAA;AACZ,QAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC7C,YAAA,QAAQ,EAAE;QACZ;AAEA,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;IAChC;AAEA;;;;;;;AAOG;AACI,IAAA,UAAU,CAAC,QAAoB,EAAA;AACpC,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC;IACtC;AACD;;;;"}
@@ -0,0 +1,18 @@
1
+ import type { RenderTexture } from '@/rendering/texture/RenderTexture';
2
+ import type { SamplerOptions } from '@/rendering/texture/Sampler';
3
+ import type { Texture } from '@/rendering/texture/Texture';
4
+ import type { BlendModes } from '@/rendering/types';
5
+ import type { UniformValue } from './Material';
6
+ /**
7
+ * Pipeline key from shader identity, blend mode, and sampler state.
8
+ * @internal
9
+ */
10
+ export declare const derivePipelineKey: (shaderId: number, blendMode: BlendModes, sampler: SamplerOptions | null) => number;
11
+ /**
12
+ * Bind key from material identity and the identities of every bound
13
+ * texture, whether declared in the `textures` map or carried as a
14
+ * texture-valued uniform. Texture entries are sorted before joining so the
15
+ * descriptor is independent of insertion order.
16
+ * @internal
17
+ */
18
+ export declare const deriveBindKey: (materialId: number, uniforms: Record<string, UniformValue>, textures: Record<string, Texture | RenderTexture>) => number;