@codexo/exojs 0.13.0 → 0.15.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.
- package/CHANGELOG.md +265 -6
- package/README.md +82 -67
- package/dist/esm/animation/Tween.d.ts.map +1 -1
- package/dist/esm/animation/Tween.js +1 -2
- package/dist/esm/animation/Tween.js.map +1 -1
- package/dist/esm/animation/TweenManager.d.ts +50 -7
- package/dist/esm/animation/TweenManager.d.ts.map +1 -1
- package/dist/esm/animation/TweenManager.js +68 -10
- package/dist/esm/animation/TweenManager.js.map +1 -1
- package/dist/esm/animation/TweenSequencer.d.ts +139 -0
- package/dist/esm/animation/TweenSequencer.d.ts.map +1 -0
- package/dist/esm/animation/TweenSequencer.js +305 -0
- package/dist/esm/animation/TweenSequencer.js.map +1 -0
- package/dist/esm/animation/index.d.ts +7 -4
- package/dist/esm/animation/index.d.ts.map +1 -1
- package/dist/esm/audio/AudioBus.d.ts +12 -12
- package/dist/esm/audio/AudioBus.js +29 -29
- package/dist/esm/audio/AudioEffect.d.ts +18 -0
- package/dist/esm/audio/AudioEffect.d.ts.map +1 -0
- package/dist/esm/audio/AudioEffect.js +16 -0
- package/dist/esm/audio/AudioEffect.js.map +1 -0
- package/dist/esm/audio/AudioGenerator.d.ts +91 -0
- package/dist/esm/audio/AudioGenerator.d.ts.map +1 -0
- package/dist/esm/audio/AudioGenerator.js +165 -0
- package/dist/esm/audio/AudioGenerator.js.map +1 -0
- package/dist/esm/audio/AudioGeneratorVoice.d.ts +52 -0
- package/dist/esm/audio/AudioGeneratorVoice.d.ts.map +1 -0
- package/dist/esm/audio/AudioGeneratorVoice.js +141 -0
- package/dist/esm/audio/AudioGeneratorVoice.js.map +1 -0
- package/dist/esm/audio/AudioInput.d.ts +39 -0
- package/dist/esm/audio/AudioInput.d.ts.map +1 -0
- package/dist/esm/audio/AudioInput.js +53 -0
- package/dist/esm/audio/AudioInput.js.map +1 -0
- package/dist/esm/audio/AudioManager.d.ts +72 -34
- package/dist/esm/audio/AudioManager.d.ts.map +1 -1
- package/dist/esm/audio/AudioManager.js +97 -51
- package/dist/esm/audio/AudioManager.js.map +1 -1
- package/dist/esm/audio/AudioStream.d.ts +49 -0
- package/dist/esm/audio/AudioStream.d.ts.map +1 -0
- package/dist/esm/audio/AudioStream.js +109 -0
- package/dist/esm/audio/AudioStream.js.map +1 -0
- package/dist/esm/audio/AudioStreamVoice.d.ts +61 -0
- package/dist/esm/audio/AudioStreamVoice.d.ts.map +1 -0
- package/dist/esm/audio/AudioStreamVoice.js +137 -0
- package/dist/esm/audio/AudioStreamVoice.js.map +1 -0
- package/dist/esm/audio/BaseVoice.d.ts +111 -0
- package/dist/esm/audio/BaseVoice.d.ts.map +1 -0
- package/dist/esm/audio/BaseVoice.js +298 -0
- package/dist/esm/audio/BaseVoice.js.map +1 -0
- package/dist/esm/audio/BiquadEffect.d.ts +53 -0
- package/dist/esm/audio/BiquadEffect.d.ts.map +1 -0
- package/dist/esm/audio/BiquadEffect.js +110 -0
- package/dist/esm/audio/BiquadEffect.js.map +1 -0
- package/dist/esm/audio/InputVoice.d.ts +41 -0
- package/dist/esm/audio/InputVoice.d.ts.map +1 -0
- package/dist/esm/audio/InputVoice.js +85 -0
- package/dist/esm/audio/InputVoice.js.map +1 -0
- package/dist/esm/audio/NoopVoice.d.ts +29 -0
- package/dist/esm/audio/NoopVoice.d.ts.map +1 -0
- package/dist/esm/audio/NoopVoice.js +52 -0
- package/dist/esm/audio/NoopVoice.js.map +1 -0
- package/dist/esm/audio/Playable.d.ts +135 -0
- package/dist/esm/audio/Playable.d.ts.map +1 -0
- package/dist/esm/audio/Sound.d.ts +64 -69
- package/dist/esm/audio/Sound.d.ts.map +1 -1
- package/dist/esm/audio/Sound.js +176 -377
- package/dist/esm/audio/Sound.js.map +1 -1
- package/dist/esm/audio/SoundVoice.d.ts +63 -0
- package/dist/esm/audio/SoundVoice.d.ts.map +1 -0
- package/dist/esm/audio/SoundVoice.js +168 -0
- package/dist/esm/audio/SoundVoice.js.map +1 -0
- package/dist/esm/audio/WorkletEffect.d.ts +68 -0
- package/dist/esm/audio/WorkletEffect.d.ts.map +1 -0
- package/dist/esm/audio/WorkletEffect.js +177 -0
- package/dist/esm/audio/WorkletEffect.js.map +1 -0
- package/dist/esm/audio/audio-context.js +1 -1
- package/dist/esm/audio/audio-context.js.map +1 -1
- package/dist/esm/audio/crossFade.d.ts +22 -13
- package/dist/esm/audio/crossFade.d.ts.map +1 -1
- package/dist/esm/audio/crossFade.js +21 -13
- package/dist/esm/audio/crossFade.js.map +1 -1
- package/dist/esm/audio/filters/HighpassFilter.d.ts +2 -2
- package/dist/esm/audio/filters/HighpassFilter.js +2 -2
- package/dist/esm/audio/filters/LowpassFilter.d.ts +2 -2
- package/dist/esm/audio/filters/LowpassFilter.js +2 -2
- package/dist/esm/audio/filters/index.d.ts +0 -10
- package/dist/esm/audio/filters/index.d.ts.map +1 -1
- package/dist/esm/audio/index.d.ts +13 -15
- package/dist/esm/audio/index.d.ts.map +1 -1
- package/dist/esm/core/Application.d.ts +169 -14
- package/dist/esm/core/Application.d.ts.map +1 -1
- package/dist/esm/core/Application.js +306 -31
- package/dist/esm/core/Application.js.map +1 -1
- package/dist/esm/core/BuildInfo.js +2 -2
- package/dist/esm/core/Codec.d.ts +41 -0
- package/dist/esm/core/Codec.d.ts.map +1 -0
- package/dist/esm/core/Codec.js +79 -0
- package/dist/esm/core/Codec.js.map +1 -0
- package/dist/esm/core/Color.d.ts +6 -4
- package/dist/esm/core/Color.d.ts.map +1 -1
- package/dist/esm/core/Color.js +19 -15
- package/dist/esm/core/Color.js.map +1 -1
- package/dist/esm/core/DisposalScope.d.ts +50 -0
- package/dist/esm/core/DisposalScope.d.ts.map +1 -0
- package/dist/esm/core/DisposalScope.js +86 -0
- package/dist/esm/core/DisposalScope.js.map +1 -0
- package/dist/esm/core/FixedTimestep.d.ts +28 -0
- package/dist/esm/core/FixedTimestep.d.ts.map +1 -0
- package/dist/esm/core/FixedTimestep.js +62 -0
- package/dist/esm/core/FixedTimestep.js.map +1 -0
- package/dist/esm/core/Perf.d.ts +10 -22
- package/dist/esm/core/Perf.d.ts.map +1 -1
- package/dist/esm/core/Perf.js +15 -8
- package/dist/esm/core/Perf.js.map +1 -1
- package/dist/esm/core/Registry.d.ts +64 -0
- package/dist/esm/core/Registry.d.ts.map +1 -0
- package/dist/esm/core/Registry.js +79 -0
- package/dist/esm/core/Registry.js.map +1 -0
- package/dist/esm/core/Scene.d.ts +83 -21
- package/dist/esm/core/Scene.d.ts.map +1 -1
- package/dist/esm/core/Scene.js +127 -16
- package/dist/esm/core/Scene.js.map +1 -1
- package/dist/esm/core/SceneManager.d.ts +28 -59
- package/dist/esm/core/SceneManager.d.ts.map +1 -1
- package/dist/esm/core/SceneManager.js +86 -155
- package/dist/esm/core/SceneManager.js.map +1 -1
- package/dist/esm/core/SceneNode.d.ts +78 -7
- package/dist/esm/core/SceneNode.d.ts.map +1 -1
- package/dist/esm/core/SceneNode.js +162 -21
- package/dist/esm/core/SceneNode.js.map +1 -1
- package/dist/esm/core/Signal.js.map +1 -1
- package/dist/esm/core/Stage.d.ts +49 -0
- package/dist/esm/core/Stage.d.ts.map +1 -0
- package/dist/esm/core/System.d.ts +22 -0
- package/dist/esm/core/System.d.ts.map +1 -0
- package/dist/esm/core/SystemRegistry.d.ts +40 -0
- package/dist/esm/core/SystemRegistry.d.ts.map +1 -0
- package/dist/esm/core/SystemRegistry.js +114 -0
- package/dist/esm/core/SystemRegistry.js.map +1 -0
- package/dist/esm/core/Time.d.ts +15 -0
- package/dist/esm/core/Time.d.ts.map +1 -1
- package/dist/esm/core/Time.js +25 -0
- package/dist/esm/core/Time.js.map +1 -1
- package/dist/esm/core/dev.d.ts +9 -4
- package/dist/esm/core/dev.d.ts.map +1 -1
- package/dist/esm/core/dev.js +5 -0
- package/dist/esm/core/dev.js.map +1 -1
- package/dist/esm/core/index.d.ts +30 -15
- package/dist/esm/core/index.d.ts.map +1 -1
- package/dist/esm/core/letterbox.d.ts +25 -0
- package/dist/esm/core/letterbox.d.ts.map +1 -0
- package/dist/esm/core/letterbox.js +26 -0
- package/dist/esm/core/letterbox.js.map +1 -0
- package/dist/esm/core/logging.d.ts +34 -0
- package/dist/esm/core/logging.d.ts.map +1 -0
- package/dist/esm/core/logging.js +59 -0
- package/dist/esm/core/logging.js.map +1 -0
- package/dist/esm/core/serialization/NodeSerializer.d.ts +71 -0
- package/dist/esm/core/serialization/NodeSerializer.d.ts.map +1 -0
- package/dist/esm/core/serialization/Prefab.d.ts +49 -0
- package/dist/esm/core/serialization/Prefab.d.ts.map +1 -0
- package/dist/esm/core/serialization/Prefab.js +61 -0
- package/dist/esm/core/serialization/Prefab.js.map +1 -0
- package/dist/esm/core/serialization/SerializationRegistry.d.ts +95 -0
- package/dist/esm/core/serialization/SerializationRegistry.d.ts.map +1 -0
- package/dist/esm/core/serialization/SerializationRegistry.js +108 -0
- package/dist/esm/core/serialization/SerializationRegistry.js.map +1 -0
- package/dist/esm/core/serialization/commonFields.d.ts +20 -0
- package/dist/esm/core/serialization/commonFields.d.ts.map +1 -0
- package/dist/esm/core/serialization/commonFields.js +155 -0
- package/dist/esm/core/serialization/commonFields.js.map +1 -0
- package/dist/esm/core/serialization/coreSerializers.d.ts +9 -0
- package/dist/esm/core/serialization/coreSerializers.d.ts.map +1 -0
- package/dist/esm/core/serialization/coreSerializers.js +101 -0
- package/dist/esm/core/serialization/coreSerializers.js.map +1 -0
- package/dist/esm/core/serialization/index.d.ts +6 -0
- package/dist/esm/core/serialization/index.d.ts.map +1 -0
- package/dist/esm/core/serialization/read.d.ts +65 -0
- package/dist/esm/core/serialization/read.d.ts.map +1 -0
- package/dist/esm/core/serialization/read.js +48 -0
- package/dist/esm/core/serialization/read.js.map +1 -0
- package/dist/esm/core/serialization/renderingSerializers.d.ts +7 -0
- package/dist/esm/core/serialization/renderingSerializers.d.ts.map +1 -0
- package/dist/esm/core/serialization/renderingSerializers.js +320 -0
- package/dist/esm/core/serialization/renderingSerializers.js.map +1 -0
- package/dist/esm/core/serialization/serialize.d.ts +56 -0
- package/dist/esm/core/serialization/serialize.d.ts.map +1 -0
- package/dist/esm/core/serialization/serialize.js +144 -0
- package/dist/esm/core/serialization/serialize.js.map +1 -0
- package/dist/esm/core/serialization/serializerHelpers.d.ts +46 -0
- package/dist/esm/core/serialization/serializerHelpers.d.ts.map +1 -0
- package/dist/esm/core/serialization/serializerHelpers.js +161 -0
- package/dist/esm/core/serialization/serializerHelpers.js.map +1 -0
- package/dist/esm/core/serialization/types.d.ts +49 -0
- package/dist/esm/core/serialization/types.d.ts.map +1 -0
- package/dist/esm/core/serialization/types.js +9 -0
- package/dist/esm/core/serialization/types.js.map +1 -0
- package/dist/esm/core/serialization/uiSerializers.d.ts +7 -0
- package/dist/esm/core/serialization/uiSerializers.d.ts.map +1 -0
- package/dist/esm/core/serialization/uiSerializers.js +206 -0
- package/dist/esm/core/serialization/uiSerializers.js.map +1 -0
- package/dist/esm/core/types.d.ts +1 -1
- package/dist/esm/core/types.d.ts.map +1 -1
- package/dist/esm/core/utils.d.ts +1 -16
- package/dist/esm/core/utils.d.ts.map +1 -1
- package/dist/esm/core/utils.js +2 -100
- package/dist/esm/core/utils.js.map +1 -1
- package/dist/esm/debug/PerformanceLayer.js +8 -9
- package/dist/esm/debug/PerformanceLayer.js.map +1 -1
- package/dist/esm/debug/PointerStackLayer.d.ts.map +1 -1
- package/dist/esm/debug/PointerStackLayer.js +9 -6
- package/dist/esm/debug/PointerStackLayer.js.map +1 -1
- package/dist/esm/debug/RenderPassInspectorLayer.d.ts.map +1 -1
- package/dist/esm/debug/RenderPassInspectorLayer.js +19 -12
- package/dist/esm/debug/RenderPassInspectorLayer.js.map +1 -1
- package/dist/esm/extensions/Extension.d.ts +39 -4
- package/dist/esm/extensions/Extension.d.ts.map +1 -1
- package/dist/esm/extensions/materialize.d.ts +9 -1
- package/dist/esm/extensions/materialize.d.ts.map +1 -1
- package/dist/esm/extensions/materialize.js +17 -2
- package/dist/esm/extensions/materialize.js.map +1 -1
- package/dist/esm/extensions/snapshot.d.ts +2 -1
- package/dist/esm/extensions/snapshot.d.ts.map +1 -1
- package/dist/esm/extensions/snapshot.js +8 -0
- package/dist/esm/extensions/snapshot.js.map +1 -1
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +41 -61
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/input/FocusManager.d.ts +59 -0
- package/dist/esm/input/FocusManager.d.ts.map +1 -0
- package/dist/esm/input/FocusManager.js +175 -0
- package/dist/esm/input/FocusManager.js.map +1 -0
- package/dist/esm/input/Gamepad.d.ts +10 -0
- package/dist/esm/input/Gamepad.d.ts.map +1 -1
- package/dist/esm/input/Gamepad.js +20 -4
- package/dist/esm/input/Gamepad.js.map +1 -1
- package/dist/esm/input/GamepadAxis.js +2 -2
- package/dist/esm/input/GamepadDefinitions.d.ts.map +1 -1
- package/dist/esm/input/GamepadDefinitions.js +6 -2
- package/dist/esm/input/GamepadDefinitions.js.map +1 -1
- package/dist/esm/input/GestureRecognizer.d.ts +1 -2
- package/dist/esm/input/GestureRecognizer.d.ts.map +1 -1
- package/dist/esm/input/GestureRecognizer.js +1 -3
- package/dist/esm/input/GestureRecognizer.js.map +1 -1
- package/dist/esm/input/InputBinding.js +3 -3
- package/dist/esm/input/InputBinding.js.map +1 -1
- package/dist/esm/input/InputManager.d.ts +7 -2
- package/dist/esm/input/InputManager.d.ts.map +1 -1
- package/dist/esm/input/InputManager.js +40 -21
- package/dist/esm/input/InputManager.js.map +1 -1
- package/dist/esm/input/InteractionManager.d.ts +67 -2
- package/dist/esm/input/InteractionManager.d.ts.map +1 -1
- package/dist/esm/input/InteractionManager.js +165 -41
- package/dist/esm/input/InteractionManager.js.map +1 -1
- package/dist/esm/input/KeyEvent.d.ts +25 -0
- package/dist/esm/input/KeyEvent.d.ts.map +1 -0
- package/dist/esm/input/KeyEvent.js +32 -0
- package/dist/esm/input/KeyEvent.js.map +1 -0
- package/dist/esm/input/Pointer.d.ts +21 -4
- package/dist/esm/input/Pointer.d.ts.map +1 -1
- package/dist/esm/input/Pointer.js +54 -15
- package/dist/esm/input/Pointer.js.map +1 -1
- package/dist/esm/input/index.d.ts +3 -1
- package/dist/esm/input/index.d.ts.map +1 -1
- package/dist/esm/math/AbstractVector.d.ts.map +1 -1
- package/dist/esm/math/AbstractVector.js +7 -2
- package/dist/esm/math/AbstractVector.js.map +1 -1
- package/dist/esm/math/Circle.d.ts.map +1 -1
- package/dist/esm/math/Circle.js +5 -1
- package/dist/esm/math/Circle.js.map +1 -1
- package/dist/esm/math/Line.d.ts +1 -1
- package/dist/esm/math/Line.d.ts.map +1 -1
- package/dist/esm/math/Line.js +1 -1
- package/dist/esm/math/Line.js.map +1 -1
- package/dist/esm/math/Matrix.d.ts.map +1 -1
- package/dist/esm/math/Matrix.js +6 -1
- package/dist/esm/math/Matrix.js.map +1 -1
- package/dist/esm/math/ObservableVector.d.ts +26 -8
- package/dist/esm/math/ObservableVector.d.ts.map +1 -1
- package/dist/esm/math/ObservableVector.js +24 -16
- package/dist/esm/math/ObservableVector.js.map +1 -1
- package/dist/esm/math/Polygon.d.ts +5 -0
- package/dist/esm/math/Polygon.d.ts.map +1 -1
- package/dist/esm/math/Polygon.js +27 -3
- package/dist/esm/math/Polygon.js.map +1 -1
- package/dist/esm/math/Random.d.ts +9 -9
- package/dist/esm/math/Random.d.ts.map +1 -1
- package/dist/esm/math/Random.js +46 -46
- package/dist/esm/math/Random.js.map +1 -1
- package/dist/esm/math/Rectangle.d.ts +11 -4
- package/dist/esm/math/Rectangle.d.ts.map +1 -1
- package/dist/esm/math/Rectangle.js +12 -6
- package/dist/esm/math/Rectangle.js.map +1 -1
- package/dist/esm/math/Vector.d.ts +1 -1
- package/dist/esm/math/Vector.d.ts.map +1 -1
- package/dist/esm/math/Vector.js +1 -1
- package/dist/esm/math/Vector.js.map +1 -1
- package/dist/esm/math/collision-detection.d.ts +42 -0
- package/dist/esm/math/collision-detection.d.ts.map +1 -1
- package/dist/esm/math/collision-detection.js +54 -4
- package/dist/esm/math/collision-detection.js.map +1 -1
- package/dist/esm/math/collision-primitives.d.ts.map +1 -1
- package/dist/esm/math/collision-primitives.js +4 -0
- package/dist/esm/math/collision-primitives.js.map +1 -1
- package/dist/esm/math/geometry.d.ts +26 -0
- package/dist/esm/math/geometry.d.ts.map +1 -1
- package/dist/esm/math/geometry.js +89 -2
- package/dist/esm/math/geometry.js.map +1 -1
- package/dist/esm/math/index.d.ts +7 -5
- package/dist/esm/math/index.d.ts.map +1 -1
- package/dist/esm/math/swept-collision.d.ts +13 -0
- package/dist/esm/math/swept-collision.d.ts.map +1 -1
- package/dist/esm/math/swept-collision.js +15 -1
- package/dist/esm/math/swept-collision.js.map +1 -1
- package/dist/esm/math/triangulate.d.ts.map +1 -1
- package/dist/esm/math/triangulate.js +9 -1
- package/dist/esm/math/triangulate.js.map +1 -1
- package/dist/esm/math/utils.d.ts +20 -0
- package/dist/esm/math/utils.d.ts.map +1 -1
- package/dist/esm/math/utils.js +18 -15
- package/dist/esm/math/utils.js.map +1 -1
- package/dist/esm/renderer-sdk.d.ts +2 -0
- package/dist/esm/renderer-sdk.d.ts.map +1 -1
- package/dist/esm/{rendering.js → renderer-sdk.js} +1 -1
- package/dist/esm/renderer-sdk.js.map +1 -0
- package/dist/esm/rendering/BackendTargetPass.d.ts +1 -1
- package/dist/esm/rendering/BackendTargetPass.d.ts.map +1 -1
- package/dist/esm/rendering/CallbackRenderPass.d.ts +14 -10
- package/dist/esm/rendering/CallbackRenderPass.d.ts.map +1 -1
- package/dist/esm/rendering/CallbackRenderPass.js +17 -12
- package/dist/esm/rendering/CallbackRenderPass.js.map +1 -1
- package/dist/esm/rendering/Container.d.ts +3 -0
- package/dist/esm/rendering/Container.d.ts.map +1 -1
- package/dist/esm/rendering/Container.js +28 -5
- package/dist/esm/rendering/Container.js.map +1 -1
- package/dist/esm/rendering/DrawContext.d.ts +48 -0
- package/dist/esm/rendering/DrawContext.d.ts.map +1 -0
- package/dist/esm/rendering/Drawable.d.ts +24 -0
- package/dist/esm/rendering/Drawable.d.ts.map +1 -1
- package/dist/esm/rendering/Drawable.js +54 -0
- package/dist/esm/rendering/Drawable.js.map +1 -1
- package/dist/esm/rendering/GpuResourceAccountant.d.ts +65 -0
- package/dist/esm/rendering/GpuResourceAccountant.d.ts.map +1 -0
- package/dist/esm/rendering/GpuResourceAccountant.js +130 -0
- package/dist/esm/rendering/GpuResourceAccountant.js.map +1 -0
- package/dist/esm/rendering/PassContext.d.ts +42 -0
- package/dist/esm/rendering/PassContext.d.ts.map +1 -0
- package/dist/esm/rendering/PassContext.js +48 -0
- package/dist/esm/rendering/PassContext.js.map +1 -0
- package/dist/esm/rendering/RenderBackend.d.ts +29 -1
- package/dist/esm/rendering/RenderBackend.d.ts.map +1 -1
- package/dist/esm/rendering/RenderBatch.d.ts +55 -0
- package/dist/esm/rendering/RenderBatch.d.ts.map +1 -0
- package/dist/esm/rendering/RenderBatch.js +107 -0
- package/dist/esm/rendering/RenderBatch.js.map +1 -0
- package/dist/esm/rendering/RenderNode.d.ts +50 -10
- package/dist/esm/rendering/RenderNode.d.ts.map +1 -1
- package/dist/esm/rendering/RenderNode.js +115 -22
- package/dist/esm/rendering/RenderNode.js.map +1 -1
- package/dist/esm/rendering/RenderNodePass.d.ts +1 -1
- package/dist/esm/rendering/RenderNodePass.d.ts.map +1 -1
- package/dist/esm/rendering/RenderNodePass.js +2 -2
- package/dist/esm/rendering/RenderNodePass.js.map +1 -1
- package/dist/esm/rendering/RenderStats.d.ts +39 -0
- package/dist/esm/rendering/RenderStats.d.ts.map +1 -1
- package/dist/esm/rendering/RenderStats.js +14 -0
- package/dist/esm/rendering/RenderStats.js.map +1 -1
- package/dist/esm/rendering/RendererRegistry.d.ts.map +1 -1
- package/dist/esm/rendering/RendererRegistry.js +20 -23
- package/dist/esm/rendering/RendererRegistry.js.map +1 -1
- package/dist/esm/rendering/RenderingContext.d.ts +132 -17
- package/dist/esm/rendering/RenderingContext.d.ts.map +1 -1
- package/dist/esm/rendering/RenderingContext.js +228 -28
- package/dist/esm/rendering/RenderingContext.js.map +1 -1
- package/dist/esm/rendering/TransformBuffer.d.ts +23 -0
- package/dist/esm/rendering/TransformBuffer.d.ts.map +1 -1
- package/dist/esm/rendering/TransformBuffer.js +60 -0
- package/dist/esm/rendering/TransformBuffer.js.map +1 -1
- package/dist/esm/rendering/View.d.ts +85 -15
- package/dist/esm/rendering/View.d.ts.map +1 -1
- package/dist/esm/rendering/View.js +81 -27
- package/dist/esm/rendering/View.js.map +1 -1
- package/dist/esm/rendering/filters/WebGpuShaderFilter.d.ts.map +1 -1
- package/dist/esm/rendering/filters/WebGpuShaderFilter.js +10 -1
- package/dist/esm/rendering/filters/WebGpuShaderFilter.js.map +1 -1
- package/dist/esm/rendering/geometry/Geometry.d.ts.map +1 -1
- package/dist/esm/rendering/geometry/Geometry.js +4 -2
- package/dist/esm/rendering/geometry/Geometry.js.map +1 -1
- package/dist/esm/rendering/gradient/Gradient.d.ts.map +1 -1
- package/dist/esm/rendering/gradient/Gradient.js +7 -2
- package/dist/esm/rendering/gradient/Gradient.js.map +1 -1
- package/dist/esm/rendering/material/MaterialKey.d.ts.map +1 -1
- package/dist/esm/rendering/material/MaterialKey.js +2 -0
- package/dist/esm/rendering/material/MaterialKey.js.map +1 -1
- package/dist/esm/rendering/material/MeshMaterial.d.ts +20 -1
- package/dist/esm/rendering/material/MeshMaterial.d.ts.map +1 -1
- package/dist/esm/rendering/material/MeshMaterial.js +17 -0
- package/dist/esm/rendering/material/MeshMaterial.js.map +1 -1
- package/dist/esm/rendering/material/ShaderSource.js +6 -0
- package/dist/esm/rendering/material/ShaderSource.js.map +1 -1
- package/dist/esm/rendering/material/SpriteMaterial.d.ts +20 -1
- package/dist/esm/rendering/material/SpriteMaterial.d.ts.map +1 -1
- package/dist/esm/rendering/material/SpriteMaterial.js +17 -0
- package/dist/esm/rendering/material/SpriteMaterial.js.map +1 -1
- package/dist/esm/rendering/mesh/ImmediateMesh.d.ts +48 -0
- package/dist/esm/rendering/mesh/ImmediateMesh.d.ts.map +1 -0
- package/dist/esm/rendering/mesh/ImmediateMesh.js +85 -0
- package/dist/esm/rendering/mesh/ImmediateMesh.js.map +1 -0
- package/dist/esm/rendering/mesh/Mesh.d.ts +29 -6
- package/dist/esm/rendering/mesh/Mesh.d.ts.map +1 -1
- package/dist/esm/rendering/mesh/Mesh.js +40 -13
- package/dist/esm/rendering/mesh/Mesh.js.map +1 -1
- package/dist/esm/rendering/pixelSnap.d.ts.map +1 -1
- package/dist/esm/rendering/pixelSnap.js +1 -0
- package/dist/esm/rendering/pixelSnap.js.map +1 -1
- package/dist/esm/rendering/plan/RenderCommand.d.ts +31 -9
- package/dist/esm/rendering/plan/RenderCommand.d.ts.map +1 -1
- package/dist/esm/rendering/plan/RenderCommand.js +23 -21
- package/dist/esm/rendering/plan/RenderCommand.js.map +1 -1
- package/dist/esm/rendering/plan/RenderEffectExecutor.d.ts.map +1 -1
- package/dist/esm/rendering/plan/RenderEffectExecutor.js +8 -2
- package/dist/esm/rendering/plan/RenderEffectExecutor.js.map +1 -1
- package/dist/esm/rendering/plan/RenderInstruction.d.ts +12 -39
- package/dist/esm/rendering/plan/RenderInstruction.d.ts.map +1 -1
- package/dist/esm/rendering/plan/RenderPlanBuilder.d.ts +17 -2
- package/dist/esm/rendering/plan/RenderPlanBuilder.d.ts.map +1 -1
- package/dist/esm/rendering/plan/RenderPlanBuilder.js +154 -50
- package/dist/esm/rendering/plan/RenderPlanBuilder.js.map +1 -1
- package/dist/esm/rendering/plan/RenderPlanOptimizer.d.ts.map +1 -1
- package/dist/esm/rendering/plan/RenderPlanOptimizer.js +31 -4
- package/dist/esm/rendering/plan/RenderPlanOptimizer.js.map +1 -1
- package/dist/esm/rendering/plan/RenderPlanPlayer.d.ts.map +1 -1
- package/dist/esm/rendering/plan/RenderPlanPlayer.js +54 -17
- package/dist/esm/rendering/plan/RenderPlanPlayer.js.map +1 -1
- package/dist/esm/rendering/plan/RenderScope.d.ts +23 -10
- package/dist/esm/rendering/plan/RenderScope.d.ts.map +1 -1
- package/dist/esm/rendering/primitives/Graphics.d.ts +16 -1
- package/dist/esm/rendering/primitives/Graphics.d.ts.map +1 -1
- package/dist/esm/rendering/primitives/Graphics.js +46 -9
- package/dist/esm/rendering/primitives/Graphics.js.map +1 -1
- package/dist/esm/rendering/{index.d.ts → public.d.ts} +9 -39
- package/dist/esm/rendering/public.d.ts.map +1 -0
- package/dist/esm/rendering/shader/ShaderAttribute.d.ts.map +1 -1
- package/dist/esm/rendering/shader/ShaderAttribute.js +2 -0
- package/dist/esm/rendering/shader/ShaderAttribute.js.map +1 -1
- package/dist/esm/rendering/sprite/AnimatedSprite.d.ts +60 -12
- package/dist/esm/rendering/sprite/AnimatedSprite.d.ts.map +1 -1
- package/dist/esm/rendering/sprite/AnimatedSprite.js +142 -30
- package/dist/esm/rendering/sprite/AnimatedSprite.js.map +1 -1
- package/dist/esm/rendering/sprite/NineSliceSprite.d.ts.map +1 -1
- package/dist/esm/rendering/sprite/NineSliceSprite.js +10 -11
- package/dist/esm/rendering/sprite/NineSliceSprite.js.map +1 -1
- package/dist/esm/rendering/sprite/RepeatingSprite.d.ts.map +1 -1
- package/dist/esm/rendering/sprite/RepeatingSprite.js +1 -3
- package/dist/esm/rendering/sprite/RepeatingSprite.js.map +1 -1
- package/dist/esm/rendering/sprite/Sprite.d.ts.map +1 -1
- package/dist/esm/rendering/sprite/Sprite.js +30 -3
- package/dist/esm/rendering/sprite/Sprite.js.map +1 -1
- package/dist/esm/rendering/sprite/nineSlice.d.ts.map +1 -1
- package/dist/esm/rendering/sprite/nineSlice.js +12 -18
- package/dist/esm/rendering/sprite/nineSlice.js.map +1 -1
- package/dist/esm/rendering/sprite/repeatingSpritePlan.d.ts.map +1 -1
- package/dist/esm/rendering/sprite/repeatingSpritePlan.js +2 -2
- package/dist/esm/rendering/sprite/repeatingSpritePlan.js.map +1 -1
- package/dist/esm/rendering/text/BitmapText.d.ts +2 -0
- package/dist/esm/rendering/text/BitmapText.d.ts.map +1 -1
- package/dist/esm/rendering/text/BitmapText.js +6 -0
- package/dist/esm/rendering/text/BitmapText.js.map +1 -1
- package/dist/esm/rendering/text/GlyphAtlas.d.ts.map +1 -1
- package/dist/esm/rendering/text/GlyphAtlas.js +2 -1
- package/dist/esm/rendering/text/GlyphAtlas.js.map +1 -1
- package/dist/esm/rendering/text/GlyphAtlasPool.d.ts +8 -1
- package/dist/esm/rendering/text/GlyphAtlasPool.d.ts.map +1 -1
- package/dist/esm/rendering/text/GlyphAtlasPool.js +9 -12
- package/dist/esm/rendering/text/GlyphAtlasPool.js.map +1 -1
- package/dist/esm/rendering/text/GlyphSdf.d.ts.map +1 -1
- package/dist/esm/rendering/text/GlyphSdf.js +5 -1
- package/dist/esm/rendering/text/GlyphSdf.js.map +1 -1
- package/dist/esm/rendering/text/HTMLText.d.ts.map +1 -1
- package/dist/esm/rendering/text/HTMLText.js +3 -2
- package/dist/esm/rendering/text/HTMLText.js.map +1 -1
- package/dist/esm/rendering/text/Text.d.ts +17 -6
- package/dist/esm/rendering/text/Text.d.ts.map +1 -1
- package/dist/esm/rendering/text/Text.js +9 -12
- package/dist/esm/rendering/text/Text.js.map +1 -1
- package/dist/esm/rendering/text/TextLayout.d.ts.map +1 -1
- package/dist/esm/rendering/text/TextLayout.js +4 -18
- package/dist/esm/rendering/text/TextLayout.js.map +1 -1
- package/dist/esm/rendering/texture/DataTexture.js +2 -2
- package/dist/esm/rendering/texture/DataTexture.js.map +1 -1
- package/dist/esm/rendering/texture/Texture.d.ts +6 -0
- package/dist/esm/rendering/texture/Texture.d.ts.map +1 -1
- package/dist/esm/rendering/texture/Texture.js +8 -0
- package/dist/esm/rendering/texture/Texture.js.map +1 -1
- package/dist/esm/rendering/texture/TextureRegion.d.ts.map +1 -1
- package/dist/esm/rendering/texture/TextureRegion.js.map +1 -1
- package/dist/esm/rendering/texture/repeat.d.ts.map +1 -1
- package/dist/esm/rendering/texture/repeat.js +2 -2
- package/dist/esm/rendering/texture/repeat.js.map +1 -1
- package/dist/esm/rendering/types.d.ts +37 -2
- package/dist/esm/rendering/types.d.ts.map +1 -1
- package/dist/esm/rendering/types.js +37 -2
- package/dist/esm/rendering/types.js.map +1 -1
- package/dist/esm/rendering/video/Video.d.ts +7 -3
- package/dist/esm/rendering/video/Video.d.ts.map +1 -1
- package/dist/esm/rendering/video/Video.js +7 -3
- package/dist/esm/rendering/video/Video.js.map +1 -1
- package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.js +2 -2
- package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2BackdropBlendCompositor.d.ts +41 -0
- package/dist/esm/rendering/webgl2/WebGl2BackdropBlendCompositor.d.ts.map +1 -0
- package/dist/esm/rendering/webgl2/WebGl2BackdropBlendCompositor.js +222 -0
- package/dist/esm/rendering/webgl2/WebGl2BackdropBlendCompositor.js.map +1 -0
- package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts +55 -3
- package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2Backend.js +209 -61
- package/dist/esm/rendering/webgl2/WebGl2Backend.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2MaskCompositor.d.ts.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2MaskCompositor.js +2 -2
- package/dist/esm/rendering/webgl2/WebGl2MaskCompositor.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.d.ts +17 -0
- package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.js +122 -38
- package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2NineSliceSpriteRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2NineSliceSpriteRenderer.js +2 -1
- package/dist/esm/rendering/webgl2/WebGl2NineSliceSpriteRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.d.ts +16 -1
- package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.d.ts.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.js +32 -1
- package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2RepeatingSpriteRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2RepeatingSpriteRenderer.js +15 -11
- package/dist/esm/rendering/webgl2/WebGl2RepeatingSpriteRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2ShaderBlock.d.ts.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2ShaderBlock.js +14 -3
- package/dist/esm/rendering/webgl2/WebGl2ShaderBlock.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2ShaderMappings.js +3 -3
- package/dist/esm/rendering/webgl2/WebGl2ShaderMappings.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2ShaderProgram.d.ts.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2ShaderProgram.js +11 -2
- package/dist/esm/rendering/webgl2/WebGl2ShaderProgram.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js +7 -2
- package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2StencilClipper.d.ts.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2StencilClipper.js +3 -2
- package/dist/esm/rendering/webgl2/WebGl2StencilClipper.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2TextRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js +60 -15
- package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/glsl/backdrop-blend.frag.js +4 -0
- package/dist/esm/rendering/webgl2/glsl/backdrop-blend.frag.js.map +1 -0
- package/dist/esm/rendering/webgl2/glsl/backdrop-blend.vert.js +4 -0
- package/dist/esm/rendering/webgl2/glsl/backdrop-blend.vert.js.map +1 -0
- package/dist/esm/rendering/webgl2/glsl/text.vert.js +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBackdropBlendCompositor.d.ts +72 -0
- package/dist/esm/rendering/webgpu/WebGpuBackdropBlendCompositor.d.ts.map +1 -0
- package/dist/esm/rendering/webgpu/WebGpuBackdropBlendCompositor.js +494 -0
- package/dist/esm/rendering/webgpu/WebGpuBackdropBlendCompositor.js.map +1 -0
- package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts +45 -2
- package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBackend.js +247 -69
- package/dist/esm/rendering/webgpu/WebGpuBackend.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBlendState.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBlendState.js +5 -26
- package/dist/esm/rendering/webgpu/WebGpuBlendState.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.d.ts +2 -0
- package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.js +2 -1
- package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.d.ts +17 -0
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js +105 -25
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.d.ts +2 -0
- package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.js +8 -2
- package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.d.ts +8 -0
- package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.js +20 -0
- package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.d.ts +6 -0
- package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.js +23 -10
- package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.d.ts +2 -0
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js +10 -5
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuStencilClipper.d.ts +2 -0
- package/dist/esm/rendering/webgpu/WebGpuStencilClipper.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuStencilClipper.js +3 -1
- package/dist/esm/rendering/webgpu/WebGpuStencilClipper.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuTextRenderer.d.ts +2 -0
- package/dist/esm/rendering/webgpu/WebGpuTextRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js +22 -9
- package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.d.ts +16 -3
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js +50 -6
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js.map +1 -1
- package/dist/esm/rendering/webgpu/compute/WebGpuComputePipeline.js +1 -1
- package/dist/esm/rendering/webgpu/compute/WebGpuComputePipeline.js.map +1 -1
- package/dist/esm/rendering/webgpu/compute/WebGpuStorageBuffer.d.ts +7 -0
- package/dist/esm/rendering/webgpu/compute/WebGpuStorageBuffer.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/compute/WebGpuStorageBuffer.js +8 -0
- package/dist/esm/rendering/webgpu/compute/WebGpuStorageBuffer.js.map +1 -1
- package/dist/esm/resources/Asset.d.ts +1 -1
- package/dist/esm/resources/Asset.d.ts.map +1 -1
- package/dist/esm/resources/Asset.js +0 -2
- package/dist/esm/resources/Asset.js.map +1 -1
- package/dist/esm/resources/AssetContainer.d.ts +75 -0
- package/dist/esm/resources/AssetContainer.d.ts.map +1 -0
- package/dist/esm/resources/AssetContainer.js +100 -0
- package/dist/esm/resources/AssetContainer.js.map +1 -0
- package/dist/esm/resources/AssetDefinitions.d.ts +3 -3
- package/dist/esm/resources/AssetDefinitions.d.ts.map +1 -1
- package/dist/esm/resources/Assets.d.ts.map +1 -1
- package/dist/esm/resources/Assets.js +0 -1
- package/dist/esm/resources/Assets.js.map +1 -1
- package/dist/esm/resources/FactoryRegistry.d.ts.map +1 -1
- package/dist/esm/resources/FactoryRegistry.js +14 -23
- package/dist/esm/resources/FactoryRegistry.js.map +1 -1
- package/dist/esm/resources/IndexedDbDatabase.d.ts.map +1 -1
- package/dist/esm/resources/IndexedDbDatabase.js +8 -1
- package/dist/esm/resources/IndexedDbDatabase.js.map +1 -1
- package/dist/esm/resources/IndexedDbKeyValueStore.d.ts +37 -0
- package/dist/esm/resources/IndexedDbKeyValueStore.d.ts.map +1 -0
- package/dist/esm/resources/IndexedDbKeyValueStore.js +58 -0
- package/dist/esm/resources/IndexedDbKeyValueStore.js.map +1 -0
- package/dist/esm/resources/KeyValueStore.d.ts +31 -0
- package/dist/esm/resources/KeyValueStore.d.ts.map +1 -0
- package/dist/esm/resources/Loader.d.ts +55 -2
- package/dist/esm/resources/Loader.d.ts.map +1 -1
- package/dist/esm/resources/Loader.js +159 -14
- package/dist/esm/resources/Loader.js.map +1 -1
- package/dist/esm/resources/MemoryStore.d.ts +17 -0
- package/dist/esm/resources/MemoryStore.d.ts.map +1 -0
- package/dist/esm/resources/MemoryStore.js +30 -0
- package/dist/esm/resources/MemoryStore.js.map +1 -0
- package/dist/esm/resources/WebStorageStore.d.ts +40 -0
- package/dist/esm/resources/WebStorageStore.d.ts.map +1 -0
- package/dist/esm/resources/WebStorageStore.js +84 -0
- package/dist/esm/resources/WebStorageStore.js.map +1 -0
- package/dist/esm/resources/coreAssetBindings.d.ts.map +1 -1
- package/dist/esm/resources/coreAssetBindings.js +16 -5
- package/dist/esm/resources/coreAssetBindings.js.map +1 -1
- package/dist/esm/resources/factories/BmFontFactory.js +4 -4
- package/dist/esm/resources/factories/BmFontFactory.js.map +1 -1
- package/dist/esm/resources/factories/MusicFactory.d.ts +9 -9
- package/dist/esm/resources/factories/MusicFactory.d.ts.map +1 -1
- package/dist/esm/resources/factories/MusicFactory.js +7 -7
- package/dist/esm/resources/factories/MusicFactory.js.map +1 -1
- package/dist/esm/resources/factories/SoundFactory.js +2 -2
- package/dist/esm/resources/factories/SoundFactory.js.map +1 -1
- package/dist/esm/resources/factories/SubtitleFactory.d.ts +11 -1
- package/dist/esm/resources/factories/SubtitleFactory.d.ts.map +1 -1
- package/dist/esm/resources/factories/SubtitleFactory.js +13 -9
- package/dist/esm/resources/factories/SubtitleFactory.js.map +1 -1
- package/dist/esm/resources/index.d.ts +51 -34
- package/dist/esm/resources/index.d.ts.map +1 -1
- package/dist/esm/resources/utils.js +4 -4
- package/dist/esm/resources/utils.js.map +1 -1
- package/dist/esm/ui/Button.d.ts +54 -0
- package/dist/esm/ui/Button.d.ts.map +1 -0
- package/dist/esm/ui/Button.js +139 -0
- package/dist/esm/ui/Button.js.map +1 -0
- package/dist/esm/ui/Label.d.ts +17 -0
- package/dist/esm/ui/Label.d.ts.map +1 -0
- package/dist/esm/ui/Label.js +37 -0
- package/dist/esm/ui/Label.js.map +1 -0
- package/dist/esm/ui/Panel.d.ts +38 -0
- package/dist/esm/ui/Panel.d.ts.map +1 -0
- package/dist/esm/ui/Panel.js +61 -0
- package/dist/esm/ui/Panel.js.map +1 -0
- package/dist/esm/ui/ProgressBar.d.ts +37 -0
- package/dist/esm/ui/ProgressBar.d.ts.map +1 -0
- package/dist/esm/ui/ProgressBar.js +76 -0
- package/dist/esm/ui/ProgressBar.js.map +1 -0
- package/dist/esm/ui/ScrollContainer.d.ts +63 -0
- package/dist/esm/ui/ScrollContainer.d.ts.map +1 -0
- package/dist/esm/ui/ScrollContainer.js +99 -0
- package/dist/esm/ui/ScrollContainer.js.map +1 -0
- package/dist/esm/ui/Stack.d.ts +34 -0
- package/dist/esm/ui/Stack.d.ts.map +1 -0
- package/dist/esm/ui/Stack.js +69 -0
- package/dist/esm/ui/Stack.js.map +1 -0
- package/dist/esm/ui/Tooltip.d.ts +67 -0
- package/dist/esm/ui/Tooltip.d.ts.map +1 -0
- package/dist/esm/ui/Tooltip.js +133 -0
- package/dist/esm/ui/Tooltip.js.map +1 -0
- package/dist/esm/ui/UIRoot.d.ts +31 -0
- package/dist/esm/ui/UIRoot.d.ts.map +1 -0
- package/dist/esm/ui/UIRoot.js +49 -0
- package/dist/esm/ui/UIRoot.js.map +1 -0
- package/dist/esm/ui/Widget.d.ts +45 -0
- package/dist/esm/ui/Widget.d.ts.map +1 -0
- package/dist/esm/ui/Widget.js +113 -0
- package/dist/esm/ui/Widget.js.map +1 -0
- package/dist/esm/ui/index.d.ts +17 -0
- package/dist/esm/ui/index.d.ts.map +1 -0
- package/dist/exo.debug.esm.js +1 -948
- package/dist/exo.debug.esm.js.map +1 -1
- package/dist/exo.esm.js +1 -40945
- package/dist/exo.esm.js.map +1 -1
- package/dist/exo.iife.js +45202 -0
- package/dist/exo.iife.js.map +1 -0
- package/dist/exo.iife.min.js +2 -0
- package/dist/exo.iife.min.js.map +1 -0
- package/package.json +37 -14
- package/dist/esm/audio/AbstractMedia.d.ts +0 -75
- package/dist/esm/audio/AbstractMedia.d.ts.map +0 -1
- package/dist/esm/audio/AbstractMedia.js +0 -179
- package/dist/esm/audio/AbstractMedia.js.map +0 -1
- package/dist/esm/audio/AudioAnalyser.d.ts +0 -128
- package/dist/esm/audio/AudioAnalyser.d.ts.map +0 -1
- package/dist/esm/audio/AudioAnalyser.js +0 -473
- package/dist/esm/audio/AudioAnalyser.js.map +0 -1
- package/dist/esm/audio/AudioFilter.d.ts +0 -17
- package/dist/esm/audio/AudioFilter.d.ts.map +0 -1
- package/dist/esm/audio/AudioFilter.js +0 -15
- package/dist/esm/audio/AudioFilter.js.map +0 -1
- package/dist/esm/audio/BeatDetector.d.ts +0 -207
- package/dist/esm/audio/BeatDetector.d.ts.map +0 -1
- package/dist/esm/audio/BeatDetector.js +0 -424
- package/dist/esm/audio/BeatDetector.js.map +0 -1
- package/dist/esm/audio/Media.d.ts +0 -37
- package/dist/esm/audio/Media.d.ts.map +0 -1
- package/dist/esm/audio/Music.d.ts +0 -42
- package/dist/esm/audio/Music.d.ts.map +0 -1
- package/dist/esm/audio/Music.js +0 -164
- package/dist/esm/audio/Music.js.map +0 -1
- package/dist/esm/audio/OscillatorSound.d.ts +0 -100
- package/dist/esm/audio/OscillatorSound.d.ts.map +0 -1
- package/dist/esm/audio/OscillatorSound.js +0 -346
- package/dist/esm/audio/OscillatorSound.js.map +0 -1
- package/dist/esm/audio/dsp/fft.d.ts +0 -23
- package/dist/esm/audio/dsp/fft.d.ts.map +0 -1
- package/dist/esm/audio/dsp/mel.d.ts +0 -44
- package/dist/esm/audio/dsp/mel.d.ts.map +0 -1
- package/dist/esm/audio/dsp/mel.js +0 -70
- package/dist/esm/audio/dsp/mel.js.map +0 -1
- package/dist/esm/audio/dsp/tempogram.d.ts +0 -52
- package/dist/esm/audio/dsp/tempogram.d.ts.map +0 -1
- package/dist/esm/audio/filters/ChorusFilter.d.ts +0 -54
- package/dist/esm/audio/filters/ChorusFilter.d.ts.map +0 -1
- package/dist/esm/audio/filters/ChorusFilter.js +0 -155
- package/dist/esm/audio/filters/ChorusFilter.js.map +0 -1
- package/dist/esm/audio/filters/CompressorFilter.d.ts +0 -54
- package/dist/esm/audio/filters/CompressorFilter.d.ts.map +0 -1
- package/dist/esm/audio/filters/CompressorFilter.js +0 -123
- package/dist/esm/audio/filters/CompressorFilter.js.map +0 -1
- package/dist/esm/audio/filters/DelayFilter.d.ts +0 -36
- package/dist/esm/audio/filters/DelayFilter.d.ts.map +0 -1
- package/dist/esm/audio/filters/DelayFilter.js +0 -114
- package/dist/esm/audio/filters/DelayFilter.js.map +0 -1
- package/dist/esm/audio/filters/DuckingFilter.d.ts +0 -45
- package/dist/esm/audio/filters/DuckingFilter.d.ts.map +0 -1
- package/dist/esm/audio/filters/DuckingFilter.js +0 -172
- package/dist/esm/audio/filters/DuckingFilter.js.map +0 -1
- package/dist/esm/audio/filters/EqualizerFilter.d.ts +0 -51
- package/dist/esm/audio/filters/EqualizerFilter.d.ts.map +0 -1
- package/dist/esm/audio/filters/EqualizerFilter.js +0 -138
- package/dist/esm/audio/filters/EqualizerFilter.js.map +0 -1
- package/dist/esm/audio/filters/GranularFilter.d.ts +0 -63
- package/dist/esm/audio/filters/GranularFilter.d.ts.map +0 -1
- package/dist/esm/audio/filters/GranularFilter.js +0 -107
- package/dist/esm/audio/filters/GranularFilter.js.map +0 -1
- package/dist/esm/audio/filters/PitchShiftFilter.d.ts +0 -45
- package/dist/esm/audio/filters/PitchShiftFilter.d.ts.map +0 -1
- package/dist/esm/audio/filters/PitchShiftFilter.js +0 -66
- package/dist/esm/audio/filters/PitchShiftFilter.js.map +0 -1
- package/dist/esm/audio/filters/ReverbFilter.d.ts +0 -38
- package/dist/esm/audio/filters/ReverbFilter.d.ts.map +0 -1
- package/dist/esm/audio/filters/ReverbFilter.js +0 -122
- package/dist/esm/audio/filters/ReverbFilter.js.map +0 -1
- package/dist/esm/audio/filters/VocoderFilter.d.ts +0 -50
- package/dist/esm/audio/filters/VocoderFilter.d.ts.map +0 -1
- package/dist/esm/audio/filters/VocoderFilter.js +0 -94
- package/dist/esm/audio/filters/VocoderFilter.js.map +0 -1
- package/dist/esm/audio/filters/WorkletFilter.d.ts +0 -54
- package/dist/esm/audio/filters/WorkletFilter.d.ts.map +0 -1
- package/dist/esm/audio/filters/WorkletFilter.js +0 -110
- package/dist/esm/audio/filters/WorkletFilter.js.map +0 -1
- package/dist/esm/audio/worklets/beat-detector.worklet.d.ts +0 -2
- package/dist/esm/audio/worklets/beat-detector.worklet.d.ts.map +0 -1
- package/dist/esm/audio/worklets/beat-detector.worklet.js +0 -647
- package/dist/esm/audio/worklets/beat-detector.worklet.js.map +0 -1
- package/dist/esm/audio/worklets/granular.worklet.d.ts +0 -2
- package/dist/esm/audio/worklets/granular.worklet.d.ts.map +0 -1
- package/dist/esm/audio/worklets/granular.worklet.js +0 -89
- package/dist/esm/audio/worklets/granular.worklet.js.map +0 -1
- package/dist/esm/audio/worklets/pitch-shift.worklet.d.ts +0 -2
- package/dist/esm/audio/worklets/pitch-shift.worklet.d.ts.map +0 -1
- package/dist/esm/audio/worklets/pitch-shift.worklet.js +0 -74
- package/dist/esm/audio/worklets/pitch-shift.worklet.js.map +0 -1
- package/dist/esm/audio/worklets/vocoder.worklet.d.ts +0 -2
- package/dist/esm/audio/worklets/vocoder.worklet.d.ts.map +0 -1
- package/dist/esm/audio/worklets/vocoder.worklet.js +0 -92
- package/dist/esm/audio/worklets/vocoder.worklet.js.map +0 -1
- package/dist/esm/input/internal/interactionManagerRegistry.d.ts +0 -10
- package/dist/esm/input/internal/interactionManagerRegistry.d.ts.map +0 -1
- package/dist/esm/input/internal/interactionManagerRegistry.js +0 -10
- package/dist/esm/input/internal/interactionManagerRegistry.js.map +0 -1
- package/dist/esm/rendering/Camera.d.ts +0 -34
- package/dist/esm/rendering/Camera.d.ts.map +0 -1
- package/dist/esm/rendering/Camera.js +0 -38
- package/dist/esm/rendering/Camera.js.map +0 -1
- package/dist/esm/rendering/index.d.ts.map +0 -1
- package/dist/esm/rendering/plan/RenderInstruction.js +0 -45
- package/dist/esm/rendering/plan/RenderInstruction.js.map +0 -1
- package/dist/esm/rendering.d.ts +0 -29
- package/dist/esm/rendering.d.ts.map +0 -1
- package/dist/esm/rendering.js.map +0 -1
- package/dist/esm/resources/JsonStore.d.ts +0 -19
- package/dist/esm/resources/JsonStore.d.ts.map +0 -1
- package/dist/esm/resources/JsonStore.js +0 -62
- package/dist/esm/resources/JsonStore.js.map +0 -1
|
@@ -2,8 +2,9 @@ import { Color } from '../../core/Color.js';
|
|
|
2
2
|
import { Signal } from '../../core/Signal.js';
|
|
3
3
|
import { Matrix } from '../../math/Matrix.js';
|
|
4
4
|
import { Vector } from '../../math/Vector.js';
|
|
5
|
+
import { GpuResourceAccountant, dataTextureBytesPerPixel, estimateTextureBytes } from '../GpuResourceAccountant.js';
|
|
5
6
|
import { resolveUploadTransform } from '../pixelSnap.js';
|
|
6
|
-
import { drawCommandUsesSharedTransform } from '../plan/RenderCommand.js';
|
|
7
|
+
import { RenderEntryKind, drawCommandUsesSharedTransform } from '../plan/RenderCommand.js';
|
|
7
8
|
import { RenderBackendType } from '../RenderBackendType.js';
|
|
8
9
|
import { RendererRegistry } from '../RendererRegistry.js';
|
|
9
10
|
import { createRenderStats, resetRenderStats } from '../RenderStats.js';
|
|
@@ -11,13 +12,60 @@ import { RenderTarget } from '../RenderTarget.js';
|
|
|
11
12
|
import { DataTexture } from '../texture/DataTexture.js';
|
|
12
13
|
import { RenderTexture } from '../texture/RenderTexture.js';
|
|
13
14
|
import { WrapModes, ScaleModes } from '../types.js';
|
|
15
|
+
import { WebGpuBackdropBlendCompositor } from './WebGpuBackdropBlendCompositor.js';
|
|
14
16
|
import { WebGpuMaskCompositor } from './WebGpuMaskCompositor.js';
|
|
17
|
+
import { WebGpuMeshRenderer } from './WebGpuMeshRenderer.js';
|
|
15
18
|
import { WebGpuPassCoordinator } from './WebGpuPassCoordinator.js';
|
|
16
19
|
import { WebGpuTransformStorage } from './WebGpuTransformStorage.js';
|
|
17
20
|
|
|
18
21
|
/* eslint-disable max-lines */
|
|
19
22
|
/// <reference types="@webgpu/types" />
|
|
20
23
|
const managedTextureFormat = 'rgba8unorm';
|
|
24
|
+
// Managed content + render textures use rgba8unorm = 4 bytes/px.
|
|
25
|
+
const MANAGED_TEXTURE_BYTES_PER_PIXEL = 4;
|
|
26
|
+
/** WGSL source for the box-filter mipmap-generation pipeline. @internal */
|
|
27
|
+
const mipmapWgsl = `
|
|
28
|
+
struct VertexOutput {
|
|
29
|
+
@builtin(position) position: vec4<f32>,
|
|
30
|
+
@location(0) texcoord: vec2<f32>,
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
@group(0) @binding(0)
|
|
34
|
+
var sourceTexture: texture_2d<f32>;
|
|
35
|
+
@group(0) @binding(1)
|
|
36
|
+
var sourceSampler: sampler;
|
|
37
|
+
|
|
38
|
+
@vertex
|
|
39
|
+
fn vertexMain(@builtin(vertex_index) vertexIndex: u32) -> VertexOutput {
|
|
40
|
+
var positions = array<vec2<f32>, 3>(
|
|
41
|
+
vec2<f32>(-1.0, -1.0),
|
|
42
|
+
vec2<f32>(3.0, -1.0),
|
|
43
|
+
vec2<f32>(-1.0, 3.0)
|
|
44
|
+
);
|
|
45
|
+
// Y is flipped vs the position array: NDC Y points up, but texture UV
|
|
46
|
+
// Y points down (UV (0,0) is the top-left of the source). Matching the
|
|
47
|
+
// two ensures that the output texture's top-left pixel samples from the
|
|
48
|
+
// source's top-left, so every mip level has the same orientation as the
|
|
49
|
+
// level above it. Prior to this, odd mip levels were rendered upside
|
|
50
|
+
// down, producing visible texture flips at view-size doublings.
|
|
51
|
+
var texcoords = array<vec2<f32>, 3>(
|
|
52
|
+
vec2<f32>(0.0, 1.0),
|
|
53
|
+
vec2<f32>(2.0, 1.0),
|
|
54
|
+
vec2<f32>(0.0, -1.0)
|
|
55
|
+
);
|
|
56
|
+
var output: VertexOutput;
|
|
57
|
+
|
|
58
|
+
output.position = vec4<f32>(positions[vertexIndex], 0.0, 1.0);
|
|
59
|
+
output.texcoord = texcoords[vertexIndex];
|
|
60
|
+
|
|
61
|
+
return output;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
@fragment
|
|
65
|
+
fn fragmentMain(input: VertexOutput) -> @location(0) vec4<f32> {
|
|
66
|
+
return textureSample(sourceTexture, sourceSampler, input.texcoord);
|
|
67
|
+
}
|
|
68
|
+
`;
|
|
21
69
|
/**
|
|
22
70
|
* WebGPU implementation of {@link RenderBackend}. Manages the GPU device,
|
|
23
71
|
* canvas context configuration, format selection, managed-texture cache
|
|
@@ -62,6 +110,8 @@ class WebGpuBackend {
|
|
|
62
110
|
_clipPointB = new Vector();
|
|
63
111
|
_maskCompositor = new WebGpuMaskCompositor();
|
|
64
112
|
_maskCompositorConnected = false;
|
|
113
|
+
_backdropBlendCompositor = new WebGpuBackdropBlendCompositor();
|
|
114
|
+
_backdropBlendCompositorConnected = false;
|
|
65
115
|
_mipmapShaderModule = null;
|
|
66
116
|
_mipmapBindGroupLayout = null;
|
|
67
117
|
_mipmapPipelineLayout = null;
|
|
@@ -78,10 +128,13 @@ class WebGpuBackend {
|
|
|
78
128
|
_clearRequested = false;
|
|
79
129
|
_hasPresentedFrame = false;
|
|
80
130
|
_stats = createRenderStats();
|
|
131
|
+
_accountant = new GpuResourceAccountant(this._stats);
|
|
81
132
|
_transformStorage = new WebGpuTransformStorage();
|
|
82
133
|
_activeDrawCommand = null;
|
|
83
134
|
_passCoordinatorInstance = null;
|
|
84
135
|
_drawPlanDepth = 0;
|
|
136
|
+
_planBaseStack = [];
|
|
137
|
+
_planHashStack = [];
|
|
85
138
|
constructor(app) {
|
|
86
139
|
const canvasOptions = app.options.canvas ?? {};
|
|
87
140
|
const width = canvasOptions.width ?? 800;
|
|
@@ -129,6 +182,16 @@ class WebGpuBackend {
|
|
|
129
182
|
get stats() {
|
|
130
183
|
return this._stats;
|
|
131
184
|
}
|
|
185
|
+
/**
|
|
186
|
+
* Per-backend GPU resource accountant (VRAM / upload / download bookkeeping).
|
|
187
|
+
* Shared with this backend's transform storage and compute readback paths so
|
|
188
|
+
* they can book their own allocations and uploads. Not part of any public
|
|
189
|
+
* surface.
|
|
190
|
+
* @internal
|
|
191
|
+
*/
|
|
192
|
+
get accountant() {
|
|
193
|
+
return this._accountant;
|
|
194
|
+
}
|
|
132
195
|
/** @internal */
|
|
133
196
|
get activeDrawCommand() {
|
|
134
197
|
return this._activeDrawCommand;
|
|
@@ -163,36 +226,57 @@ class WebGpuBackend {
|
|
|
163
226
|
}
|
|
164
227
|
resetStats() {
|
|
165
228
|
resetRenderStats(this._stats);
|
|
229
|
+
// The transform buffer is frame-scoped: reset it once per frame here (was
|
|
230
|
+
// previously reset per render() call in _beginDrawPlan).
|
|
231
|
+
this._getTransformStorage().buffer.begin();
|
|
166
232
|
return this;
|
|
167
233
|
}
|
|
234
|
+
/** Frame-global slot base the plan builder indexes from. @internal */
|
|
235
|
+
get transformBufferCount() {
|
|
236
|
+
return this._getTransformStorage().buffer.count;
|
|
237
|
+
}
|
|
168
238
|
/** @internal */
|
|
169
239
|
_beginDrawPlan(nodeCount) {
|
|
170
240
|
const storage = this._getTransformStorage();
|
|
171
|
-
|
|
241
|
+
// Do NOT reset the transform buffer here — it is frame-scoped (reset in
|
|
242
|
+
// resetStats). The builder already based this plan's node indices at the
|
|
243
|
+
// current buffer count, so writes land in fresh frame-global slots and
|
|
244
|
+
// batches survive across render() calls. Remember this plan's base so a
|
|
245
|
+
// nested plan can free its rows on end.
|
|
246
|
+
this._planBaseStack.push(storage.buffer.count);
|
|
247
|
+
this._planHashStack.push(storage.buffer.frameHash);
|
|
172
248
|
// Pre-allocate the GPU storage buffer for the full plan before any group
|
|
173
|
-
// flush runs.
|
|
174
|
-
//
|
|
175
|
-
|
|
176
|
-
if (
|
|
177
|
-
storage.reserve(this._device,
|
|
249
|
+
// flush runs. Base the reservation on the frame-global count + this plan's
|
|
250
|
+
// nodes so the buffer grows to cover both pre-existing frame rows and new rows.
|
|
251
|
+
const reserveCount = storage.buffer.count + nodeCount;
|
|
252
|
+
if (reserveCount > 0 && this._device !== null && !this._deviceLost) {
|
|
253
|
+
storage.reserve(this._device, reserveCount, this._accountant);
|
|
178
254
|
}
|
|
179
255
|
this._activeDrawCommand = null;
|
|
180
256
|
this._drawPlanDepth++;
|
|
181
257
|
}
|
|
182
258
|
/** @internal */
|
|
183
|
-
_prepareRenderGroupUpload(
|
|
259
|
+
_prepareRenderGroupUpload(entries, startIndex, count) {
|
|
184
260
|
// Pack the whole render group's world transforms (+ tint) into the shared
|
|
185
261
|
// transform storage at the group's upload boundary, keyed by each draw
|
|
186
262
|
// command's stable nodeIndex. Every draw the player will submit for this
|
|
187
263
|
// group is covered here, before the group's first draw.
|
|
188
264
|
//
|
|
265
|
+
// The group is the entries range `[startIndex, startIndex + count)`; every
|
|
266
|
+
// entry in it is a draw, so the player no longer materializes a group array.
|
|
267
|
+
//
|
|
189
268
|
// Renderers that pack their own per-node data (Text, Particle) never read
|
|
190
269
|
// the shared storage, so their commands are skipped — no consuming draw
|
|
191
270
|
// ever references their slots (nodeIndex is unique per command).
|
|
192
271
|
const storage = this._getTransformStorage();
|
|
193
|
-
const
|
|
194
|
-
for (let i =
|
|
195
|
-
const
|
|
272
|
+
const end = startIndex + count;
|
|
273
|
+
for (let i = startIndex; i < end; i++) {
|
|
274
|
+
const entry = entries[i];
|
|
275
|
+
// Every entry in a group run is a draw; narrow to read its command.
|
|
276
|
+
if (entry.kind !== RenderEntryKind.Draw) {
|
|
277
|
+
continue;
|
|
278
|
+
}
|
|
279
|
+
const command = entry.command;
|
|
196
280
|
if (drawCommandUsesSharedTransform(command, this)) {
|
|
197
281
|
storage.writeCommand(command, this._resolveSnapTransform(command.drawable));
|
|
198
282
|
}
|
|
@@ -211,9 +295,19 @@ class WebGpuBackend {
|
|
|
211
295
|
/** @internal */
|
|
212
296
|
_endDrawPlan() {
|
|
213
297
|
this._activeDrawCommand = null;
|
|
298
|
+
const planBase = this._planBaseStack.pop() ?? 0;
|
|
299
|
+
const planHash = this._planHashStack.pop() ?? 0;
|
|
214
300
|
if (this._drawPlanDepth > 0) {
|
|
215
301
|
this._drawPlanDepth--;
|
|
216
302
|
}
|
|
303
|
+
// A nested plan (filter / cacheAsBitmap) just ended: flush its draws, then
|
|
304
|
+
// free its transform rows so the frame-scoped buffer only grows with
|
|
305
|
+
// top-level render() calls. Top-level plans (depth back to 0) keep their rows
|
|
306
|
+
// so cross-call batching survives to the frame-end flush.
|
|
307
|
+
if (this._drawPlanDepth > 0) {
|
|
308
|
+
this._flushActiveRenderer();
|
|
309
|
+
this._getTransformStorage().buffer.rewindTo(planBase, planHash);
|
|
310
|
+
}
|
|
217
311
|
// Only assert balance at the outermost plan: a nested render() (e.g.
|
|
218
312
|
// cacheAsBitmap drawing its cache sprite) sees the still-open outer clips,
|
|
219
313
|
// which are not leaks.
|
|
@@ -237,6 +331,31 @@ class WebGpuBackend {
|
|
|
237
331
|
this._stats.submittedNodes++;
|
|
238
332
|
return this;
|
|
239
333
|
}
|
|
334
|
+
drawInstanced(mesh, transforms, tints, count) {
|
|
335
|
+
if (count <= 0 || mesh.vertexCount === 0 || this._deviceLost || this._device === null) {
|
|
336
|
+
this._activeDrawCommand = null;
|
|
337
|
+
return this;
|
|
338
|
+
}
|
|
339
|
+
const renderer = this.rendererRegistry.resolve(mesh);
|
|
340
|
+
if (!(renderer instanceof WebGpuMeshRenderer)) {
|
|
341
|
+
throw new Error('drawInstanced requires a mesh handled by the WebGPU mesh renderer.');
|
|
342
|
+
}
|
|
343
|
+
this._setActiveRenderer(renderer);
|
|
344
|
+
// Write each instance's (transform, tint) into a fresh, contiguous transform
|
|
345
|
+
// slot before the renderer's draw uploads the storage buffer, then draw the
|
|
346
|
+
// geometry once over [startNodeIndex, startNodeIndex + count).
|
|
347
|
+
// Contract: transforms/tints are parallel arrays of length >= count
|
|
348
|
+
// (count > 0 is guaranteed by the early return above).
|
|
349
|
+
const storage = this._getTransformStorage();
|
|
350
|
+
const startNodeIndex = storage.pushValues(transforms[0], tints[0]);
|
|
351
|
+
for (let i = 1; i < count; i++) {
|
|
352
|
+
storage.pushValues(transforms[i], tints[i]);
|
|
353
|
+
}
|
|
354
|
+
renderer.drawInstancedBatch(mesh, startNodeIndex, count);
|
|
355
|
+
this._activeDrawCommand = null;
|
|
356
|
+
this._stats.submittedNodes += count;
|
|
357
|
+
return this;
|
|
358
|
+
}
|
|
240
359
|
execute(pass) {
|
|
241
360
|
if (this._deviceLost || this._device === null) {
|
|
242
361
|
return this;
|
|
@@ -292,6 +411,39 @@ class WebGpuBackend {
|
|
|
292
411
|
this._maskCompositor.compose(this, content, mask, x, y, width, height, blendMode);
|
|
293
412
|
return this;
|
|
294
413
|
}
|
|
414
|
+
composeWithBackdropBlend(source, x, y, width, height, mode) {
|
|
415
|
+
if (width <= 0 || height <= 0) {
|
|
416
|
+
return this;
|
|
417
|
+
}
|
|
418
|
+
if (this._deviceLost || this._device === null) {
|
|
419
|
+
return this;
|
|
420
|
+
}
|
|
421
|
+
this._flushActiveRenderer();
|
|
422
|
+
this._setActiveRenderer(null);
|
|
423
|
+
if (!this._backdropBlendCompositorConnected) {
|
|
424
|
+
this._backdropBlendCompositor.connect(this.device);
|
|
425
|
+
this._backdropBlendCompositorConnected = true;
|
|
426
|
+
}
|
|
427
|
+
this._backdropBlendCompositor.compose(this, source, x, y, width, height, mode);
|
|
428
|
+
return this;
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* Return the GPU texture backing `target`. For the root canvas target this is
|
|
432
|
+
* `context.getCurrentTexture()` (requires `COPY_SRC` usage configured on the
|
|
433
|
+
* canvas context). For a {@link RenderTexture} target it is the managed GPU
|
|
434
|
+
* texture. Used internally by {@link WebGpuBackdropBlendCompositor} for
|
|
435
|
+
* `copyTextureToTexture` backdrop capture.
|
|
436
|
+
* @internal
|
|
437
|
+
*/
|
|
438
|
+
_renderTargetTexture(target) {
|
|
439
|
+
if (target === this._rootRenderTarget) {
|
|
440
|
+
return this.context.getCurrentTexture();
|
|
441
|
+
}
|
|
442
|
+
if (target instanceof RenderTexture) {
|
|
443
|
+
return this._getTextureState(target).texture;
|
|
444
|
+
}
|
|
445
|
+
throw new Error('WebGpuBackend._renderTargetTexture: unsupported render target type.');
|
|
446
|
+
}
|
|
295
447
|
popScissorRect() {
|
|
296
448
|
if (this._clipBoundsStack.length === 0) {
|
|
297
449
|
return this;
|
|
@@ -330,6 +482,7 @@ class WebGpuBackend {
|
|
|
330
482
|
if (this._clipPixelStack.length === 0) {
|
|
331
483
|
return null;
|
|
332
484
|
}
|
|
485
|
+
// Non-empty checked above, so the top-of-stack element exists.
|
|
333
486
|
const clip = this._clipPixelStack[this._clipPixelStack.length - 1];
|
|
334
487
|
const scaleX = this._renderTarget.root && this._renderTarget.width > 0 ? this._canvas.width / this._renderTarget.width : 1;
|
|
335
488
|
const scaleY = this._renderTarget.root && this._renderTarget.height > 0 ? this._canvas.height / this._renderTarget.height : 1;
|
|
@@ -342,6 +495,7 @@ class WebGpuBackend {
|
|
|
342
495
|
}
|
|
343
496
|
acquireRenderTexture(width, height) {
|
|
344
497
|
for (let index = 0; index < this._temporaryRenderTextures.length; index++) {
|
|
498
|
+
// index is bounded by the array length via the for-loop guard.
|
|
345
499
|
const texture = this._temporaryRenderTextures[index];
|
|
346
500
|
if (texture.width === width && texture.height === height) {
|
|
347
501
|
this._temporaryRenderTextures.splice(index, 1);
|
|
@@ -359,7 +513,12 @@ class WebGpuBackend {
|
|
|
359
513
|
return this;
|
|
360
514
|
}
|
|
361
515
|
setView(view) {
|
|
362
|
-
|
|
516
|
+
// Only flush the open batch when the view actually changes. The unconditional
|
|
517
|
+
// flush forced one draw call per render() call (each render() re-applies the
|
|
518
|
+
// same camera view), defeating cross-call batching.
|
|
519
|
+
if (this._renderTarget.view !== view) {
|
|
520
|
+
this._flushActiveRenderer();
|
|
521
|
+
}
|
|
363
522
|
this._renderTarget.setView(view);
|
|
364
523
|
return this;
|
|
365
524
|
}
|
|
@@ -409,6 +568,10 @@ class WebGpuBackend {
|
|
|
409
568
|
this._maskCompositor.disconnect();
|
|
410
569
|
this._maskCompositorConnected = false;
|
|
411
570
|
}
|
|
571
|
+
if (this._backdropBlendCompositorConnected) {
|
|
572
|
+
this._backdropBlendCompositor.disconnect();
|
|
573
|
+
this._backdropBlendCompositorConnected = false;
|
|
574
|
+
}
|
|
412
575
|
this._transformStorage?.destroy();
|
|
413
576
|
this._transformStorage = null;
|
|
414
577
|
this._activeDrawCommand = null;
|
|
@@ -512,12 +675,23 @@ class WebGpuBackend {
|
|
|
512
675
|
sampler: state.sampler,
|
|
513
676
|
};
|
|
514
677
|
}
|
|
678
|
+
/**
|
|
679
|
+
* The `GPUTextureFormat` a given `Texture`/`RenderTexture` is (or will be)
|
|
680
|
+
* backed by. Unlike {@link renderTargetFormat} (which reflects whatever
|
|
681
|
+
* target is *currently bound*), this is keyed off the texture itself, so
|
|
682
|
+
* callers that build a pipeline for a specific offscreen target — before
|
|
683
|
+
* that target is bound as the active render target — can match its format
|
|
684
|
+
* exactly instead of reading unrelated, possibly-stale backend state.
|
|
685
|
+
*/
|
|
686
|
+
getTextureFormat(texture) {
|
|
687
|
+
return this._getGpuTextureFormat(texture);
|
|
688
|
+
}
|
|
515
689
|
shouldPremultiplyTextureSample(texture) {
|
|
516
690
|
return !(texture instanceof RenderTexture) && texture.premultiplyAlpha;
|
|
517
691
|
}
|
|
518
692
|
/** @internal */
|
|
519
693
|
getTransformStorageBuffer(minCount) {
|
|
520
|
-
return this._getTransformStorage().getBuffer(this.device, minCount);
|
|
694
|
+
return this._getTransformStorage().getBuffer(this.device, minCount, this._accountant);
|
|
521
695
|
}
|
|
522
696
|
/**
|
|
523
697
|
* Append a drawable's world transform (+ tint) to the shared transform storage
|
|
@@ -581,11 +755,9 @@ class WebGpuBackend {
|
|
|
581
755
|
if (typeof gpuNavigator.gpu.getPreferredCanvasFormat !== 'function') {
|
|
582
756
|
throw new Error('WebGPU is available, but navigator.gpu.getPreferredCanvasFormat is not implemented.');
|
|
583
757
|
}
|
|
584
|
-
// Request the adapter before acquiring a WebGPU canvas
|
|
585
|
-
// getContext('webgpu')
|
|
586
|
-
//
|
|
587
|
-
// other way round means an unavailable adapter still locks the canvas
|
|
588
|
-
// and breaks the automatic WebGL2 fallback in Application.
|
|
758
|
+
// Request the adapter AND the device before acquiring a WebGPU canvas
|
|
759
|
+
// context — see the getContext('webgpu') call below for why the order
|
|
760
|
+
// matters.
|
|
589
761
|
let adapter;
|
|
590
762
|
try {
|
|
591
763
|
adapter = await gpuNavigator.gpu.requestAdapter();
|
|
@@ -596,10 +768,6 @@ class WebGpuBackend {
|
|
|
596
768
|
if (adapter === null) {
|
|
597
769
|
throw new Error('Could not acquire a WebGPU adapter.');
|
|
598
770
|
}
|
|
599
|
-
const context = this._canvas.getContext('webgpu');
|
|
600
|
-
if (context === null) {
|
|
601
|
-
throw new Error('Could not create WebGPU canvas context.');
|
|
602
|
-
}
|
|
603
771
|
if (typeof adapter.requestDevice !== 'function') {
|
|
604
772
|
throw new Error('WebGPU adapter does not expose requestDevice().');
|
|
605
773
|
}
|
|
@@ -613,12 +781,26 @@ class WebGpuBackend {
|
|
|
613
781
|
if (device === null) {
|
|
614
782
|
throw new Error('Could not acquire a WebGPU device.');
|
|
615
783
|
}
|
|
784
|
+
// Acquire the WebGPU canvas context only after BOTH the adapter and the
|
|
785
|
+
// device are secured. getContext('webgpu') is exclusive per canvas — once
|
|
786
|
+
// it succeeds, the same canvas can no longer produce a WebGL2 context.
|
|
787
|
+
// Acquiring it earlier would lock the canvas even when WebGPU ultimately
|
|
788
|
+
// fails (a usable adapter but a failing requestDevice — e.g. a missing
|
|
789
|
+
// backend library), which breaks the automatic WebGL2 fallback in
|
|
790
|
+
// Application.
|
|
791
|
+
const context = this._canvas.getContext('webgpu');
|
|
792
|
+
if (context === null) {
|
|
793
|
+
throw new Error('Could not create WebGPU canvas context.');
|
|
794
|
+
}
|
|
616
795
|
const format = gpuNavigator.gpu.getPreferredCanvasFormat();
|
|
617
796
|
try {
|
|
618
797
|
context.configure({
|
|
619
798
|
device,
|
|
620
799
|
format,
|
|
621
800
|
alphaMode: 'opaque',
|
|
801
|
+
// COPY_SRC is required by WebGpuBackdropBlendCompositor to capture
|
|
802
|
+
// the root-canvas backdrop via copyTextureToTexture.
|
|
803
|
+
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC,
|
|
622
804
|
});
|
|
623
805
|
}
|
|
624
806
|
catch (error) {
|
|
@@ -731,6 +913,10 @@ class WebGpuBackend {
|
|
|
731
913
|
this._maskCompositor.disconnect();
|
|
732
914
|
this._maskCompositorConnected = false;
|
|
733
915
|
}
|
|
916
|
+
if (this._backdropBlendCompositorConnected) {
|
|
917
|
+
this._backdropBlendCompositor.disconnect();
|
|
918
|
+
this._backdropBlendCompositorConnected = false;
|
|
919
|
+
}
|
|
734
920
|
// Mipmap pipeline cache is keyed to the dead device — drop it.
|
|
735
921
|
this._mipmapShaderModule = null;
|
|
736
922
|
this._mipmapBindGroupLayout = null;
|
|
@@ -793,6 +979,7 @@ class WebGpuBackend {
|
|
|
793
979
|
mipLevelCount: this._getMipLevelCount(texture),
|
|
794
980
|
usage: this._getTextureUsage(texture),
|
|
795
981
|
});
|
|
982
|
+
const mipLevelCount = this._getMipLevelCount(texture);
|
|
796
983
|
state = {
|
|
797
984
|
texture: gpuTexture,
|
|
798
985
|
view: gpuTexture.createView(),
|
|
@@ -800,9 +987,11 @@ class WebGpuBackend {
|
|
|
800
987
|
version: -1,
|
|
801
988
|
width: texture.width,
|
|
802
989
|
height: texture.height,
|
|
803
|
-
mipLevelCount
|
|
990
|
+
mipLevelCount,
|
|
804
991
|
hasContent: false,
|
|
992
|
+
accountedBytes: 0,
|
|
805
993
|
};
|
|
994
|
+
state.accountedBytes = this._accountant.reallocate(0, this._estimateTextureBytes(texture, mipLevelCount));
|
|
806
995
|
const destroyHandler = () => {
|
|
807
996
|
this._evictTexture(texture);
|
|
808
997
|
};
|
|
@@ -837,10 +1026,16 @@ class WebGpuBackend {
|
|
|
837
1026
|
state.height = texture.height;
|
|
838
1027
|
state.mipLevelCount = mipLevelCount;
|
|
839
1028
|
state.hasContent = false;
|
|
1029
|
+
// Free the previous storage before booking the new size (no transient spike).
|
|
1030
|
+
state.accountedBytes = this._accountant.reallocate(state.accountedBytes, this._estimateTextureBytes(texture, mipLevelCount));
|
|
840
1031
|
}
|
|
841
1032
|
state.sampler = this._createSampler(texture);
|
|
842
1033
|
if (texture instanceof DataTexture) {
|
|
843
|
-
|
|
1034
|
+
// `instanceof DataTexture` narrows to `DataTexture<any>` (the generic is
|
|
1035
|
+
// erased), so `texture.format` widens to `any`; the class invariant
|
|
1036
|
+
// guarantees it is a `DataTextureFormat`, so restore that type here.
|
|
1037
|
+
const format = texture.format;
|
|
1038
|
+
const formatInfo = webgpuDataTextureFormat(format);
|
|
844
1039
|
const region = texture._consumeDirtyRegion();
|
|
845
1040
|
const isFullUpload = region === null || region.full || !state.hasContent;
|
|
846
1041
|
if (isFullUpload) {
|
|
@@ -848,6 +1043,7 @@ class WebGpuBackend {
|
|
|
848
1043
|
bytesPerRow: texture.width * formatInfo.bytesPerPixel,
|
|
849
1044
|
rowsPerImage: texture.height,
|
|
850
1045
|
}, { width: texture.width, height: texture.height });
|
|
1046
|
+
this._accountant.recordTextureUpload(texture.width * texture.height * formatInfo.bytesPerPixel);
|
|
851
1047
|
}
|
|
852
1048
|
else {
|
|
853
1049
|
// Partial upload: pack the dirty region into a contiguous buffer.
|
|
@@ -863,6 +1059,7 @@ class WebGpuBackend {
|
|
|
863
1059
|
subBuffer.set(texture.buffer.subarray(sourceStart, sourceStart + subRowChannels), targetStart);
|
|
864
1060
|
}
|
|
865
1061
|
this.device.queue.writeTexture({ texture: state.texture, origin: { x: region.x, y: region.y } }, subBuffer, { bytesPerRow: region.width * bytesPerPixel, rowsPerImage: region.height }, { width: region.width, height: region.height });
|
|
1062
|
+
this._accountant.recordTextureUpload(region.width * region.height * bytesPerPixel);
|
|
866
1063
|
}
|
|
867
1064
|
state.hasContent = true;
|
|
868
1065
|
}
|
|
@@ -877,6 +1074,7 @@ class WebGpuBackend {
|
|
|
877
1074
|
width: texture.width,
|
|
878
1075
|
height: texture.height,
|
|
879
1076
|
});
|
|
1077
|
+
this._accountant.recordTextureUpload(texture.width * texture.height * MANAGED_TEXTURE_BYTES_PER_PIXEL);
|
|
880
1078
|
if (state.mipLevelCount > 1) {
|
|
881
1079
|
this._generateMipmaps(state.texture, state.mipLevelCount);
|
|
882
1080
|
}
|
|
@@ -894,6 +1092,8 @@ class WebGpuBackend {
|
|
|
894
1092
|
}
|
|
895
1093
|
if (state) {
|
|
896
1094
|
state.texture.destroy();
|
|
1095
|
+
this._accountant.free(state.accountedBytes);
|
|
1096
|
+
state.accountedBytes = 0;
|
|
897
1097
|
this._textureStates.delete(texture);
|
|
898
1098
|
}
|
|
899
1099
|
if (this._texture === texture) {
|
|
@@ -967,14 +1167,19 @@ class WebGpuBackend {
|
|
|
967
1167
|
}
|
|
968
1168
|
_getGpuTextureFormat(texture) {
|
|
969
1169
|
if (texture instanceof DataTexture) {
|
|
970
|
-
|
|
1170
|
+
// `instanceof DataTexture` erases the generic, widening `format` to `any`;
|
|
1171
|
+
// the class invariant guarantees it is a `DataTextureFormat`.
|
|
1172
|
+
const format = texture.format;
|
|
1173
|
+
return webgpuDataTextureFormat(format).gpuFormat;
|
|
971
1174
|
}
|
|
972
1175
|
return managedTextureFormat;
|
|
973
1176
|
}
|
|
974
1177
|
_getTextureUsage(texture) {
|
|
975
1178
|
const mipmapUsage = this._getMipLevelCount(texture) > 1 ? GPUTextureUsage.RENDER_ATTACHMENT : 0;
|
|
976
1179
|
if (texture instanceof RenderTexture) {
|
|
977
|
-
|
|
1180
|
+
// COPY_SRC is required by WebGpuBackdropBlendCompositor to capture the
|
|
1181
|
+
// backdrop from an offscreen RenderTexture target via copyTextureToTexture.
|
|
1182
|
+
return GPUTextureUsage.COPY_SRC | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.RENDER_ATTACHMENT | mipmapUsage;
|
|
978
1183
|
}
|
|
979
1184
|
return GPUTextureUsage.COPY_DST | GPUTextureUsage.TEXTURE_BINDING | mipmapUsage;
|
|
980
1185
|
}
|
|
@@ -1007,6 +1212,20 @@ class WebGpuBackend {
|
|
|
1007
1212
|
return 'nearest';
|
|
1008
1213
|
}
|
|
1009
1214
|
}
|
|
1215
|
+
/** Bytes per pixel for a texture's GPU format (DataTexture formats, else managed `rgba8unorm`). */
|
|
1216
|
+
_textureBytesPerPixel(texture) {
|
|
1217
|
+
if (texture instanceof DataTexture) {
|
|
1218
|
+
// `instanceof DataTexture` erases the generic, widening `format` to `any`;
|
|
1219
|
+
// the class invariant guarantees it is a `DataTextureFormat`.
|
|
1220
|
+
const format = texture.format;
|
|
1221
|
+
return dataTextureBytesPerPixel(format);
|
|
1222
|
+
}
|
|
1223
|
+
return MANAGED_TEXTURE_BYTES_PER_PIXEL;
|
|
1224
|
+
}
|
|
1225
|
+
/** Estimated VRAM bytes for a texture's storage (base level + mip chain). */
|
|
1226
|
+
_estimateTextureBytes(texture, mipLevelCount) {
|
|
1227
|
+
return estimateTextureBytes(texture.width, texture.height, this._textureBytesPerPixel(texture), mipLevelCount);
|
|
1228
|
+
}
|
|
1010
1229
|
_getMipLevelCount(texture) {
|
|
1011
1230
|
if (!texture.generateMipMap) {
|
|
1012
1231
|
return 1;
|
|
@@ -1067,48 +1286,7 @@ class WebGpuBackend {
|
|
|
1067
1286
|
this._mipmapPipeline === null ||
|
|
1068
1287
|
this._mipmapSampler === null) {
|
|
1069
1288
|
this._mipmapShaderModule = this.device.createShaderModule({
|
|
1070
|
-
code:
|
|
1071
|
-
struct VertexOutput {
|
|
1072
|
-
@builtin(position) position: vec4<f32>,
|
|
1073
|
-
@location(0) texcoord: vec2<f32>,
|
|
1074
|
-
};
|
|
1075
|
-
|
|
1076
|
-
@group(0) @binding(0)
|
|
1077
|
-
var sourceTexture: texture_2d<f32>;
|
|
1078
|
-
@group(0) @binding(1)
|
|
1079
|
-
var sourceSampler: sampler;
|
|
1080
|
-
|
|
1081
|
-
@vertex
|
|
1082
|
-
fn vertexMain(@builtin(vertex_index) vertexIndex: u32) -> VertexOutput {
|
|
1083
|
-
var positions = array<vec2<f32>, 3>(
|
|
1084
|
-
vec2<f32>(-1.0, -1.0),
|
|
1085
|
-
vec2<f32>(3.0, -1.0),
|
|
1086
|
-
vec2<f32>(-1.0, 3.0)
|
|
1087
|
-
);
|
|
1088
|
-
// Y is flipped vs the position array: NDC Y points up, but texture UV
|
|
1089
|
-
// Y points down (UV (0,0) is the top-left of the source). Matching the
|
|
1090
|
-
// two ensures that the output texture's top-left pixel samples from the
|
|
1091
|
-
// source's top-left, so every mip level has the same orientation as the
|
|
1092
|
-
// level above it. Prior to this, odd mip levels were rendered upside
|
|
1093
|
-
// down, producing visible texture flips at view-size doublings.
|
|
1094
|
-
var texcoords = array<vec2<f32>, 3>(
|
|
1095
|
-
vec2<f32>(0.0, 1.0),
|
|
1096
|
-
vec2<f32>(2.0, 1.0),
|
|
1097
|
-
vec2<f32>(0.0, -1.0)
|
|
1098
|
-
);
|
|
1099
|
-
var output: VertexOutput;
|
|
1100
|
-
|
|
1101
|
-
output.position = vec4<f32>(positions[vertexIndex], 0.0, 1.0);
|
|
1102
|
-
output.texcoord = texcoords[vertexIndex];
|
|
1103
|
-
|
|
1104
|
-
return output;
|
|
1105
|
-
}
|
|
1106
|
-
|
|
1107
|
-
@fragment
|
|
1108
|
-
fn fragmentMain(input: VertexOutput) -> @location(0) vec4<f32> {
|
|
1109
|
-
return textureSample(sourceTexture, sourceSampler, input.texcoord);
|
|
1110
|
-
}
|
|
1111
|
-
`,
|
|
1289
|
+
code: mipmapWgsl,
|
|
1112
1290
|
});
|
|
1113
1291
|
this._mipmapBindGroupLayout = this.device.createBindGroupLayout({
|
|
1114
1292
|
entries: [
|
|
@@ -1177,5 +1355,5 @@ function webgpuDataTextureFormat(format) {
|
|
|
1177
1355
|
}
|
|
1178
1356
|
}
|
|
1179
1357
|
|
|
1180
|
-
export { WebGpuBackend };
|
|
1358
|
+
export { WebGpuBackend, mipmapWgsl };
|
|
1181
1359
|
//# sourceMappingURL=WebGpuBackend.js.map
|