@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
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { RenderTexture } from '#rendering/texture/RenderTexture';
|
|
2
|
+
import type { Texture } from '#rendering/texture/Texture';
|
|
3
|
+
import { BlendModes } from '#rendering/types';
|
|
4
|
+
import type { WebGpuBackend } from './WebGpuBackend';
|
|
5
|
+
/** WGSL source for the backdrop-blend compositor pipeline. @internal */
|
|
6
|
+
export declare const compositorShaderSource = "\nstruct ProjectionUniforms {\n matrix: mat4x4<f32>,\n};\n\nstruct BlendUniforms {\n mode: u32,\n opaqueBackdrop: f32,\n};\n\n@group(0) @binding(0)\nvar<uniform> projection: ProjectionUniforms;\n\n@group(1) @binding(0)\nvar sourceTexture: texture_2d<f32>;\n@group(1) @binding(1)\nvar sourceSampler: sampler;\n@group(1) @binding(2)\nvar backdropTexture: texture_2d<f32>;\n@group(1) @binding(3)\nvar backdropSampler: sampler;\n\n@group(2) @binding(0)\nvar<uniform> blend: BlendUniforms;\n\nstruct VertexInput {\n @location(0) position: vec2<f32>,\n @location(1) texcoord: vec2<f32>,\n};\n\nstruct VertexOutput {\n @builtin(position) position: vec4<f32>,\n @location(0) texcoord: vec2<f32>,\n};\n\n@vertex\nfn vertexMain(input: VertexInput) -> VertexOutput {\n var output: VertexOutput;\n\n output.position = projection.matrix * vec4<f32>(input.position, 0.0, 1.0);\n output.texcoord = input.texcoord;\n\n return output;\n}\n\nfn unpremultiply(color: vec4<f32>) -> vec3<f32> {\n if (color.a > 0.0) {\n return color.rgb / color.a;\n }\n\n return vec3<f32>(0.0);\n}\n\n// W3C separable blend B(Cb, Cs) for one channel (straight color in [0, 1]).\n// Mode values match the BlendModes enum (src/rendering/types.ts).\nfn blendChannel(mode: u32, cb: f32, cs: f32) -> f32 {\n switch mode {\n case 3u { return cb * cs; } // Multiply\n case 4u { return cb + cs - cb * cs; } // Screen\n case 5u { return min(cb, cs); } // Darken\n case 6u { return max(cb, cs); } // Lighten\n case 7u { return select(1.0 - 2.0 * (1.0 - cb) * (1.0 - cs), 2.0 * cb * cs, cb <= 0.5); } // Overlay\n case 8u { // ColorDodge\n if (cb <= 0.0) { return 0.0; }\n return select(min(1.0, cb / (1.0 - cs)), 1.0, cs >= 1.0);\n }\n case 9u { // ColorBurn\n if (cb >= 1.0) { return 1.0; }\n return select(1.0 - min(1.0, (1.0 - cb) / cs), 0.0, cs <= 0.0);\n }\n case 10u { return select(1.0 - 2.0 * (1.0 - cb) * (1.0 - cs), 2.0 * cb * cs, cs <= 0.5); } // HardLight\n case 11u { // SoftLight\n if (cs <= 0.5) { return cb - (1.0 - 2.0 * cs) * cb * (1.0 - cb); }\n let d = select(sqrt(cb), ((16.0 * cb - 12.0) * cb + 4.0) * cb, cb <= 0.25);\n return cb + (2.0 * cs - 1.0) * (d - cb);\n }\n case 12u { return abs(cb - cs); } // Difference\n case 13u { return cb + cs - 2.0 * cb * cs; } // Exclusion\n default { return min(cb, cs); } // Darken\n }\n}\n\nfn blendSeparable(mode: u32, cb: vec3<f32>, cs: vec3<f32>) -> vec3<f32> {\n return vec3<f32>(blendChannel(mode, cb.x, cs.x), blendChannel(mode, cb.y, cs.y), blendChannel(mode, cb.z, cs.z));\n}\n\n// Non-separable helpers (W3C): operate on the whole color.\nfn lum(c: vec3<f32>) -> f32 {\n return dot(c, vec3<f32>(0.3, 0.59, 0.11));\n}\n\nfn clipColor(input: vec3<f32>) -> vec3<f32> {\n var c = input;\n let l = lum(c);\n let n = min(min(c.x, c.y), c.z);\n let x = max(max(c.x, c.y), c.z);\n\n if (n < 0.0) { c = l + ((c - l) * l) / (l - n); }\n if (x > 1.0) { c = l + ((c - l) * (1.0 - l)) / (x - l); }\n\n return c;\n}\n\nfn setLum(c: vec3<f32>, l: f32) -> vec3<f32> {\n return clipColor(c + (l - lum(c)));\n}\n\nfn sat(c: vec3<f32>) -> f32 {\n return max(max(c.x, c.y), c.z) - min(min(c.x, c.y), c.z);\n}\n\n// Map the channels so min -> 0, max -> s, mid -> proportional (W3C SetSat result).\nfn setSat(c: vec3<f32>, s: f32) -> vec3<f32> {\n let mn = min(min(c.x, c.y), c.z);\n let mx = max(max(c.x, c.y), c.z);\n\n return select(vec3<f32>(0.0), (c - mn) * (s / (mx - mn)), mx > mn);\n}\n\nfn blendNonSeparable(mode: u32, cb: vec3<f32>, cs: vec3<f32>) -> vec3<f32> {\n switch mode {\n case 14u { return setLum(setSat(cs, sat(cb)), lum(cb)); } // Hue\n case 15u { return setLum(setSat(cb, sat(cs)), lum(cb)); } // Saturation\n case 16u { return setLum(cs, lum(cb)); } // Color\n default { return setLum(cb, lum(cs)); } // Luminosity\n }\n}\n\nfn blendAdvanced(mode: u32, cb: vec3<f32>, cs: vec3<f32>) -> vec3<f32> {\n if (mode >= 14u) { return blendNonSeparable(mode, cb, cs); }\n return blendSeparable(mode, cb, cs);\n}\n\n@fragment\nfn fragmentMain(input: VertexOutput) -> @location(0) vec4<f32> {\n let src = textureSample(sourceTexture, sourceSampler, input.texcoord);\n // copyTextureToTexture preserves the target's top-left orientation, so the\n // backdrop is sampled at the same UV as the quad \u2014 no V-flip (unlike the\n // WebGL2 framebuffer-blit path, which reads bottom-left order).\n let dst = textureSample(backdropTexture, backdropSampler, input.texcoord);\n\n let alphaSource = src.a;\n // An opaque target (the on-screen root canvas, alphaMode 'opaque') has an\n // unreliable captured alpha; force full backdrop coverage so the blend is\n // not skipped. Offscreen RenderTextures carry real alpha.\n let alphaBackdrop = max(dst.a, blend.opaqueBackdrop);\n let colorSource = unpremultiply(src);\n let colorBackdrop = unpremultiply(dst);\n\n let blended = blendAdvanced(blend.mode, colorBackdrop, colorSource);\n // Cs' = (1 - \u03B1b)\u00B7Cs + \u03B1b\u00B7B(Cb, Cs)\n let mixedSource = mix(colorSource, blended, alphaBackdrop);\n\n // Premultiplied blended source; the GPU source-over composites it over the\n // untouched backdrop already in the target (\u03B1s = 0 passes the backdrop through).\n return vec4<f32>(mixedSource * alphaSource, alphaSource);\n}\n";
|
|
7
|
+
/**
|
|
8
|
+
* Single-quad backdrop-aware blend compositor used by
|
|
9
|
+
* `WebGpuBackend.composeWithBackdropBlend` (spike: invoked directly). Captures
|
|
10
|
+
* the active target's `[x, y, width, height]` region into a compositor-owned
|
|
11
|
+
* texture via `copyTextureToTexture`, samples the premultiplied source (group 1,
|
|
12
|
+
* slot 0) and captured backdrop (slot 2), computes the W3C blend for the
|
|
13
|
+
* requested {@link BlendModes}, and draws the result over the target with normal
|
|
14
|
+
* (premultiplied source-over) blending — so the GPU composites the blended
|
|
15
|
+
* source over the backdrop already in the target.
|
|
16
|
+
*
|
|
17
|
+
* Mirrors {@link WebGpuMaskCompositor}'s structure. The backdrop texture is
|
|
18
|
+
* compositor-owned (not a pooled {@link RenderTexture}) because
|
|
19
|
+
* `copyTextureToTexture` requires the destination format to equal the source:
|
|
20
|
+
* the root canvas uses the preferred format (often `bgra8unorm`) while pooled
|
|
21
|
+
* render textures are `rgba8unorm`, so a pool RT cannot receive a root-target
|
|
22
|
+
* capture. The owned texture is allocated in the target's own format.
|
|
23
|
+
*
|
|
24
|
+
* Pipelines are cached per (target format, stencil). The compositor is not an
|
|
25
|
+
* {@link AbstractWebGpuRenderer} and never participates in renderer registry
|
|
26
|
+
* dispatch — the backend invokes it directly.
|
|
27
|
+
*/
|
|
28
|
+
export declare class WebGpuBackdropBlendCompositor {
|
|
29
|
+
private readonly _projectionData;
|
|
30
|
+
private readonly _vertexData;
|
|
31
|
+
private readonly _indexData;
|
|
32
|
+
private readonly _blendData;
|
|
33
|
+
private readonly _blendModeView;
|
|
34
|
+
private readonly _blendOpaqueView;
|
|
35
|
+
private readonly _projectionMatrix;
|
|
36
|
+
private readonly _pipelines;
|
|
37
|
+
private _device;
|
|
38
|
+
private _shaderModule;
|
|
39
|
+
private _projectionBindGroupLayout;
|
|
40
|
+
private _textureBindGroupLayout;
|
|
41
|
+
private _blendBindGroupLayout;
|
|
42
|
+
private _pipelineLayout;
|
|
43
|
+
private _vertexBuffer;
|
|
44
|
+
private _indexBuffer;
|
|
45
|
+
private _projectionBuffer;
|
|
46
|
+
private _blendBuffer;
|
|
47
|
+
private _projectionBindGroup;
|
|
48
|
+
private _blendBindGroup;
|
|
49
|
+
private _backdropSampler;
|
|
50
|
+
private _backdropTexture;
|
|
51
|
+
private _backdropView;
|
|
52
|
+
private _backdropWidth;
|
|
53
|
+
private _backdropHeight;
|
|
54
|
+
private _backdropFormat;
|
|
55
|
+
connect(device: GPUDevice): void;
|
|
56
|
+
disconnect(): void;
|
|
57
|
+
/**
|
|
58
|
+
* Composite `source` over the active target's current contents under an
|
|
59
|
+
* advanced (backdrop-aware) blend mode. Materializes any pending clear/draws,
|
|
60
|
+
* captures the target's `[x, y, width, height]` region (view units) into the
|
|
61
|
+
* compositor-owned backdrop texture, runs the blend in a shader, and draws the
|
|
62
|
+
* blended source over the untouched backdrop with normal premultiplied
|
|
63
|
+
* source-over.
|
|
64
|
+
*/
|
|
65
|
+
compose(manager: WebGpuBackend, source: Texture | RenderTexture, x: number, y: number, width: number, height: number, blendMode: BlendModes): void;
|
|
66
|
+
private _ensureBackdrop;
|
|
67
|
+
private _drawBlend;
|
|
68
|
+
private _getOrCreatePipeline;
|
|
69
|
+
private _writeQuadVertices;
|
|
70
|
+
private _writeProjectionMatrix;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=WebGpuBackdropBlendCompositor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebGpuBackdropBlendCompositor.d.ts","sourceRoot":"","sources":["../../../../src/rendering/webgpu/WebGpuBackdropBlendCompositor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIrD,wEAAwE;AACxE,eAAO,MAAM,sBAAsB,ipLA6JlC,CAAC;AAWF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,6BAA6B;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsC;IACtE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsC;IAClE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoD;IAC/E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmD;IAC9E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAuD;IACtF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAyD;IAC1F,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAwB;IAC1D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwE;IAEnG,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,aAAa,CAAgC;IACrD,OAAO,CAAC,0BAA0B,CAAmC;IACrE,OAAO,CAAC,uBAAuB,CAAmC;IAClE,OAAO,CAAC,qBAAqB,CAAmC;IAChE,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,iBAAiB,CAA0B;IACnD,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,oBAAoB,CAA6B;IACzD,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,gBAAgB,CAA2B;IAInD,OAAO,CAAC,gBAAgB,CAA2B;IACnD,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,eAAe,CAAiC;IAEjD,OAAO,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IAqEhC,UAAU,IAAI,IAAI;IAgCzB;;;;;;;OAOG;IACI,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,GAAG,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,GAAG,IAAI;IA8CzJ,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,UAAU;IA6DlB,OAAO,CAAC,oBAAoB;IAkD5B,OAAO,CAAC,kBAAkB;IA4B1B,OAAO,CAAC,sBAAsB;CA0B/B"}
|
|
@@ -0,0 +1,494 @@
|
|
|
1
|
+
import { Matrix } from '../../math/Matrix.js';
|
|
2
|
+
import { BlendModes } from '../types.js';
|
|
3
|
+
import { getWebGpuBlendState } from './WebGpuBlendState.js';
|
|
4
|
+
import { stencilContentDepthStencilState } from './WebGpuStencilState.js';
|
|
5
|
+
|
|
6
|
+
/// <reference types="@webgpu/types" />
|
|
7
|
+
/** WGSL source for the backdrop-blend compositor pipeline. @internal */
|
|
8
|
+
const compositorShaderSource = `
|
|
9
|
+
struct ProjectionUniforms {
|
|
10
|
+
matrix: mat4x4<f32>,
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
struct BlendUniforms {
|
|
14
|
+
mode: u32,
|
|
15
|
+
opaqueBackdrop: f32,
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
@group(0) @binding(0)
|
|
19
|
+
var<uniform> projection: ProjectionUniforms;
|
|
20
|
+
|
|
21
|
+
@group(1) @binding(0)
|
|
22
|
+
var sourceTexture: texture_2d<f32>;
|
|
23
|
+
@group(1) @binding(1)
|
|
24
|
+
var sourceSampler: sampler;
|
|
25
|
+
@group(1) @binding(2)
|
|
26
|
+
var backdropTexture: texture_2d<f32>;
|
|
27
|
+
@group(1) @binding(3)
|
|
28
|
+
var backdropSampler: sampler;
|
|
29
|
+
|
|
30
|
+
@group(2) @binding(0)
|
|
31
|
+
var<uniform> blend: BlendUniforms;
|
|
32
|
+
|
|
33
|
+
struct VertexInput {
|
|
34
|
+
@location(0) position: vec2<f32>,
|
|
35
|
+
@location(1) texcoord: vec2<f32>,
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
struct VertexOutput {
|
|
39
|
+
@builtin(position) position: vec4<f32>,
|
|
40
|
+
@location(0) texcoord: vec2<f32>,
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
@vertex
|
|
44
|
+
fn vertexMain(input: VertexInput) -> VertexOutput {
|
|
45
|
+
var output: VertexOutput;
|
|
46
|
+
|
|
47
|
+
output.position = projection.matrix * vec4<f32>(input.position, 0.0, 1.0);
|
|
48
|
+
output.texcoord = input.texcoord;
|
|
49
|
+
|
|
50
|
+
return output;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
fn unpremultiply(color: vec4<f32>) -> vec3<f32> {
|
|
54
|
+
if (color.a > 0.0) {
|
|
55
|
+
return color.rgb / color.a;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return vec3<f32>(0.0);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// W3C separable blend B(Cb, Cs) for one channel (straight color in [0, 1]).
|
|
62
|
+
// Mode values match the BlendModes enum (src/rendering/types.ts).
|
|
63
|
+
fn blendChannel(mode: u32, cb: f32, cs: f32) -> f32 {
|
|
64
|
+
switch mode {
|
|
65
|
+
case 3u { return cb * cs; } // Multiply
|
|
66
|
+
case 4u { return cb + cs - cb * cs; } // Screen
|
|
67
|
+
case 5u { return min(cb, cs); } // Darken
|
|
68
|
+
case 6u { return max(cb, cs); } // Lighten
|
|
69
|
+
case 7u { return select(1.0 - 2.0 * (1.0 - cb) * (1.0 - cs), 2.0 * cb * cs, cb <= 0.5); } // Overlay
|
|
70
|
+
case 8u { // ColorDodge
|
|
71
|
+
if (cb <= 0.0) { return 0.0; }
|
|
72
|
+
return select(min(1.0, cb / (1.0 - cs)), 1.0, cs >= 1.0);
|
|
73
|
+
}
|
|
74
|
+
case 9u { // ColorBurn
|
|
75
|
+
if (cb >= 1.0) { return 1.0; }
|
|
76
|
+
return select(1.0 - min(1.0, (1.0 - cb) / cs), 0.0, cs <= 0.0);
|
|
77
|
+
}
|
|
78
|
+
case 10u { return select(1.0 - 2.0 * (1.0 - cb) * (1.0 - cs), 2.0 * cb * cs, cs <= 0.5); } // HardLight
|
|
79
|
+
case 11u { // SoftLight
|
|
80
|
+
if (cs <= 0.5) { return cb - (1.0 - 2.0 * cs) * cb * (1.0 - cb); }
|
|
81
|
+
let d = select(sqrt(cb), ((16.0 * cb - 12.0) * cb + 4.0) * cb, cb <= 0.25);
|
|
82
|
+
return cb + (2.0 * cs - 1.0) * (d - cb);
|
|
83
|
+
}
|
|
84
|
+
case 12u { return abs(cb - cs); } // Difference
|
|
85
|
+
case 13u { return cb + cs - 2.0 * cb * cs; } // Exclusion
|
|
86
|
+
default { return min(cb, cs); } // Darken
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
fn blendSeparable(mode: u32, cb: vec3<f32>, cs: vec3<f32>) -> vec3<f32> {
|
|
91
|
+
return vec3<f32>(blendChannel(mode, cb.x, cs.x), blendChannel(mode, cb.y, cs.y), blendChannel(mode, cb.z, cs.z));
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Non-separable helpers (W3C): operate on the whole color.
|
|
95
|
+
fn lum(c: vec3<f32>) -> f32 {
|
|
96
|
+
return dot(c, vec3<f32>(0.3, 0.59, 0.11));
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
fn clipColor(input: vec3<f32>) -> vec3<f32> {
|
|
100
|
+
var c = input;
|
|
101
|
+
let l = lum(c);
|
|
102
|
+
let n = min(min(c.x, c.y), c.z);
|
|
103
|
+
let x = max(max(c.x, c.y), c.z);
|
|
104
|
+
|
|
105
|
+
if (n < 0.0) { c = l + ((c - l) * l) / (l - n); }
|
|
106
|
+
if (x > 1.0) { c = l + ((c - l) * (1.0 - l)) / (x - l); }
|
|
107
|
+
|
|
108
|
+
return c;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
fn setLum(c: vec3<f32>, l: f32) -> vec3<f32> {
|
|
112
|
+
return clipColor(c + (l - lum(c)));
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
fn sat(c: vec3<f32>) -> f32 {
|
|
116
|
+
return max(max(c.x, c.y), c.z) - min(min(c.x, c.y), c.z);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Map the channels so min -> 0, max -> s, mid -> proportional (W3C SetSat result).
|
|
120
|
+
fn setSat(c: vec3<f32>, s: f32) -> vec3<f32> {
|
|
121
|
+
let mn = min(min(c.x, c.y), c.z);
|
|
122
|
+
let mx = max(max(c.x, c.y), c.z);
|
|
123
|
+
|
|
124
|
+
return select(vec3<f32>(0.0), (c - mn) * (s / (mx - mn)), mx > mn);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
fn blendNonSeparable(mode: u32, cb: vec3<f32>, cs: vec3<f32>) -> vec3<f32> {
|
|
128
|
+
switch mode {
|
|
129
|
+
case 14u { return setLum(setSat(cs, sat(cb)), lum(cb)); } // Hue
|
|
130
|
+
case 15u { return setLum(setSat(cb, sat(cs)), lum(cb)); } // Saturation
|
|
131
|
+
case 16u { return setLum(cs, lum(cb)); } // Color
|
|
132
|
+
default { return setLum(cb, lum(cs)); } // Luminosity
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
fn blendAdvanced(mode: u32, cb: vec3<f32>, cs: vec3<f32>) -> vec3<f32> {
|
|
137
|
+
if (mode >= 14u) { return blendNonSeparable(mode, cb, cs); }
|
|
138
|
+
return blendSeparable(mode, cb, cs);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
@fragment
|
|
142
|
+
fn fragmentMain(input: VertexOutput) -> @location(0) vec4<f32> {
|
|
143
|
+
let src = textureSample(sourceTexture, sourceSampler, input.texcoord);
|
|
144
|
+
// copyTextureToTexture preserves the target's top-left orientation, so the
|
|
145
|
+
// backdrop is sampled at the same UV as the quad — no V-flip (unlike the
|
|
146
|
+
// WebGL2 framebuffer-blit path, which reads bottom-left order).
|
|
147
|
+
let dst = textureSample(backdropTexture, backdropSampler, input.texcoord);
|
|
148
|
+
|
|
149
|
+
let alphaSource = src.a;
|
|
150
|
+
// An opaque target (the on-screen root canvas, alphaMode 'opaque') has an
|
|
151
|
+
// unreliable captured alpha; force full backdrop coverage so the blend is
|
|
152
|
+
// not skipped. Offscreen RenderTextures carry real alpha.
|
|
153
|
+
let alphaBackdrop = max(dst.a, blend.opaqueBackdrop);
|
|
154
|
+
let colorSource = unpremultiply(src);
|
|
155
|
+
let colorBackdrop = unpremultiply(dst);
|
|
156
|
+
|
|
157
|
+
let blended = blendAdvanced(blend.mode, colorBackdrop, colorSource);
|
|
158
|
+
// Cs' = (1 - αb)·Cs + αb·B(Cb, Cs)
|
|
159
|
+
let mixedSource = mix(colorSource, blended, alphaBackdrop);
|
|
160
|
+
|
|
161
|
+
// Premultiplied blended source; the GPU source-over composites it over the
|
|
162
|
+
// untouched backdrop already in the target (αs = 0 passes the backdrop through).
|
|
163
|
+
return vec4<f32>(mixedSource * alphaSource, alphaSource);
|
|
164
|
+
}
|
|
165
|
+
`;
|
|
166
|
+
// 4 floats per vertex: position(x, y) + texcoord(u, v).
|
|
167
|
+
const vertexStrideBytes = 16;
|
|
168
|
+
// 16 floats per mat4x4 projection uniform.
|
|
169
|
+
const projectionUniformBytes = 64;
|
|
170
|
+
// mode (u32) + opaqueBackdrop (f32), padded to the 16-byte uniform alignment.
|
|
171
|
+
const blendUniformBytes = 16;
|
|
172
|
+
/**
|
|
173
|
+
* Single-quad backdrop-aware blend compositor used by
|
|
174
|
+
* `WebGpuBackend.composeWithBackdropBlend` (spike: invoked directly). Captures
|
|
175
|
+
* the active target's `[x, y, width, height]` region into a compositor-owned
|
|
176
|
+
* texture via `copyTextureToTexture`, samples the premultiplied source (group 1,
|
|
177
|
+
* slot 0) and captured backdrop (slot 2), computes the W3C blend for the
|
|
178
|
+
* requested {@link BlendModes}, and draws the result over the target with normal
|
|
179
|
+
* (premultiplied source-over) blending — so the GPU composites the blended
|
|
180
|
+
* source over the backdrop already in the target.
|
|
181
|
+
*
|
|
182
|
+
* Mirrors {@link WebGpuMaskCompositor}'s structure. The backdrop texture is
|
|
183
|
+
* compositor-owned (not a pooled {@link RenderTexture}) because
|
|
184
|
+
* `copyTextureToTexture` requires the destination format to equal the source:
|
|
185
|
+
* the root canvas uses the preferred format (often `bgra8unorm`) while pooled
|
|
186
|
+
* render textures are `rgba8unorm`, so a pool RT cannot receive a root-target
|
|
187
|
+
* capture. The owned texture is allocated in the target's own format.
|
|
188
|
+
*
|
|
189
|
+
* Pipelines are cached per (target format, stencil). The compositor is not an
|
|
190
|
+
* {@link AbstractWebGpuRenderer} and never participates in renderer registry
|
|
191
|
+
* dispatch — the backend invokes it directly.
|
|
192
|
+
*/
|
|
193
|
+
class WebGpuBackdropBlendCompositor {
|
|
194
|
+
_projectionData = new Float32Array(16);
|
|
195
|
+
_vertexData = new Float32Array(16); // 4 verts * 4 floats
|
|
196
|
+
_indexData = new Uint16Array([0, 1, 2, 0, 2, 3]);
|
|
197
|
+
_blendData = new ArrayBuffer(blendUniformBytes);
|
|
198
|
+
_blendModeView = new Uint32Array(this._blendData, 0, 1);
|
|
199
|
+
_blendOpaqueView = new Float32Array(this._blendData, 4, 1);
|
|
200
|
+
_projectionMatrix = new Matrix();
|
|
201
|
+
_pipelines = new Map();
|
|
202
|
+
_device = null;
|
|
203
|
+
_shaderModule = null;
|
|
204
|
+
_projectionBindGroupLayout = null;
|
|
205
|
+
_textureBindGroupLayout = null;
|
|
206
|
+
_blendBindGroupLayout = null;
|
|
207
|
+
_pipelineLayout = null;
|
|
208
|
+
_vertexBuffer = null;
|
|
209
|
+
_indexBuffer = null;
|
|
210
|
+
_projectionBuffer = null;
|
|
211
|
+
_blendBuffer = null;
|
|
212
|
+
_projectionBindGroup = null;
|
|
213
|
+
_blendBindGroup = null;
|
|
214
|
+
_backdropSampler = null;
|
|
215
|
+
// Compositor-owned capture target, re-allocated when the region size or the
|
|
216
|
+
// target format changes (see class doc for why a pooled RT cannot be used).
|
|
217
|
+
_backdropTexture = null;
|
|
218
|
+
_backdropView = null;
|
|
219
|
+
_backdropWidth = 0;
|
|
220
|
+
_backdropHeight = 0;
|
|
221
|
+
_backdropFormat = null;
|
|
222
|
+
connect(device) {
|
|
223
|
+
if (this._device !== null) {
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
this._device = device;
|
|
227
|
+
this._shaderModule = device.createShaderModule({ code: compositorShaderSource });
|
|
228
|
+
this._projectionBindGroupLayout = device.createBindGroupLayout({
|
|
229
|
+
entries: [{ binding: 0, visibility: GPUShaderStage.VERTEX, buffer: { type: 'uniform' } }],
|
|
230
|
+
});
|
|
231
|
+
this._textureBindGroupLayout = device.createBindGroupLayout({
|
|
232
|
+
entries: [
|
|
233
|
+
{ binding: 0, visibility: GPUShaderStage.FRAGMENT, texture: {} },
|
|
234
|
+
{ binding: 1, visibility: GPUShaderStage.FRAGMENT, sampler: {} },
|
|
235
|
+
{ binding: 2, visibility: GPUShaderStage.FRAGMENT, texture: {} },
|
|
236
|
+
{ binding: 3, visibility: GPUShaderStage.FRAGMENT, sampler: {} },
|
|
237
|
+
],
|
|
238
|
+
});
|
|
239
|
+
this._blendBindGroupLayout = device.createBindGroupLayout({
|
|
240
|
+
entries: [{ binding: 0, visibility: GPUShaderStage.FRAGMENT, buffer: { type: 'uniform' } }],
|
|
241
|
+
});
|
|
242
|
+
this._pipelineLayout = device.createPipelineLayout({
|
|
243
|
+
bindGroupLayouts: [this._projectionBindGroupLayout, this._textureBindGroupLayout, this._blendBindGroupLayout],
|
|
244
|
+
});
|
|
245
|
+
this._vertexBuffer = device.createBuffer({
|
|
246
|
+
size: 4 * vertexStrideBytes,
|
|
247
|
+
usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
|
|
248
|
+
});
|
|
249
|
+
this._indexBuffer = device.createBuffer({
|
|
250
|
+
size: 6 * Uint16Array.BYTES_PER_ELEMENT,
|
|
251
|
+
usage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST,
|
|
252
|
+
});
|
|
253
|
+
device.queue.writeBuffer(this._indexBuffer, 0, this._indexData);
|
|
254
|
+
this._projectionBuffer = device.createBuffer({
|
|
255
|
+
size: projectionUniformBytes,
|
|
256
|
+
usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
|
|
257
|
+
});
|
|
258
|
+
this._blendBuffer = device.createBuffer({
|
|
259
|
+
size: blendUniformBytes,
|
|
260
|
+
usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
|
|
261
|
+
});
|
|
262
|
+
this._backdropSampler = device.createSampler({
|
|
263
|
+
magFilter: 'nearest',
|
|
264
|
+
minFilter: 'nearest',
|
|
265
|
+
addressModeU: 'clamp-to-edge',
|
|
266
|
+
addressModeV: 'clamp-to-edge',
|
|
267
|
+
});
|
|
268
|
+
this._projectionBindGroup = device.createBindGroup({
|
|
269
|
+
layout: this._projectionBindGroupLayout,
|
|
270
|
+
entries: [{ binding: 0, resource: { buffer: this._projectionBuffer } }],
|
|
271
|
+
});
|
|
272
|
+
this._blendBindGroup = device.createBindGroup({
|
|
273
|
+
layout: this._blendBindGroupLayout,
|
|
274
|
+
entries: [{ binding: 0, resource: { buffer: this._blendBuffer } }],
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
disconnect() {
|
|
278
|
+
if (this._device === null) {
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
this._vertexBuffer?.destroy();
|
|
282
|
+
this._indexBuffer?.destroy();
|
|
283
|
+
this._projectionBuffer?.destroy();
|
|
284
|
+
this._blendBuffer?.destroy();
|
|
285
|
+
this._backdropTexture?.destroy();
|
|
286
|
+
this._vertexBuffer = null;
|
|
287
|
+
this._indexBuffer = null;
|
|
288
|
+
this._projectionBuffer = null;
|
|
289
|
+
this._blendBuffer = null;
|
|
290
|
+
this._backdropTexture = null;
|
|
291
|
+
this._backdropView = null;
|
|
292
|
+
this._backdropWidth = 0;
|
|
293
|
+
this._backdropHeight = 0;
|
|
294
|
+
this._backdropFormat = null;
|
|
295
|
+
this._backdropSampler = null;
|
|
296
|
+
this._projectionBindGroup = null;
|
|
297
|
+
this._blendBindGroup = null;
|
|
298
|
+
this._pipelineLayout = null;
|
|
299
|
+
this._blendBindGroupLayout = null;
|
|
300
|
+
this._textureBindGroupLayout = null;
|
|
301
|
+
this._projectionBindGroupLayout = null;
|
|
302
|
+
this._shaderModule = null;
|
|
303
|
+
this._pipelines.clear();
|
|
304
|
+
this._device = null;
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Composite `source` over the active target's current contents under an
|
|
308
|
+
* advanced (backdrop-aware) blend mode. Materializes any pending clear/draws,
|
|
309
|
+
* captures the target's `[x, y, width, height]` region (view units) into the
|
|
310
|
+
* compositor-owned backdrop texture, runs the blend in a shader, and draws the
|
|
311
|
+
* blended source over the untouched backdrop with normal premultiplied
|
|
312
|
+
* source-over.
|
|
313
|
+
*/
|
|
314
|
+
compose(manager, source, x, y, width, height, blendMode) {
|
|
315
|
+
if (this._device === null) {
|
|
316
|
+
throw new Error('WebGpuBackdropBlendCompositor: not connected.');
|
|
317
|
+
}
|
|
318
|
+
if (width <= 0 || height <= 0) {
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
const device = this._device;
|
|
322
|
+
const target = manager.renderTarget;
|
|
323
|
+
// Clears/draws are deferred on WebGPU; flush so the target texture holds the
|
|
324
|
+
// real backdrop before the standalone copy below reads it.
|
|
325
|
+
manager.flush();
|
|
326
|
+
const format = manager.renderTargetFormat;
|
|
327
|
+
const attachment = manager._getAttachmentPixelSize(target);
|
|
328
|
+
const scaleX = target.root && target.width > 0 ? attachment.width / target.width : 1;
|
|
329
|
+
const scaleY = target.root && target.height > 0 ? attachment.height / target.height : 1;
|
|
330
|
+
const ox = Math.max(0, Math.floor(x * scaleX));
|
|
331
|
+
const oy = Math.max(0, Math.floor(y * scaleY));
|
|
332
|
+
const cw = Math.max(0, Math.min(Math.round(width * scaleX), attachment.width - ox));
|
|
333
|
+
const ch = Math.max(0, Math.min(Math.round(height * scaleY), attachment.height - oy));
|
|
334
|
+
if (cw <= 0 || ch <= 0) {
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
337
|
+
const backdropView = this._ensureBackdrop(device, cw, ch, format);
|
|
338
|
+
// Capture the target region into the backdrop on a standalone encoder; a copy
|
|
339
|
+
// cannot run inside a render pass (the coordinator's passes self-submit).
|
|
340
|
+
const encoder = device.createCommandEncoder();
|
|
341
|
+
encoder.copyTextureToTexture({ texture: manager._renderTargetTexture(target), origin: { x: ox, y: oy, z: 0 } }, { texture: this._backdropTexture, origin: { x: 0, y: 0, z: 0 } }, { width: cw, height: ch, depthOrArrayLayers: 1 });
|
|
342
|
+
device.queue.submit([encoder.finish()]);
|
|
343
|
+
this._drawBlend(manager, source, backdropView, x, y, width, height, blendMode, target.root);
|
|
344
|
+
}
|
|
345
|
+
_ensureBackdrop(device, width, height, format) {
|
|
346
|
+
if (this._backdropTexture === null || this._backdropWidth !== width || this._backdropHeight !== height || this._backdropFormat !== format) {
|
|
347
|
+
this._backdropTexture?.destroy();
|
|
348
|
+
this._backdropTexture = device.createTexture({
|
|
349
|
+
size: { width, height },
|
|
350
|
+
format,
|
|
351
|
+
usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.TEXTURE_BINDING,
|
|
352
|
+
});
|
|
353
|
+
this._backdropView = this._backdropTexture.createView();
|
|
354
|
+
this._backdropWidth = width;
|
|
355
|
+
this._backdropHeight = height;
|
|
356
|
+
this._backdropFormat = format;
|
|
357
|
+
}
|
|
358
|
+
return this._backdropView;
|
|
359
|
+
}
|
|
360
|
+
_drawBlend(manager, source, backdropView, x, y, width, height, blendMode, opaqueBackdrop) {
|
|
361
|
+
const device = this._device;
|
|
362
|
+
this._writeQuadVertices(x, y, x + width, y + height);
|
|
363
|
+
device.queue.writeBuffer(this._vertexBuffer, 0, this._vertexData);
|
|
364
|
+
this._writeProjectionMatrix(manager.view.getTransform());
|
|
365
|
+
device.queue.writeBuffer(this._projectionBuffer, 0, this._projectionData);
|
|
366
|
+
this._blendModeView[0] = blendMode;
|
|
367
|
+
this._blendOpaqueView[0] = opaqueBackdrop ? 1 : 0;
|
|
368
|
+
device.queue.writeBuffer(this._blendBuffer, 0, this._blendData);
|
|
369
|
+
const sourceBinding = manager.getTextureBinding(source);
|
|
370
|
+
const textureBindGroup = device.createBindGroup({
|
|
371
|
+
layout: this._textureBindGroupLayout,
|
|
372
|
+
entries: [
|
|
373
|
+
{ binding: 0, resource: sourceBinding.view },
|
|
374
|
+
{ binding: 1, resource: sourceBinding.sampler },
|
|
375
|
+
{ binding: 2, resource: backdropView },
|
|
376
|
+
{ binding: 3, resource: this._backdropSampler },
|
|
377
|
+
],
|
|
378
|
+
});
|
|
379
|
+
const targetFormat = manager.renderTargetFormat;
|
|
380
|
+
// A geometric stencil clip can wrap the block (the executor pushes the clip
|
|
381
|
+
// outermost), so the compositor may draw into a stencil-enabled pass. Select
|
|
382
|
+
// the matching pipeline variant — a stencil-free pipeline is incompatible
|
|
383
|
+
// with the pass's depth/stencil attachment.
|
|
384
|
+
const stencil = manager._passCoordinator.stencilActive;
|
|
385
|
+
const pipeline = this._getOrCreatePipeline(targetFormat, stencil);
|
|
386
|
+
// The blend math is in the shader; composite the blended source over the
|
|
387
|
+
// backdrop already in the target with normal premultiplied source-over.
|
|
388
|
+
const pass = manager._passCoordinator.acquirePass().pass;
|
|
389
|
+
pass.setPipeline(pipeline);
|
|
390
|
+
pass.setBindGroup(0, this._projectionBindGroup);
|
|
391
|
+
pass.setBindGroup(1, textureBindGroup);
|
|
392
|
+
pass.setBindGroup(2, this._blendBindGroup);
|
|
393
|
+
pass.setVertexBuffer(0, this._vertexBuffer);
|
|
394
|
+
pass.setIndexBuffer(this._indexBuffer, 'uint16');
|
|
395
|
+
pass.drawIndexed(6);
|
|
396
|
+
manager.stats.batches++;
|
|
397
|
+
manager.stats.drawCalls++;
|
|
398
|
+
manager._passCoordinator.endPass();
|
|
399
|
+
}
|
|
400
|
+
_getOrCreatePipeline(format, stencil) {
|
|
401
|
+
const key = `${format}|${stencil ? 's' : 'n'}`;
|
|
402
|
+
const cached = this._pipelines.get(key);
|
|
403
|
+
if (cached !== undefined) {
|
|
404
|
+
return cached;
|
|
405
|
+
}
|
|
406
|
+
const device = this._device;
|
|
407
|
+
const descriptor = {
|
|
408
|
+
layout: this._pipelineLayout,
|
|
409
|
+
vertex: {
|
|
410
|
+
module: this._shaderModule,
|
|
411
|
+
entryPoint: 'vertexMain',
|
|
412
|
+
buffers: [
|
|
413
|
+
{
|
|
414
|
+
arrayStride: vertexStrideBytes,
|
|
415
|
+
attributes: [
|
|
416
|
+
{ shaderLocation: 0, offset: 0, format: 'float32x2' },
|
|
417
|
+
{ shaderLocation: 1, offset: 8, format: 'float32x2' },
|
|
418
|
+
],
|
|
419
|
+
},
|
|
420
|
+
],
|
|
421
|
+
},
|
|
422
|
+
fragment: {
|
|
423
|
+
module: this._shaderModule,
|
|
424
|
+
entryPoint: 'fragmentMain',
|
|
425
|
+
targets: [
|
|
426
|
+
{
|
|
427
|
+
format,
|
|
428
|
+
// The shader produced the final premultiplied blended source; the
|
|
429
|
+
// GPU just source-over composites it over the backdrop.
|
|
430
|
+
blend: getWebGpuBlendState(BlendModes.Normal),
|
|
431
|
+
},
|
|
432
|
+
],
|
|
433
|
+
},
|
|
434
|
+
primitive: { topology: 'triangle-list' },
|
|
435
|
+
};
|
|
436
|
+
if (stencil) {
|
|
437
|
+
descriptor.depthStencil = stencilContentDepthStencilState();
|
|
438
|
+
}
|
|
439
|
+
const pipeline = device.createRenderPipeline(descriptor);
|
|
440
|
+
this._pipelines.set(key, pipeline);
|
|
441
|
+
return pipeline;
|
|
442
|
+
}
|
|
443
|
+
_writeQuadVertices(left, top, right, bottom) {
|
|
444
|
+
const view = this._vertexData;
|
|
445
|
+
// Vertex 0: top-left (UV 0, 0)
|
|
446
|
+
view[0] = left;
|
|
447
|
+
view[1] = top;
|
|
448
|
+
view[2] = 0;
|
|
449
|
+
view[3] = 0;
|
|
450
|
+
// Vertex 1: top-right (UV 1, 0)
|
|
451
|
+
view[4] = right;
|
|
452
|
+
view[5] = top;
|
|
453
|
+
view[6] = 1;
|
|
454
|
+
view[7] = 0;
|
|
455
|
+
// Vertex 2: bottom-right (UV 1, 1)
|
|
456
|
+
view[8] = right;
|
|
457
|
+
view[9] = bottom;
|
|
458
|
+
view[10] = 1;
|
|
459
|
+
view[11] = 1;
|
|
460
|
+
// Vertex 3: bottom-left (UV 0, 1)
|
|
461
|
+
view[12] = left;
|
|
462
|
+
view[13] = bottom;
|
|
463
|
+
view[14] = 0;
|
|
464
|
+
view[15] = 1;
|
|
465
|
+
}
|
|
466
|
+
_writeProjectionMatrix(viewMatrix) {
|
|
467
|
+
// Pack the 3x3 affine view matrix into a 4x4 column-major mat4x4 for WGSL.
|
|
468
|
+
const m = this._projectionMatrix.copy(viewMatrix);
|
|
469
|
+
const data = this._projectionData;
|
|
470
|
+
// col 0
|
|
471
|
+
data[0] = m.a;
|
|
472
|
+
data[1] = m.c;
|
|
473
|
+
data[2] = 0;
|
|
474
|
+
data[3] = 0;
|
|
475
|
+
// col 1
|
|
476
|
+
data[4] = m.b;
|
|
477
|
+
data[5] = m.d;
|
|
478
|
+
data[6] = 0;
|
|
479
|
+
data[7] = 0;
|
|
480
|
+
// col 2
|
|
481
|
+
data[8] = 0;
|
|
482
|
+
data[9] = 0;
|
|
483
|
+
data[10] = 1;
|
|
484
|
+
data[11] = 0;
|
|
485
|
+
// col 3
|
|
486
|
+
data[12] = m.x;
|
|
487
|
+
data[13] = m.y;
|
|
488
|
+
data[14] = 0;
|
|
489
|
+
data[15] = 1;
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
export { WebGpuBackdropBlendCompositor, compositorShaderSource };
|
|
494
|
+
//# sourceMappingURL=WebGpuBackdropBlendCompositor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebGpuBackdropBlendCompositor.js","sources":["../../../../../src/rendering/webgpu/WebGpuBackdropBlendCompositor.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|