@codexo/exojs 2.1.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 (467) hide show
  1. package/CHANGELOG.md +119 -0
  2. package/README.md +137 -0
  3. package/dist/esm/audio/AbstractMedia.d.ts +45 -0
  4. package/dist/esm/audio/AbstractMedia.js +98 -0
  5. package/dist/esm/audio/AbstractMedia.js.map +1 -0
  6. package/dist/esm/audio/AudioAnalyser.d.ts +30 -0
  7. package/dist/esm/audio/AudioAnalyser.js +82 -0
  8. package/dist/esm/audio/AudioAnalyser.js.map +1 -0
  9. package/dist/esm/audio/Media.d.ts +25 -0
  10. package/dist/esm/audio/Music.d.ts +20 -0
  11. package/dist/esm/audio/Music.js +118 -0
  12. package/dist/esm/audio/Music.js.map +1 -0
  13. package/dist/esm/audio/Sound.d.ts +56 -0
  14. package/dist/esm/audio/Sound.js +393 -0
  15. package/dist/esm/audio/Sound.js.map +1 -0
  16. package/dist/esm/audio/audio-context.d.ts +11 -0
  17. package/dist/esm/audio/audio-context.js +115 -0
  18. package/dist/esm/audio/audio-context.js.map +1 -0
  19. package/dist/esm/audio/index.d.ts +6 -0
  20. package/dist/esm/core/Application.d.ts +76 -0
  21. package/dist/esm/core/Application.js +198 -0
  22. package/dist/esm/core/Application.js.map +1 -0
  23. package/dist/esm/core/Bounds.d.ts +19 -0
  24. package/dist/esm/core/Bounds.js +61 -0
  25. package/dist/esm/core/Bounds.js.map +1 -0
  26. package/dist/esm/core/Clock.d.ts +18 -0
  27. package/dist/esm/core/Clock.js +67 -0
  28. package/dist/esm/core/Clock.js.map +1 -0
  29. package/dist/esm/core/Color.d.ts +176 -0
  30. package/dist/esm/core/Color.js +261 -0
  31. package/dist/esm/core/Color.js.map +1 -0
  32. package/dist/esm/core/Quadtree.d.ts +20 -0
  33. package/dist/esm/core/Quadtree.js +84 -0
  34. package/dist/esm/core/Quadtree.js.map +1 -0
  35. package/dist/esm/core/Scene.d.ts +83 -0
  36. package/dist/esm/core/Scene.js +82 -0
  37. package/dist/esm/core/Scene.js.map +1 -0
  38. package/dist/esm/core/SceneManager.d.ts +66 -0
  39. package/dist/esm/core/SceneManager.js +395 -0
  40. package/dist/esm/core/SceneManager.js.map +1 -0
  41. package/dist/esm/core/SceneNode.d.ts +58 -0
  42. package/dist/esm/core/SceneNode.js +176 -0
  43. package/dist/esm/core/SceneNode.js.map +1 -0
  44. package/dist/esm/core/Signal.d.ts +18 -0
  45. package/dist/esm/core/Signal.js +61 -0
  46. package/dist/esm/core/Signal.js.map +1 -0
  47. package/dist/esm/core/Time.d.ts +38 -0
  48. package/dist/esm/core/Time.js +106 -0
  49. package/dist/esm/core/Time.js.map +1 -0
  50. package/dist/esm/core/Timer.d.ts +12 -0
  51. package/dist/esm/core/Timer.js +33 -0
  52. package/dist/esm/core/Timer.js.map +1 -0
  53. package/dist/esm/core/index.d.ts +13 -0
  54. package/dist/esm/core/types.d.ts +29 -0
  55. package/dist/esm/core/utils.d.ts +22 -0
  56. package/dist/esm/core/utils.js +136 -0
  57. package/dist/esm/core/utils.js.map +1 -0
  58. package/dist/esm/index.d.ts +8 -0
  59. package/dist/esm/index.js +134 -0
  60. package/dist/esm/index.js.map +1 -0
  61. package/dist/esm/input/ArcadeStickGamepadMapping.d.ts +5 -0
  62. package/dist/esm/input/ArcadeStickGamepadMapping.js +29 -0
  63. package/dist/esm/input/ArcadeStickGamepadMapping.js.map +1 -0
  64. package/dist/esm/input/GameCubeGamepadMapping.d.ts +5 -0
  65. package/dist/esm/input/GameCubeGamepadMapping.js +12 -0
  66. package/dist/esm/input/GameCubeGamepadMapping.js.map +1 -0
  67. package/dist/esm/input/Gamepad.d.ts +45 -0
  68. package/dist/esm/input/Gamepad.js +150 -0
  69. package/dist/esm/input/Gamepad.js.map +1 -0
  70. package/dist/esm/input/GamepadChannels.d.ts +39 -0
  71. package/dist/esm/input/GamepadChannels.js +43 -0
  72. package/dist/esm/input/GamepadChannels.js.map +1 -0
  73. package/dist/esm/input/GamepadControl.d.ts +15 -0
  74. package/dist/esm/input/GamepadControl.js +24 -0
  75. package/dist/esm/input/GamepadControl.js.map +1 -0
  76. package/dist/esm/input/GamepadDefinitions.d.ts +31 -0
  77. package/dist/esm/input/GamepadDefinitions.js +175 -0
  78. package/dist/esm/input/GamepadDefinitions.js.map +1 -0
  79. package/dist/esm/input/GamepadMapping.d.ts +23 -0
  80. package/dist/esm/input/GamepadMapping.js +30 -0
  81. package/dist/esm/input/GamepadMapping.js.map +1 -0
  82. package/dist/esm/input/GamepadPromptLayouts.d.ts +9 -0
  83. package/dist/esm/input/GamepadPromptLayouts.js +140 -0
  84. package/dist/esm/input/GamepadPromptLayouts.js.map +1 -0
  85. package/dist/esm/input/GenericDualAnalogGamepadMapping.d.ts +5 -0
  86. package/dist/esm/input/GenericDualAnalogGamepadMapping.js +53 -0
  87. package/dist/esm/input/GenericDualAnalogGamepadMapping.js.map +1 -0
  88. package/dist/esm/input/Input.d.ts +28 -0
  89. package/dist/esm/input/Input.js +67 -0
  90. package/dist/esm/input/Input.js.map +1 -0
  91. package/dist/esm/input/InputManager.d.ts +76 -0
  92. package/dist/esm/input/InputManager.js +342 -0
  93. package/dist/esm/input/InputManager.js.map +1 -0
  94. package/dist/esm/input/JoyConLeftGamepadMapping.d.ts +5 -0
  95. package/dist/esm/input/JoyConLeftGamepadMapping.js +12 -0
  96. package/dist/esm/input/JoyConLeftGamepadMapping.js.map +1 -0
  97. package/dist/esm/input/JoyConRightGamepadMapping.d.ts +5 -0
  98. package/dist/esm/input/JoyConRightGamepadMapping.js +12 -0
  99. package/dist/esm/input/JoyConRightGamepadMapping.js.map +1 -0
  100. package/dist/esm/input/PlayStationGamepadMapping.d.ts +5 -0
  101. package/dist/esm/input/PlayStationGamepadMapping.js +12 -0
  102. package/dist/esm/input/PlayStationGamepadMapping.js.map +1 -0
  103. package/dist/esm/input/Pointer.d.ts +52 -0
  104. package/dist/esm/input/Pointer.js +118 -0
  105. package/dist/esm/input/Pointer.js.map +1 -0
  106. package/dist/esm/input/SteamControllerGamepadMapping.d.ts +5 -0
  107. package/dist/esm/input/SteamControllerGamepadMapping.js +12 -0
  108. package/dist/esm/input/SteamControllerGamepadMapping.js.map +1 -0
  109. package/dist/esm/input/SwitchProGamepadMapping.d.ts +5 -0
  110. package/dist/esm/input/SwitchProGamepadMapping.js +12 -0
  111. package/dist/esm/input/SwitchProGamepadMapping.js.map +1 -0
  112. package/dist/esm/input/XboxGamepadMapping.d.ts +5 -0
  113. package/dist/esm/input/XboxGamepadMapping.js +12 -0
  114. package/dist/esm/input/XboxGamepadMapping.js.map +1 -0
  115. package/dist/esm/input/index.d.ts +19 -0
  116. package/dist/esm/input/types.d.ts +111 -0
  117. package/dist/esm/input/types.js +111 -0
  118. package/dist/esm/input/types.js.map +1 -0
  119. package/dist/esm/math/AbstractVector.d.ts +33 -0
  120. package/dist/esm/math/AbstractVector.js +106 -0
  121. package/dist/esm/math/AbstractVector.js.map +1 -0
  122. package/dist/esm/math/Circle.d.ts +41 -0
  123. package/dist/esm/math/Circle.js +134 -0
  124. package/dist/esm/math/Circle.js.map +1 -0
  125. package/dist/esm/math/CircleLike.d.ts +5 -0
  126. package/dist/esm/math/Collision.d.ts +28 -0
  127. package/dist/esm/math/Ellipse.d.ts +37 -0
  128. package/dist/esm/math/Ellipse.js +109 -0
  129. package/dist/esm/math/Ellipse.js.map +1 -0
  130. package/dist/esm/math/EllipseLike.d.ts +6 -0
  131. package/dist/esm/math/Flags.d.ts +12 -0
  132. package/dist/esm/math/Flags.js +41 -0
  133. package/dist/esm/math/Flags.js.map +1 -0
  134. package/dist/esm/math/Interval.d.ts +16 -0
  135. package/dist/esm/math/Interval.js +43 -0
  136. package/dist/esm/math/Interval.js.map +1 -0
  137. package/dist/esm/math/Line.d.ts +36 -0
  138. package/dist/esm/math/Line.js +111 -0
  139. package/dist/esm/math/Line.js.map +1 -0
  140. package/dist/esm/math/LineLike.d.ts +6 -0
  141. package/dist/esm/math/Matrix.d.ts +32 -0
  142. package/dist/esm/math/Matrix.js +125 -0
  143. package/dist/esm/math/Matrix.js.map +1 -0
  144. package/dist/esm/math/ObservableSize.d.ts +16 -0
  145. package/dist/esm/math/ObservableSize.js +55 -0
  146. package/dist/esm/math/ObservableSize.js.map +1 -0
  147. package/dist/esm/math/ObservableVector.d.ts +21 -0
  148. package/dist/esm/math/ObservableVector.js +71 -0
  149. package/dist/esm/math/ObservableVector.js.map +1 -0
  150. package/dist/esm/math/PointLike.d.ts +4 -0
  151. package/dist/esm/math/PolarVector.d.ts +8 -0
  152. package/dist/esm/math/PolarVector.js +17 -0
  153. package/dist/esm/math/PolarVector.js.map +1 -0
  154. package/dist/esm/math/Polygon.d.ts +38 -0
  155. package/dist/esm/math/Polygon.js +161 -0
  156. package/dist/esm/math/Polygon.js.map +1 -0
  157. package/dist/esm/math/PolygonLike.d.ts +6 -0
  158. package/dist/esm/math/Random.d.ts +15 -0
  159. package/dist/esm/math/Random.js +72 -0
  160. package/dist/esm/math/Random.js.map +1 -0
  161. package/dist/esm/math/Rectangle.d.ts +48 -0
  162. package/dist/esm/math/Rectangle.js +205 -0
  163. package/dist/esm/math/Rectangle.js.map +1 -0
  164. package/dist/esm/math/RectangleLike.d.ts +6 -0
  165. package/dist/esm/math/Segment.d.ts +25 -0
  166. package/dist/esm/math/Segment.js +77 -0
  167. package/dist/esm/math/Segment.js.map +1 -0
  168. package/dist/esm/math/ShapeLike.d.ts +4 -0
  169. package/dist/esm/math/Size.d.ts +24 -0
  170. package/dist/esm/math/Size.js +69 -0
  171. package/dist/esm/math/Size.js.map +1 -0
  172. package/dist/esm/math/Transformable.d.ts +47 -0
  173. package/dist/esm/math/Transformable.js +142 -0
  174. package/dist/esm/math/Transformable.js.map +1 -0
  175. package/dist/esm/math/Vector.d.ts +28 -0
  176. package/dist/esm/math/Vector.js +77 -0
  177. package/dist/esm/math/Vector.js.map +1 -0
  178. package/dist/esm/math/collision-detection.d.ts +41 -0
  179. package/dist/esm/math/collision-detection.js +394 -0
  180. package/dist/esm/math/collision-detection.js.map +1 -0
  181. package/dist/esm/math/collision-primitives.d.ts +39 -0
  182. package/dist/esm/math/collision-primitives.js +164 -0
  183. package/dist/esm/math/collision-primitives.js.map +1 -0
  184. package/dist/esm/math/geometry.d.ts +8 -0
  185. package/dist/esm/math/geometry.js +195 -0
  186. package/dist/esm/math/geometry.js.map +1 -0
  187. package/dist/esm/math/index.d.ts +27 -0
  188. package/dist/esm/math/utils.d.ts +21 -0
  189. package/dist/esm/math/utils.js +54 -0
  190. package/dist/esm/math/utils.js.map +1 -0
  191. package/dist/esm/particles/Particle.d.ts +40 -0
  192. package/dist/esm/particles/Particle.js +108 -0
  193. package/dist/esm/particles/Particle.js.map +1 -0
  194. package/dist/esm/particles/ParticleProperties.d.ts +14 -0
  195. package/dist/esm/particles/ParticleSystem.d.ts +43 -0
  196. package/dist/esm/particles/ParticleSystem.js +185 -0
  197. package/dist/esm/particles/ParticleSystem.js.map +1 -0
  198. package/dist/esm/particles/affectors/ColorAffector.d.ts +17 -0
  199. package/dist/esm/particles/affectors/ColorAffector.js +40 -0
  200. package/dist/esm/particles/affectors/ColorAffector.js.map +1 -0
  201. package/dist/esm/particles/affectors/ForceAffector.d.ts +13 -0
  202. package/dist/esm/particles/affectors/ForceAffector.js +27 -0
  203. package/dist/esm/particles/affectors/ForceAffector.js.map +1 -0
  204. package/dist/esm/particles/affectors/ParticleAffector.d.ts +6 -0
  205. package/dist/esm/particles/affectors/ScaleAffector.d.ts +13 -0
  206. package/dist/esm/particles/affectors/ScaleAffector.js +27 -0
  207. package/dist/esm/particles/affectors/ScaleAffector.js.map +1 -0
  208. package/dist/esm/particles/affectors/TorqueAffector.d.ts +12 -0
  209. package/dist/esm/particles/affectors/TorqueAffector.js +25 -0
  210. package/dist/esm/particles/affectors/TorqueAffector.js.map +1 -0
  211. package/dist/esm/particles/emitters/ParticleEmitter.d.ts +6 -0
  212. package/dist/esm/particles/emitters/ParticleOptions.d.ts +35 -0
  213. package/dist/esm/particles/emitters/ParticleOptions.js +84 -0
  214. package/dist/esm/particles/emitters/ParticleOptions.js.map +1 -0
  215. package/dist/esm/particles/emitters/UniversalEmitter.d.ts +17 -0
  216. package/dist/esm/particles/emitters/UniversalEmitter.js +43 -0
  217. package/dist/esm/particles/emitters/UniversalEmitter.js.map +1 -0
  218. package/dist/esm/particles/index.d.ts +11 -0
  219. package/dist/esm/physics/RapierPhysicsWorld.d.ts +136 -0
  220. package/dist/esm/physics/RapierPhysicsWorld.js +464 -0
  221. package/dist/esm/physics/RapierPhysicsWorld.js.map +1 -0
  222. package/dist/esm/physics/index.d.ts +1 -0
  223. package/dist/esm/rendering/CallbackRenderPass.d.ts +7 -0
  224. package/dist/esm/rendering/CallbackRenderPass.js +11 -0
  225. package/dist/esm/rendering/CallbackRenderPass.js.map +1 -0
  226. package/dist/esm/rendering/Container.d.ts +36 -0
  227. package/dist/esm/rendering/Container.js +197 -0
  228. package/dist/esm/rendering/Container.js.map +1 -0
  229. package/dist/esm/rendering/Drawable.d.ts +16 -0
  230. package/dist/esm/rendering/Drawable.js +57 -0
  231. package/dist/esm/rendering/Drawable.js.map +1 -0
  232. package/dist/esm/rendering/RenderBackendType.d.ts +4 -0
  233. package/dist/esm/rendering/RenderBackendType.js +8 -0
  234. package/dist/esm/rendering/RenderBackendType.js.map +1 -0
  235. package/dist/esm/rendering/RenderNode.d.ts +51 -0
  236. package/dist/esm/rendering/RenderNode.js +238 -0
  237. package/dist/esm/rendering/RenderNode.js.map +1 -0
  238. package/dist/esm/rendering/RenderPass.d.ts +4 -0
  239. package/dist/esm/rendering/RenderStats.d.ts +12 -0
  240. package/dist/esm/rendering/RenderStats.js +24 -0
  241. package/dist/esm/rendering/RenderStats.js.map +1 -0
  242. package/dist/esm/rendering/RenderTarget.d.ts +34 -0
  243. package/dist/esm/rendering/RenderTarget.js +105 -0
  244. package/dist/esm/rendering/RenderTarget.js.map +1 -0
  245. package/dist/esm/rendering/RenderTargetPass.d.ts +18 -0
  246. package/dist/esm/rendering/RenderTargetPass.js +27 -0
  247. package/dist/esm/rendering/RenderTargetPass.js.map +1 -0
  248. package/dist/esm/rendering/Renderer.d.ts +15 -0
  249. package/dist/esm/rendering/RendererRegistry.d.ts +43 -0
  250. package/dist/esm/rendering/RendererRegistry.js +88 -0
  251. package/dist/esm/rendering/RendererRegistry.js.map +1 -0
  252. package/dist/esm/rendering/SceneRenderRuntime.d.ts +29 -0
  253. package/dist/esm/rendering/View.d.ts +102 -0
  254. package/dist/esm/rendering/View.js +360 -0
  255. package/dist/esm/rendering/View.js.map +1 -0
  256. package/dist/esm/rendering/filters/BlurFilter.d.ts +20 -0
  257. package/dist/esm/rendering/filters/BlurFilter.js +68 -0
  258. package/dist/esm/rendering/filters/BlurFilter.js.map +1 -0
  259. package/dist/esm/rendering/filters/ColorFilter.d.ts +12 -0
  260. package/dist/esm/rendering/filters/ColorFilter.js +41 -0
  261. package/dist/esm/rendering/filters/ColorFilter.js.map +1 -0
  262. package/dist/esm/rendering/filters/Filter.d.ts +5 -0
  263. package/dist/esm/rendering/filters/Filter.js +5 -0
  264. package/dist/esm/rendering/filters/Filter.js.map +1 -0
  265. package/dist/esm/rendering/index.d.ts +52 -0
  266. package/dist/esm/rendering/primitives/CircleGeometry.d.ts +4 -0
  267. package/dist/esm/rendering/primitives/CircleGeometry.js +21 -0
  268. package/dist/esm/rendering/primitives/CircleGeometry.js.map +1 -0
  269. package/dist/esm/rendering/primitives/DrawableShape.d.ts +11 -0
  270. package/dist/esm/rendering/primitives/DrawableShape.js +18 -0
  271. package/dist/esm/rendering/primitives/DrawableShape.js.map +1 -0
  272. package/dist/esm/rendering/primitives/Geometry.d.ts +13 -0
  273. package/dist/esm/rendering/primitives/Geometry.js +13 -0
  274. package/dist/esm/rendering/primitives/Geometry.js.map +1 -0
  275. package/dist/esm/rendering/primitives/Graphics.d.ts +36 -0
  276. package/dist/esm/rendering/primitives/Graphics.js +211 -0
  277. package/dist/esm/rendering/primitives/Graphics.js.map +1 -0
  278. package/dist/esm/rendering/shader/Shader.d.ts +27 -0
  279. package/dist/esm/rendering/shader/Shader.js +61 -0
  280. package/dist/esm/rendering/shader/Shader.js.map +1 -0
  281. package/dist/esm/rendering/shader/ShaderAttribute.d.ts +9 -0
  282. package/dist/esm/rendering/shader/ShaderAttribute.js +17 -0
  283. package/dist/esm/rendering/shader/ShaderAttribute.js.map +1 -0
  284. package/dist/esm/rendering/shader/ShaderUniform.d.ts +16 -0
  285. package/dist/esm/rendering/shader/ShaderUniform.js +33 -0
  286. package/dist/esm/rendering/shader/ShaderUniform.js.map +1 -0
  287. package/dist/esm/rendering/sprite/AnimatedSprite.d.ts +43 -0
  288. package/dist/esm/rendering/sprite/AnimatedSprite.js +177 -0
  289. package/dist/esm/rendering/sprite/AnimatedSprite.js.map +1 -0
  290. package/dist/esm/rendering/sprite/Sprite.d.ts +43 -0
  291. package/dist/esm/rendering/sprite/Sprite.js +169 -0
  292. package/dist/esm/rendering/sprite/Sprite.js.map +1 -0
  293. package/dist/esm/rendering/sprite/Spritesheet.d.ts +34 -0
  294. package/dist/esm/rendering/sprite/Spritesheet.js +87 -0
  295. package/dist/esm/rendering/sprite/Spritesheet.js.map +1 -0
  296. package/dist/esm/rendering/text/Text.d.ts +26 -0
  297. package/dist/esm/rendering/text/Text.js +126 -0
  298. package/dist/esm/rendering/text/Text.js.map +1 -0
  299. package/dist/esm/rendering/text/TextStyle.d.ts +65 -0
  300. package/dist/esm/rendering/text/TextStyle.js +179 -0
  301. package/dist/esm/rendering/text/TextStyle.js.map +1 -0
  302. package/dist/esm/rendering/texture/RenderTexture.d.ts +36 -0
  303. package/dist/esm/rendering/texture/RenderTexture.js +118 -0
  304. package/dist/esm/rendering/texture/RenderTexture.js.map +1 -0
  305. package/dist/esm/rendering/texture/Sampler.d.ts +29 -0
  306. package/dist/esm/rendering/texture/Sampler.js +69 -0
  307. package/dist/esm/rendering/texture/Sampler.js.map +1 -0
  308. package/dist/esm/rendering/texture/Texture.d.ts +52 -0
  309. package/dist/esm/rendering/texture/Texture.js +171 -0
  310. package/dist/esm/rendering/texture/Texture.js.map +1 -0
  311. package/dist/esm/rendering/types.d.ts +68 -0
  312. package/dist/esm/rendering/types.js +79 -0
  313. package/dist/esm/rendering/types.js.map +1 -0
  314. package/dist/esm/rendering/utils.d.ts +9 -0
  315. package/dist/esm/rendering/utils.js +39 -0
  316. package/dist/esm/rendering/utils.js.map +1 -0
  317. package/dist/esm/rendering/video/Video.d.ts +62 -0
  318. package/dist/esm/rendering/video/Video.js +288 -0
  319. package/dist/esm/rendering/video/Video.js.map +1 -0
  320. package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.d.ts +49 -0
  321. package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.js +168 -0
  322. package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.js.map +1 -0
  323. package/dist/esm/rendering/webgl2/AbstractWebGl2Renderer.d.ts +44 -0
  324. package/dist/esm/rendering/webgl2/AbstractWebGl2Renderer.js +59 -0
  325. package/dist/esm/rendering/webgl2/AbstractWebGl2Renderer.js.map +1 -0
  326. package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.d.ts +11 -0
  327. package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.js +110 -0
  328. package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.js.map +1 -0
  329. package/dist/esm/rendering/webgl2/WebGl2PrimitiveRenderer.d.ts +26 -0
  330. package/dist/esm/rendering/webgl2/WebGl2PrimitiveRenderer.js +211 -0
  331. package/dist/esm/rendering/webgl2/WebGl2PrimitiveRenderer.js.map +1 -0
  332. package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.d.ts +26 -0
  333. package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.js +52 -0
  334. package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.js.map +1 -0
  335. package/dist/esm/rendering/webgl2/WebGl2RenderManager.d.ts +99 -0
  336. package/dist/esm/rendering/webgl2/WebGl2RenderManager.js +592 -0
  337. package/dist/esm/rendering/webgl2/WebGl2RenderManager.js.map +1 -0
  338. package/dist/esm/rendering/webgl2/WebGl2RendererRuntime.d.ts +15 -0
  339. package/dist/esm/rendering/webgl2/WebGl2ShaderBlock.d.ts +17 -0
  340. package/dist/esm/rendering/webgl2/WebGl2ShaderBlock.js +55 -0
  341. package/dist/esm/rendering/webgl2/WebGl2ShaderBlock.js.map +1 -0
  342. package/dist/esm/rendering/webgl2/WebGl2ShaderMappings.d.ts +3 -0
  343. package/dist/esm/rendering/webgl2/WebGl2ShaderMappings.js +59 -0
  344. package/dist/esm/rendering/webgl2/WebGl2ShaderMappings.js.map +1 -0
  345. package/dist/esm/rendering/webgl2/WebGl2ShaderRuntime.d.ts +2 -0
  346. package/dist/esm/rendering/webgl2/WebGl2ShaderRuntime.js +154 -0
  347. package/dist/esm/rendering/webgl2/WebGl2ShaderRuntime.js.map +1 -0
  348. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.d.ts +11 -0
  349. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js +82 -0
  350. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js.map +1 -0
  351. package/dist/esm/rendering/webgl2/WebGl2VertexArrayObject.d.ts +40 -0
  352. package/dist/esm/rendering/webgl2/WebGl2VertexArrayObject.js +68 -0
  353. package/dist/esm/rendering/webgl2/WebGl2VertexArrayObject.js.map +1 -0
  354. package/dist/esm/rendering/webgl2/glsl/particle.frag.js +4 -0
  355. package/dist/esm/rendering/webgl2/glsl/particle.frag.js.map +1 -0
  356. package/dist/esm/rendering/webgl2/glsl/particle.vert.js +4 -0
  357. package/dist/esm/rendering/webgl2/glsl/particle.vert.js.map +1 -0
  358. package/dist/esm/rendering/webgl2/glsl/primitive.frag.js +4 -0
  359. package/dist/esm/rendering/webgl2/glsl/primitive.frag.js.map +1 -0
  360. package/dist/esm/rendering/webgl2/glsl/primitive.vert.js +4 -0
  361. package/dist/esm/rendering/webgl2/glsl/primitive.vert.js.map +1 -0
  362. package/dist/esm/rendering/webgl2/glsl/sprite.frag.js +4 -0
  363. package/dist/esm/rendering/webgl2/glsl/sprite.frag.js.map +1 -0
  364. package/dist/esm/rendering/webgl2/glsl/sprite.vert.js +4 -0
  365. package/dist/esm/rendering/webgl2/glsl/sprite.vert.js.map +1 -0
  366. package/dist/esm/rendering/webgpu/AbstractWebGpuRenderer.d.ts +28 -0
  367. package/dist/esm/rendering/webgpu/AbstractWebGpuRenderer.js +52 -0
  368. package/dist/esm/rendering/webgpu/AbstractWebGpuRenderer.js.map +1 -0
  369. package/dist/esm/rendering/webgpu/WebGpuBlendState.d.ts +6 -0
  370. package/dist/esm/rendering/webgpu/WebGpuBlendState.js +79 -0
  371. package/dist/esm/rendering/webgpu/WebGpuBlendState.js.map +1 -0
  372. package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.d.ts +33 -0
  373. package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js +423 -0
  374. package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js.map +1 -0
  375. package/dist/esm/rendering/webgpu/WebGpuPrimitiveRenderer.d.ts +43 -0
  376. package/dist/esm/rendering/webgpu/WebGpuPrimitiveRenderer.js +425 -0
  377. package/dist/esm/rendering/webgpu/WebGpuPrimitiveRenderer.js.map +1 -0
  378. package/dist/esm/rendering/webgpu/WebGpuRenderManager.d.ts +111 -0
  379. package/dist/esm/rendering/webgpu/WebGpuRenderManager.js +763 -0
  380. package/dist/esm/rendering/webgpu/WebGpuRenderManager.js.map +1 -0
  381. package/dist/esm/rendering/webgpu/WebGpuRendererRuntime.d.ts +8 -0
  382. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.d.ts +33 -0
  383. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js +488 -0
  384. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js.map +1 -0
  385. package/dist/esm/resources/AbstractAssetFactory.d.ts +10 -0
  386. package/dist/esm/resources/AbstractAssetFactory.js +26 -0
  387. package/dist/esm/resources/AbstractAssetFactory.js.map +1 -0
  388. package/dist/esm/resources/AssetFactory.d.ts +6 -0
  389. package/dist/esm/resources/AssetManifest.d.ts +28 -0
  390. package/dist/esm/resources/AssetManifest.js +64 -0
  391. package/dist/esm/resources/AssetManifest.js.map +1 -0
  392. package/dist/esm/resources/CacheFirstStrategy.d.ts +5 -0
  393. package/dist/esm/resources/CacheFirstStrategy.js +34 -0
  394. package/dist/esm/resources/CacheFirstStrategy.js.map +1 -0
  395. package/dist/esm/resources/CacheStore.d.ts +7 -0
  396. package/dist/esm/resources/CacheStrategy.d.ts +12 -0
  397. package/dist/esm/resources/Database.d.ts +13 -0
  398. package/dist/esm/resources/FactoryRegistry.d.ts +9 -0
  399. package/dist/esm/resources/FactoryRegistry.js +44 -0
  400. package/dist/esm/resources/FactoryRegistry.js.map +1 -0
  401. package/dist/esm/resources/IndexedDbDatabase.d.ts +21 -0
  402. package/dist/esm/resources/IndexedDbDatabase.js +139 -0
  403. package/dist/esm/resources/IndexedDbDatabase.js.map +1 -0
  404. package/dist/esm/resources/IndexedDbStore.d.ts +16 -0
  405. package/dist/esm/resources/IndexedDbStore.js +31 -0
  406. package/dist/esm/resources/IndexedDbStore.js.map +1 -0
  407. package/dist/esm/resources/Loader.d.ts +88 -0
  408. package/dist/esm/resources/Loader.js +597 -0
  409. package/dist/esm/resources/Loader.js.map +1 -0
  410. package/dist/esm/resources/NetworkOnlyStrategy.d.ts +5 -0
  411. package/dist/esm/resources/NetworkOnlyStrategy.js +12 -0
  412. package/dist/esm/resources/NetworkOnlyStrategy.js.map +1 -0
  413. package/dist/esm/resources/factories/BinaryFactory.d.ts +6 -0
  414. package/dist/esm/resources/factories/BinaryFactory.js +17 -0
  415. package/dist/esm/resources/factories/BinaryFactory.js.map +1 -0
  416. package/dist/esm/resources/factories/FontFactory.d.ts +13 -0
  417. package/dist/esm/resources/factories/FontFactory.js +39 -0
  418. package/dist/esm/resources/factories/FontFactory.js.map +1 -0
  419. package/dist/esm/resources/factories/ImageFactory.d.ts +10 -0
  420. package/dist/esm/resources/factories/ImageFactory.js +38 -0
  421. package/dist/esm/resources/factories/ImageFactory.js.map +1 -0
  422. package/dist/esm/resources/factories/JsonFactory.d.ts +6 -0
  423. package/dist/esm/resources/factories/JsonFactory.js +17 -0
  424. package/dist/esm/resources/factories/JsonFactory.js.map +1 -0
  425. package/dist/esm/resources/factories/MusicFactory.d.ts +16 -0
  426. package/dist/esm/resources/factories/MusicFactory.js +40 -0
  427. package/dist/esm/resources/factories/MusicFactory.js.map +1 -0
  428. package/dist/esm/resources/factories/SoundFactory.d.ts +14 -0
  429. package/dist/esm/resources/factories/SoundFactory.js +25 -0
  430. package/dist/esm/resources/factories/SoundFactory.js.map +1 -0
  431. package/dist/esm/resources/factories/SvgFactory.d.ts +6 -0
  432. package/dist/esm/resources/factories/SvgFactory.js +37 -0
  433. package/dist/esm/resources/factories/SvgFactory.js.map +1 -0
  434. package/dist/esm/resources/factories/TextFactory.d.ts +6 -0
  435. package/dist/esm/resources/factories/TextFactory.js +17 -0
  436. package/dist/esm/resources/factories/TextFactory.js.map +1 -0
  437. package/dist/esm/resources/factories/TextureFactory.d.ts +13 -0
  438. package/dist/esm/resources/factories/TextureFactory.js +40 -0
  439. package/dist/esm/resources/factories/TextureFactory.js.map +1 -0
  440. package/dist/esm/resources/factories/VideoFactory.d.ts +18 -0
  441. package/dist/esm/resources/factories/VideoFactory.js +43 -0
  442. package/dist/esm/resources/factories/VideoFactory.js.map +1 -0
  443. package/dist/esm/resources/factories/VttFactory.d.ts +6 -0
  444. package/dist/esm/resources/factories/VttFactory.js +60 -0
  445. package/dist/esm/resources/factories/VttFactory.js.map +1 -0
  446. package/dist/esm/resources/factories/WasmFactory.d.ts +6 -0
  447. package/dist/esm/resources/factories/WasmFactory.js +17 -0
  448. package/dist/esm/resources/factories/WasmFactory.js.map +1 -0
  449. package/dist/esm/resources/index.d.ts +26 -0
  450. package/dist/esm/resources/tokens.d.ts +30 -0
  451. package/dist/esm/resources/tokens.js +33 -0
  452. package/dist/esm/resources/tokens.js.map +1 -0
  453. package/dist/esm/resources/utils.d.ts +1 -0
  454. package/dist/esm/resources/utils.js +129 -0
  455. package/dist/esm/resources/utils.js.map +1 -0
  456. package/dist/esm/vendor/webgl-debug.js +1160 -0
  457. package/dist/esm/vendor/webgl-debug.js.map +1 -0
  458. package/dist/exo.d.ts +4748 -0
  459. package/dist/exo.esm.js +16850 -0
  460. package/dist/exo.esm.js.map +1 -0
  461. package/dist/exo.esm.min.js +2 -0
  462. package/dist/exo.esm.min.js.map +1 -0
  463. package/dist/exo.global.js +17067 -0
  464. package/dist/exo.global.js.map +1 -0
  465. package/dist/exo.global.min.js +2 -0
  466. package/dist/exo.global.min.js.map +1 -0
  467. package/package.json +99 -0
@@ -0,0 +1,763 @@
1
+ import { Color } from '../../core/Color.js';
2
+ import { BlendModes, WrapModes, ScaleModes } from '../types.js';
3
+ import { RenderBackendType } from '../RenderBackendType.js';
4
+ import { RendererRegistry } from '../RendererRegistry.js';
5
+ import { createRenderStats, resetRenderStats } from '../RenderStats.js';
6
+ import { RenderTarget } from '../RenderTarget.js';
7
+ import { WebGpuPrimitiveRenderer } from './WebGpuPrimitiveRenderer.js';
8
+ import { WebGpuSpriteRenderer } from './WebGpuSpriteRenderer.js';
9
+ import { WebGpuParticleRenderer } from './WebGpuParticleRenderer.js';
10
+ import { RenderTexture } from '../texture/RenderTexture.js';
11
+ import { Sprite } from '../sprite/Sprite.js';
12
+ import { DrawableShape } from '../primitives/DrawableShape.js';
13
+ import { ParticleSystem } from '../../particles/ParticleSystem.js';
14
+ import { Vector } from '../../math/Vector.js';
15
+
16
+ /// <reference types="@webgpu/types" />
17
+ const managedTextureFormat = 'rgba8unorm';
18
+ class WebGpuRenderManager {
19
+ constructor(app) {
20
+ this.backendType = RenderBackendType.WebGpu;
21
+ this.rendererRegistry = new RendererRegistry();
22
+ this._clearColor = new Color();
23
+ this._textureStates = new Map();
24
+ this._textureDestroyHandlers = new Map();
25
+ this._renderTargetDestroyHandlers = new Map();
26
+ this._temporaryRenderTextures = [];
27
+ this._maskStack = [];
28
+ this._maskPixelStack = [];
29
+ this._maskPointA = new Vector();
30
+ this._maskPointB = new Vector();
31
+ this._mipmapShaderModule = null;
32
+ this._mipmapBindGroupLayout = null;
33
+ this._mipmapPipelineLayout = null;
34
+ this._mipmapPipeline = null;
35
+ this._mipmapSampler = null;
36
+ this._context = null;
37
+ this._device = null;
38
+ this._format = null;
39
+ this._initializePromise = null;
40
+ this._renderer = null;
41
+ this._blendMode = null;
42
+ this._texture = null;
43
+ this._clearRequested = false;
44
+ this._hasPresentedFrame = false;
45
+ this._stats = createRenderStats();
46
+ const { width, height, clearColor, } = app.options;
47
+ this._canvas = app.canvas;
48
+ this._rootRenderTarget = new RenderTarget(width, height, true);
49
+ this._renderTarget = this._rootRenderTarget;
50
+ if (clearColor) {
51
+ this._clearColor.copy(clearColor);
52
+ }
53
+ this.rendererRegistry.registerRenderer(DrawableShape, new WebGpuPrimitiveRenderer());
54
+ this.rendererRegistry.registerRenderer(Sprite, new WebGpuSpriteRenderer());
55
+ this.rendererRegistry.registerRenderer(ParticleSystem, new WebGpuParticleRenderer());
56
+ this.resize(width, height);
57
+ }
58
+ get view() {
59
+ return this._renderTarget.view;
60
+ }
61
+ get renderTarget() {
62
+ return this._renderTarget;
63
+ }
64
+ get device() {
65
+ if (this._device === null) {
66
+ throw new Error('WebGPU device is not initialized yet.');
67
+ }
68
+ return this._device;
69
+ }
70
+ get context() {
71
+ if (this._context === null) {
72
+ throw new Error('WebGPU canvas context is not initialized yet.');
73
+ }
74
+ return this._context;
75
+ }
76
+ get format() {
77
+ if (this._format === null) {
78
+ throw new Error('WebGPU canvas format is not initialized yet.');
79
+ }
80
+ return this._format;
81
+ }
82
+ get renderTargetFormat() {
83
+ return this._renderTarget === this._rootRenderTarget ? this.format : managedTextureFormat;
84
+ }
85
+ get clearRequested() {
86
+ return this._clearRequested;
87
+ }
88
+ get stats() {
89
+ return this._stats;
90
+ }
91
+ initialize() {
92
+ if (!this._initializePromise) {
93
+ this._initializePromise = this._initialize().catch((error) => {
94
+ this._initializePromise = null;
95
+ throw error;
96
+ });
97
+ }
98
+ return this._initializePromise;
99
+ }
100
+ resetStats() {
101
+ resetRenderStats(this._stats);
102
+ return this;
103
+ }
104
+ draw(drawable) {
105
+ const renderer = this.rendererRegistry.resolve(drawable);
106
+ this._setActiveRenderer(renderer);
107
+ renderer.render(drawable);
108
+ this._stats.submittedNodes++;
109
+ return this;
110
+ }
111
+ execute(pass) {
112
+ this._flushActiveRenderer();
113
+ this._stats.renderPasses++;
114
+ pass.execute(this);
115
+ return this;
116
+ }
117
+ setShader(shader) {
118
+ if (shader !== null) {
119
+ throw new Error('WebGPU shaders are not implemented yet.');
120
+ }
121
+ return this;
122
+ }
123
+ setTexture(texture, _unit) {
124
+ if (texture === null) {
125
+ this._texture = null;
126
+ return this;
127
+ }
128
+ if (texture instanceof RenderTarget && !(texture instanceof RenderTexture)) {
129
+ throw new Error('WebGPU render textures are not implemented yet.');
130
+ }
131
+ this._syncTexture(texture);
132
+ this._texture = texture;
133
+ return this;
134
+ }
135
+ setBlendMode(blendMode) {
136
+ if (blendMode === null) {
137
+ this._blendMode = null;
138
+ return this;
139
+ }
140
+ if (blendMode !== BlendModes.Normal
141
+ && blendMode !== BlendModes.Additive
142
+ && blendMode !== BlendModes.Subtract
143
+ && blendMode !== BlendModes.Multiply
144
+ && blendMode !== BlendModes.Screen) {
145
+ throw new Error(`WebGPU blend mode "${blendMode}" is not implemented yet.`);
146
+ }
147
+ this._blendMode = blendMode;
148
+ return this;
149
+ }
150
+ setVao(vao) {
151
+ if (vao !== null) {
152
+ throw new Error('WebGPU vertex array objects are not implemented yet.');
153
+ }
154
+ return this;
155
+ }
156
+ setRenderTarget(target) {
157
+ const nextRenderTarget = target ?? this._rootRenderTarget;
158
+ if (!nextRenderTarget.root && !(nextRenderTarget instanceof RenderTexture)) {
159
+ throw new Error('WebGPU currently supports only root targets and RenderTexture targets.');
160
+ }
161
+ if (this._renderTarget !== nextRenderTarget) {
162
+ this._flushActiveRenderer();
163
+ if (this._renderTarget !== this._rootRenderTarget) {
164
+ this._unsubscribeRenderTarget(this._renderTarget);
165
+ }
166
+ this._renderTarget = nextRenderTarget;
167
+ this._stats.renderTargetChanges++;
168
+ if (nextRenderTarget !== this._rootRenderTarget) {
169
+ this._subscribeRenderTarget(nextRenderTarget);
170
+ }
171
+ }
172
+ return this;
173
+ }
174
+ pushMask(maskBounds) {
175
+ this._flushActiveRenderer();
176
+ this._maskStack.push(maskBounds.clone());
177
+ const nextMask = this._toMaskPixels(maskBounds);
178
+ const previousMask = this._maskPixelStack.length > 0
179
+ ? this._maskPixelStack[this._maskPixelStack.length - 1]
180
+ : null;
181
+ const resolvedMask = previousMask ? this._intersectMasks(previousMask, nextMask) : nextMask;
182
+ this._maskPixelStack.push(resolvedMask);
183
+ return this;
184
+ }
185
+ popMask() {
186
+ if (this._maskStack.length === 0) {
187
+ return this;
188
+ }
189
+ this._flushActiveRenderer();
190
+ const removedMask = this._maskStack.pop();
191
+ if (removedMask) {
192
+ removedMask.destroy();
193
+ }
194
+ this._maskPixelStack.pop();
195
+ return this;
196
+ }
197
+ getScissorRect() {
198
+ if (this._maskPixelStack.length === 0) {
199
+ return null;
200
+ }
201
+ const mask = this._maskPixelStack[this._maskPixelStack.length - 1];
202
+ return {
203
+ x: mask.x,
204
+ y: mask.y,
205
+ width: mask.width,
206
+ height: mask.height,
207
+ };
208
+ }
209
+ acquireRenderTexture(width, height) {
210
+ for (let index = 0; index < this._temporaryRenderTextures.length; index++) {
211
+ const texture = this._temporaryRenderTextures[index];
212
+ if (texture.width === width && texture.height === height) {
213
+ this._temporaryRenderTextures.splice(index, 1);
214
+ return texture;
215
+ }
216
+ }
217
+ return new RenderTexture(width, height);
218
+ }
219
+ releaseRenderTexture(texture) {
220
+ if (this._temporaryRenderTextures.includes(texture)) {
221
+ return this;
222
+ }
223
+ texture.setView(null);
224
+ this._temporaryRenderTextures.push(texture);
225
+ return this;
226
+ }
227
+ setView(view) {
228
+ this._flushActiveRenderer();
229
+ this._renderTarget.setView(view);
230
+ return this;
231
+ }
232
+ clear(color) {
233
+ if (color) {
234
+ this._clearColor.copy(color);
235
+ }
236
+ this._clearRequested = true;
237
+ return this;
238
+ }
239
+ resize(width, height) {
240
+ this._canvas.width = width;
241
+ this._canvas.height = height;
242
+ this._rootRenderTarget.resize(width, height);
243
+ this._hasPresentedFrame = false;
244
+ return this;
245
+ }
246
+ flush() {
247
+ if (!this._device || !this._context) {
248
+ return this;
249
+ }
250
+ if (this._renderer) {
251
+ this._flushActiveRenderer();
252
+ }
253
+ else if (this._clearRequested) {
254
+ const encoder = this._device.createCommandEncoder();
255
+ const pass = encoder.beginRenderPass({
256
+ colorAttachments: [this.createColorAttachment()],
257
+ });
258
+ pass.end();
259
+ this._stats.renderPasses++;
260
+ this.submit(encoder.finish());
261
+ }
262
+ return this;
263
+ }
264
+ destroy() {
265
+ this._setActiveRenderer(null);
266
+ this.rendererRegistry.destroy();
267
+ this._destroyManagedTextures();
268
+ this._destroyTemporaryRenderTextures();
269
+ for (const mask of this._maskStack) {
270
+ mask.destroy();
271
+ }
272
+ this._maskStack.length = 0;
273
+ this._maskPixelStack.length = 0;
274
+ this._maskPointA.destroy();
275
+ this._maskPointB.destroy();
276
+ for (const target of Array.from(this._renderTargetDestroyHandlers.keys())) {
277
+ this._unsubscribeRenderTarget(target);
278
+ }
279
+ this._context?.unconfigure();
280
+ this._context = null;
281
+ this._device = null;
282
+ this._format = null;
283
+ this._initializePromise = null;
284
+ this._clearRequested = false;
285
+ this._hasPresentedFrame = false;
286
+ this._texture = null;
287
+ this._mipmapShaderModule = null;
288
+ this._mipmapBindGroupLayout = null;
289
+ this._mipmapPipelineLayout = null;
290
+ this._mipmapPipeline = null;
291
+ this._mipmapSampler = null;
292
+ this._renderTarget = this._rootRenderTarget;
293
+ this._clearColor.destroy();
294
+ this._rootRenderTarget.destroy();
295
+ }
296
+ createColorAttachment() {
297
+ const renderTarget = this._renderTarget;
298
+ let attachmentState = null;
299
+ if (renderTarget === this._rootRenderTarget) {
300
+ attachmentState = {
301
+ view: this.context.getCurrentTexture().createView(),
302
+ shouldClear: this._clearRequested || !this._hasPresentedFrame,
303
+ };
304
+ }
305
+ else if (renderTarget instanceof RenderTexture) {
306
+ const state = this._syncTexture(renderTarget);
307
+ attachmentState = {
308
+ view: state.view,
309
+ shouldClear: this._clearRequested || !state.hasContent,
310
+ };
311
+ }
312
+ else {
313
+ throw new Error('WebGPU currently supports only root targets and RenderTexture targets.');
314
+ }
315
+ this._clearRequested = false;
316
+ return {
317
+ view: attachmentState.view,
318
+ clearValue: {
319
+ r: this._clearColor.r / 255,
320
+ g: this._clearColor.g / 255,
321
+ b: this._clearColor.b / 255,
322
+ a: this._clearColor.a,
323
+ },
324
+ loadOp: attachmentState.shouldClear ? 'clear' : 'load',
325
+ storeOp: 'store',
326
+ };
327
+ }
328
+ submit(commandBuffer) {
329
+ this.device.queue.submit([commandBuffer]);
330
+ if (this._renderTarget === this._rootRenderTarget) {
331
+ this._hasPresentedFrame = true;
332
+ }
333
+ else if (this._renderTarget instanceof RenderTexture) {
334
+ const state = this._syncTexture(this._renderTarget);
335
+ state.hasContent = true;
336
+ if (state.mipLevelCount > 1) {
337
+ this._generateMipmaps(state.texture, state.mipLevelCount);
338
+ }
339
+ }
340
+ }
341
+ getTextureBinding(texture) {
342
+ const state = this._syncTexture(texture);
343
+ return {
344
+ view: state.view,
345
+ sampler: state.sampler,
346
+ };
347
+ }
348
+ shouldPremultiplyTextureSample(texture) {
349
+ return !(texture instanceof RenderTexture) && texture.premultiplyAlpha;
350
+ }
351
+ _setActiveRenderer(renderer) {
352
+ if (this._renderer !== renderer) {
353
+ this._flushActiveRenderer();
354
+ this._renderer = renderer;
355
+ }
356
+ }
357
+ _flushActiveRenderer() {
358
+ this._renderer?.flush();
359
+ }
360
+ async _initialize() {
361
+ const gpuNavigator = this._getGpuNavigator();
362
+ if (gpuNavigator === null) {
363
+ throw new Error('This browser does not support WebGPU.');
364
+ }
365
+ if (typeof gpuNavigator.gpu.requestAdapter !== 'function') {
366
+ throw new Error('WebGPU is available, but navigator.gpu.requestAdapter is not implemented.');
367
+ }
368
+ if (typeof gpuNavigator.gpu.getPreferredCanvasFormat !== 'function') {
369
+ throw new Error('WebGPU is available, but navigator.gpu.getPreferredCanvasFormat is not implemented.');
370
+ }
371
+ const context = this._canvas.getContext('webgpu');
372
+ if (context === null) {
373
+ throw new Error('Could not create WebGPU canvas context.');
374
+ }
375
+ let adapter = null;
376
+ try {
377
+ adapter = await gpuNavigator.gpu.requestAdapter();
378
+ }
379
+ catch (error) {
380
+ throw this._createInitializationError('Failed to request a WebGPU adapter.', error);
381
+ }
382
+ if (adapter === null) {
383
+ throw new Error('Could not acquire a WebGPU adapter.');
384
+ }
385
+ if (typeof adapter.requestDevice !== 'function') {
386
+ throw new Error('WebGPU adapter does not expose requestDevice().');
387
+ }
388
+ let device = null;
389
+ try {
390
+ device = await adapter.requestDevice();
391
+ }
392
+ catch (error) {
393
+ throw this._createInitializationError('Failed to request a WebGPU device.', error);
394
+ }
395
+ if (device === null) {
396
+ throw new Error('Could not acquire a WebGPU device.');
397
+ }
398
+ const format = gpuNavigator.gpu.getPreferredCanvasFormat();
399
+ try {
400
+ context.configure({
401
+ device,
402
+ format,
403
+ alphaMode: 'opaque',
404
+ });
405
+ }
406
+ catch (error) {
407
+ throw this._createInitializationError('Failed to configure the WebGPU canvas context.', error);
408
+ }
409
+ this._context = context;
410
+ this._device = device;
411
+ this._format = format;
412
+ this._blendMode = BlendModes.Normal;
413
+ this._hasPresentedFrame = false;
414
+ this.rendererRegistry.connect(this);
415
+ this.resize(this._canvas.width, this._canvas.height);
416
+ return this;
417
+ }
418
+ _getGpuNavigator() {
419
+ const gpuNavigator = navigator;
420
+ return gpuNavigator.gpu ? gpuNavigator : null;
421
+ }
422
+ _createInitializationError(message, error) {
423
+ if (error instanceof Error && error.message.length > 0) {
424
+ return new Error(`${message} ${error.message}`);
425
+ }
426
+ return new Error(message);
427
+ }
428
+ _destroyManagedTextures() {
429
+ for (const texture of Array.from(this._textureStates.keys())) {
430
+ this._evictTexture(texture);
431
+ }
432
+ }
433
+ _destroyTemporaryRenderTextures() {
434
+ for (const texture of this._temporaryRenderTextures) {
435
+ texture.destroy();
436
+ }
437
+ this._temporaryRenderTextures.length = 0;
438
+ }
439
+ _getTextureState(texture) {
440
+ let state = this._textureStates.get(texture);
441
+ if (!state) {
442
+ const gpuTexture = this.device.createTexture({
443
+ size: {
444
+ width: Math.max(texture.width, 1),
445
+ height: Math.max(texture.height, 1),
446
+ },
447
+ format: managedTextureFormat,
448
+ mipLevelCount: this._getMipLevelCount(texture),
449
+ usage: this._getTextureUsage(texture),
450
+ });
451
+ state = {
452
+ texture: gpuTexture,
453
+ view: gpuTexture.createView(),
454
+ sampler: this._createSampler(texture),
455
+ version: -1,
456
+ width: texture.width,
457
+ height: texture.height,
458
+ mipLevelCount: this._getMipLevelCount(texture),
459
+ hasContent: false,
460
+ };
461
+ const destroyHandler = () => {
462
+ this._evictTexture(texture);
463
+ };
464
+ texture.addDestroyListener(destroyHandler);
465
+ this._textureDestroyHandlers.set(texture, destroyHandler);
466
+ this._textureStates.set(texture, state);
467
+ }
468
+ return state;
469
+ }
470
+ _syncTexture(texture) {
471
+ if (!(texture instanceof RenderTexture) && (texture.source === null || texture.width === 0 || texture.height === 0)) {
472
+ throw new Error('WebGPU sprite rendering requires a texture with a valid source and non-zero dimensions.');
473
+ }
474
+ const state = this._getTextureState(texture);
475
+ const textureVersion = texture instanceof RenderTexture ? texture.textureVersion : texture.version;
476
+ const mipLevelCount = this._getMipLevelCount(texture);
477
+ if (state.version !== textureVersion) {
478
+ if (state.width !== texture.width || state.height !== texture.height || state.mipLevelCount !== mipLevelCount) {
479
+ state.texture.destroy();
480
+ const resizedTexture = this.device.createTexture({
481
+ size: {
482
+ width: texture.width,
483
+ height: texture.height,
484
+ },
485
+ format: managedTextureFormat,
486
+ mipLevelCount,
487
+ usage: this._getTextureUsage(texture),
488
+ });
489
+ state.texture = resizedTexture;
490
+ state.view = resizedTexture.createView();
491
+ state.width = texture.width;
492
+ state.height = texture.height;
493
+ state.mipLevelCount = mipLevelCount;
494
+ state.hasContent = false;
495
+ }
496
+ state.sampler = this._createSampler(texture);
497
+ if (!(texture instanceof RenderTexture)) {
498
+ const source = texture.source;
499
+ this.device.queue.copyExternalImageToTexture({
500
+ source,
501
+ flipY: false,
502
+ }, {
503
+ texture: state.texture,
504
+ }, {
505
+ width: texture.width,
506
+ height: texture.height,
507
+ });
508
+ if (state.mipLevelCount > 1) {
509
+ this._generateMipmaps(state.texture, state.mipLevelCount);
510
+ }
511
+ }
512
+ state.version = textureVersion;
513
+ }
514
+ return state;
515
+ }
516
+ _evictTexture(texture) {
517
+ const state = this._textureStates.get(texture);
518
+ const destroyHandler = this._textureDestroyHandlers.get(texture);
519
+ if (destroyHandler) {
520
+ texture.removeDestroyListener(destroyHandler);
521
+ this._textureDestroyHandlers.delete(texture);
522
+ }
523
+ if (state) {
524
+ state.texture.destroy();
525
+ this._textureStates.delete(texture);
526
+ }
527
+ if (this._texture === texture) {
528
+ this._texture = null;
529
+ }
530
+ }
531
+ _subscribeRenderTarget(target) {
532
+ if (!this._renderTargetDestroyHandlers.has(target)) {
533
+ const destroyHandler = () => {
534
+ if (this._renderTarget === target) {
535
+ this._renderTarget = this._rootRenderTarget;
536
+ }
537
+ this._renderTargetDestroyHandlers.delete(target);
538
+ };
539
+ target.addDestroyListener(destroyHandler);
540
+ this._renderTargetDestroyHandlers.set(target, destroyHandler);
541
+ }
542
+ }
543
+ _unsubscribeRenderTarget(target) {
544
+ const destroyHandler = this._renderTargetDestroyHandlers.get(target);
545
+ if (destroyHandler) {
546
+ target.removeDestroyListener(destroyHandler);
547
+ this._renderTargetDestroyHandlers.delete(target);
548
+ }
549
+ }
550
+ _toMaskPixels(maskBounds) {
551
+ const topLeft = this._renderTarget.mapCoordsToPixel(this._maskPointA.set(maskBounds.left, maskBounds.top));
552
+ const bottomRight = this._renderTarget.mapCoordsToPixel(this._maskPointB.set(maskBounds.right, maskBounds.bottom));
553
+ const minX = Math.min(topLeft.x, bottomRight.x);
554
+ const maxX = Math.max(topLeft.x, bottomRight.x);
555
+ const minY = Math.min(topLeft.y, bottomRight.y);
556
+ const maxY = Math.max(topLeft.y, bottomRight.y);
557
+ const targetWidth = this._renderTarget.width;
558
+ const targetHeight = this._renderTarget.height;
559
+ const x = Math.max(0, Math.min(targetWidth, Math.floor(minX)));
560
+ const right = Math.max(0, Math.min(targetWidth, Math.ceil(maxX)));
561
+ const y = Math.max(0, Math.min(targetHeight, Math.floor(minY)));
562
+ const bottom = Math.max(0, Math.min(targetHeight, Math.ceil(maxY)));
563
+ const width = Math.max(0, right - x);
564
+ const height = Math.max(0, bottom - y);
565
+ return { x, y, width, height };
566
+ }
567
+ _intersectMasks(first, second) {
568
+ const left = Math.max(first.x, second.x);
569
+ const top = Math.max(first.y, second.y);
570
+ const right = Math.min(first.x + first.width, second.x + second.width);
571
+ const bottom = Math.min(first.y + first.height, second.y + second.height);
572
+ return {
573
+ x: left,
574
+ y: top,
575
+ width: Math.max(0, right - left),
576
+ height: Math.max(0, bottom - top),
577
+ };
578
+ }
579
+ _createSampler(texture) {
580
+ return this.device.createSampler({
581
+ addressModeU: this._getAddressMode(texture.wrapMode),
582
+ addressModeV: this._getAddressMode(texture.wrapMode),
583
+ magFilter: this._getFilterMode(texture.scaleMode),
584
+ minFilter: this._getFilterMode(texture.scaleMode),
585
+ mipmapFilter: this._getMipmapFilterMode(texture.scaleMode),
586
+ });
587
+ }
588
+ _getTextureUsage(texture) {
589
+ const mipmapUsage = this._getMipLevelCount(texture) > 1 ? GPUTextureUsage.RENDER_ATTACHMENT : 0;
590
+ if (texture instanceof RenderTexture) {
591
+ return GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.RENDER_ATTACHMENT | mipmapUsage;
592
+ }
593
+ return GPUTextureUsage.COPY_DST | GPUTextureUsage.TEXTURE_BINDING | mipmapUsage;
594
+ }
595
+ _getAddressMode(wrapMode) {
596
+ switch (wrapMode) {
597
+ case WrapModes.Repeat:
598
+ return 'repeat';
599
+ case WrapModes.MirroredRepeat:
600
+ return 'mirror-repeat';
601
+ default:
602
+ return 'clamp-to-edge';
603
+ }
604
+ }
605
+ _getFilterMode(scaleMode) {
606
+ switch (scaleMode) {
607
+ case ScaleModes.Nearest:
608
+ case ScaleModes.NearestMipmapNearest:
609
+ case ScaleModes.NearestMipmapLinear:
610
+ return 'nearest';
611
+ default:
612
+ return 'linear';
613
+ }
614
+ }
615
+ _getMipmapFilterMode(scaleMode) {
616
+ switch (scaleMode) {
617
+ case ScaleModes.NearestMipmapLinear:
618
+ case ScaleModes.LinearMipmapLinear:
619
+ return 'linear';
620
+ default:
621
+ return 'nearest';
622
+ }
623
+ }
624
+ _getMipLevelCount(texture) {
625
+ if (!texture.generateMipMap) {
626
+ return 1;
627
+ }
628
+ const maxSize = Math.max(texture.width, texture.height);
629
+ if (maxSize <= 1) {
630
+ return 1;
631
+ }
632
+ return Math.floor(Math.log2(maxSize)) + 1;
633
+ }
634
+ _generateMipmaps(texture, mipLevelCount) {
635
+ if (mipLevelCount <= 1) {
636
+ return;
637
+ }
638
+ const resources = this._getMipmapResources();
639
+ const encoder = this.device.createCommandEncoder();
640
+ for (let mipLevel = 1; mipLevel < mipLevelCount; mipLevel++) {
641
+ const bindGroup = this.device.createBindGroup({
642
+ layout: resources.bindGroupLayout,
643
+ entries: [{
644
+ binding: 0,
645
+ resource: texture.createView({
646
+ baseMipLevel: mipLevel - 1,
647
+ mipLevelCount: 1,
648
+ }),
649
+ }, {
650
+ binding: 1,
651
+ resource: resources.sampler,
652
+ }],
653
+ });
654
+ const pass = encoder.beginRenderPass({
655
+ colorAttachments: [{
656
+ view: texture.createView({
657
+ baseMipLevel: mipLevel,
658
+ mipLevelCount: 1,
659
+ }),
660
+ clearValue: { r: 0, g: 0, b: 0, a: 0 },
661
+ loadOp: 'clear',
662
+ storeOp: 'store',
663
+ }],
664
+ });
665
+ pass.setPipeline(resources.pipeline);
666
+ pass.setBindGroup(0, bindGroup);
667
+ pass.draw(3);
668
+ pass.end();
669
+ }
670
+ this.device.queue.submit([encoder.finish()]);
671
+ }
672
+ _getMipmapResources() {
673
+ if (this._mipmapShaderModule === null || this._mipmapBindGroupLayout === null || this._mipmapPipelineLayout === null || this._mipmapPipeline === null || this._mipmapSampler === null) {
674
+ this._mipmapShaderModule = this.device.createShaderModule({
675
+ code: `
676
+ struct VertexOutput {
677
+ @builtin(position) position: vec4<f32>,
678
+ @location(0) texcoord: vec2<f32>,
679
+ };
680
+
681
+ @group(0) @binding(0)
682
+ var sourceTexture: texture_2d<f32>;
683
+ @group(0) @binding(1)
684
+ var sourceSampler: sampler;
685
+
686
+ @vertex
687
+ fn vertexMain(@builtin(vertex_index) vertexIndex: u32) -> VertexOutput {
688
+ var positions = array<vec2<f32>, 3>(
689
+ vec2<f32>(-1.0, -1.0),
690
+ vec2<f32>(3.0, -1.0),
691
+ vec2<f32>(-1.0, 3.0)
692
+ );
693
+ var texcoords = array<vec2<f32>, 3>(
694
+ vec2<f32>(0.0, 0.0),
695
+ vec2<f32>(2.0, 0.0),
696
+ vec2<f32>(0.0, 2.0)
697
+ );
698
+ var output: VertexOutput;
699
+
700
+ output.position = vec4<f32>(positions[vertexIndex], 0.0, 1.0);
701
+ output.texcoord = texcoords[vertexIndex];
702
+
703
+ return output;
704
+ }
705
+
706
+ @fragment
707
+ fn fragmentMain(input: VertexOutput) -> @location(0) vec4<f32> {
708
+ return textureSample(sourceTexture, sourceSampler, input.texcoord);
709
+ }
710
+ `,
711
+ });
712
+ this._mipmapBindGroupLayout = this.device.createBindGroupLayout({
713
+ entries: [{
714
+ binding: 0,
715
+ visibility: GPUShaderStage.FRAGMENT,
716
+ texture: {
717
+ sampleType: 'float',
718
+ },
719
+ }, {
720
+ binding: 1,
721
+ visibility: GPUShaderStage.FRAGMENT,
722
+ sampler: {
723
+ type: 'filtering',
724
+ },
725
+ }],
726
+ });
727
+ this._mipmapPipelineLayout = this.device.createPipelineLayout({
728
+ bindGroupLayouts: [this._mipmapBindGroupLayout],
729
+ });
730
+ this._mipmapPipeline = this.device.createRenderPipeline({
731
+ layout: this._mipmapPipelineLayout,
732
+ vertex: {
733
+ module: this._mipmapShaderModule,
734
+ entryPoint: 'vertexMain',
735
+ },
736
+ fragment: {
737
+ module: this._mipmapShaderModule,
738
+ entryPoint: 'fragmentMain',
739
+ targets: [{
740
+ format: managedTextureFormat,
741
+ writeMask: GPUColorWrite.ALL,
742
+ }],
743
+ },
744
+ primitive: {
745
+ topology: 'triangle-list',
746
+ },
747
+ });
748
+ this._mipmapSampler = this.device.createSampler({
749
+ minFilter: 'linear',
750
+ magFilter: 'linear',
751
+ mipmapFilter: 'nearest',
752
+ });
753
+ }
754
+ return {
755
+ bindGroupLayout: this._mipmapBindGroupLayout,
756
+ pipeline: this._mipmapPipeline,
757
+ sampler: this._mipmapSampler,
758
+ };
759
+ }
760
+ }
761
+
762
+ export { WebGpuRenderManager };
763
+ //# sourceMappingURL=WebGpuRenderManager.js.map