@codexo/exojs 0.6.12 → 0.7.12
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 +1424 -0
- package/dist/esm/animation/Tween.d.ts +60 -1
- package/dist/esm/animation/Tween.js +60 -1
- package/dist/esm/animation/Tween.js.map +1 -1
- package/dist/esm/animation/TweenManager.d.ts +10 -0
- package/dist/esm/animation/TweenManager.js +10 -0
- package/dist/esm/animation/TweenManager.js.map +1 -1
- package/dist/esm/animation/types.d.ts +15 -0
- package/dist/esm/animation/types.js +6 -0
- package/dist/esm/animation/types.js.map +1 -1
- package/dist/esm/audio/AbstractMedia.d.ts +29 -0
- package/dist/esm/audio/AbstractMedia.js +76 -0
- package/dist/esm/audio/AbstractMedia.js.map +1 -1
- package/dist/esm/audio/AudioAnalyser.d.ts +83 -23
- package/dist/esm/audio/AudioAnalyser.js +277 -57
- package/dist/esm/audio/AudioAnalyser.js.map +1 -1
- package/dist/esm/audio/AudioBus.d.ts +82 -0
- package/dist/esm/audio/AudioBus.js +255 -0
- package/dist/esm/audio/AudioBus.js.map +1 -0
- package/dist/esm/audio/AudioFilter.d.ts +16 -0
- package/dist/esm/audio/AudioFilter.js +13 -0
- package/dist/esm/audio/AudioFilter.js.map +1 -0
- package/dist/esm/audio/AudioListener.d.ts +39 -0
- package/dist/esm/audio/AudioListener.js +97 -0
- package/dist/esm/audio/AudioListener.js.map +1 -0
- package/dist/esm/audio/AudioManager.d.ts +68 -0
- package/dist/esm/audio/AudioManager.js +139 -0
- package/dist/esm/audio/AudioManager.js.map +1 -0
- package/dist/esm/audio/BeatDetector.d.ts +142 -0
- package/dist/esm/audio/BeatDetector.js +957 -0
- package/dist/esm/audio/BeatDetector.js.map +1 -0
- package/dist/esm/audio/Envelope.d.ts +44 -0
- package/dist/esm/audio/Envelope.js +60 -0
- package/dist/esm/audio/Envelope.js.map +1 -0
- package/dist/esm/audio/Media.d.ts +11 -0
- package/dist/esm/audio/Music.d.ts +20 -0
- package/dist/esm/audio/Music.js +45 -4
- package/dist/esm/audio/Music.js.map +1 -1
- package/dist/esm/audio/OscillatorSound.d.ts +98 -0
- package/dist/esm/audio/OscillatorSound.js +342 -0
- package/dist/esm/audio/OscillatorSound.js.map +1 -0
- package/dist/esm/audio/Sound.d.ts +119 -9
- package/dist/esm/audio/Sound.js +301 -117
- package/dist/esm/audio/Sound.js.map +1 -1
- package/dist/esm/audio/audio-context.d.ts +48 -0
- package/dist/esm/audio/audio-context.js +48 -5
- package/dist/esm/audio/audio-context.js.map +1 -1
- package/dist/esm/audio/crossFade.d.ts +19 -0
- package/dist/esm/audio/crossFade.js +26 -0
- package/dist/esm/audio/crossFade.js.map +1 -0
- package/dist/esm/audio/dsp/fft.d.ts +22 -0
- package/dist/esm/audio/dsp/mel.d.ts +43 -0
- package/dist/esm/audio/dsp/tempogram.d.ts +51 -0
- package/dist/esm/audio/filters/ChorusFilter.d.ts +52 -0
- package/dist/esm/audio/filters/ChorusFilter.js +143 -0
- package/dist/esm/audio/filters/ChorusFilter.js.map +1 -0
- package/dist/esm/audio/filters/CompressorFilter.d.ts +43 -0
- package/dist/esm/audio/filters/CompressorFilter.js +108 -0
- package/dist/esm/audio/filters/CompressorFilter.js.map +1 -0
- package/dist/esm/audio/filters/DelayFilter.d.ts +34 -0
- package/dist/esm/audio/filters/DelayFilter.js +110 -0
- package/dist/esm/audio/filters/DelayFilter.js.map +1 -0
- package/dist/esm/audio/filters/DuckingFilter.d.ts +44 -0
- package/dist/esm/audio/filters/DuckingFilter.js +164 -0
- package/dist/esm/audio/filters/DuckingFilter.js.map +1 -0
- package/dist/esm/audio/filters/EqualizerFilter.d.ts +49 -0
- package/dist/esm/audio/filters/EqualizerFilter.js +134 -0
- package/dist/esm/audio/filters/EqualizerFilter.js.map +1 -0
- package/dist/esm/audio/filters/GranularFilter.d.ts +62 -0
- package/dist/esm/audio/filters/GranularFilter.js +176 -0
- package/dist/esm/audio/filters/GranularFilter.js.map +1 -0
- package/dist/esm/audio/filters/HighpassFilter.d.ts +29 -0
- package/dist/esm/audio/filters/HighpassFilter.js +71 -0
- package/dist/esm/audio/filters/HighpassFilter.js.map +1 -0
- package/dist/esm/audio/filters/LowpassFilter.d.ts +29 -0
- package/dist/esm/audio/filters/LowpassFilter.js +71 -0
- package/dist/esm/audio/filters/LowpassFilter.js.map +1 -0
- package/dist/esm/audio/filters/PitchShiftFilter.d.ts +44 -0
- package/dist/esm/audio/filters/PitchShiftFilter.js +132 -0
- package/dist/esm/audio/filters/PitchShiftFilter.js.map +1 -0
- package/dist/esm/audio/filters/ReverbFilter.d.ts +36 -0
- package/dist/esm/audio/filters/ReverbFilter.js +118 -0
- package/dist/esm/audio/filters/ReverbFilter.js.map +1 -0
- package/dist/esm/audio/filters/VocoderFilter.d.ts +49 -0
- package/dist/esm/audio/filters/VocoderFilter.js +174 -0
- package/dist/esm/audio/filters/VocoderFilter.js.map +1 -0
- package/dist/esm/audio/filters/WorkletFilter.d.ts +51 -0
- package/dist/esm/audio/filters/WorkletFilter.js +106 -0
- package/dist/esm/audio/filters/WorkletFilter.js.map +1 -0
- package/dist/esm/audio/filters/index.d.ts +12 -0
- package/dist/esm/audio/index.d.ts +15 -1
- package/dist/esm/audio/worklet/registerWorklet.d.ts +10 -0
- package/dist/esm/audio/worklet/registerWorklet.js +44 -0
- package/dist/esm/audio/worklet/registerWorklet.js.map +1 -0
- package/dist/esm/core/Application.d.ts +82 -0
- package/dist/esm/core/Application.js +137 -2
- package/dist/esm/core/Application.js.map +1 -1
- package/dist/esm/core/Bounds.d.ts +23 -0
- package/dist/esm/core/Bounds.js +23 -0
- package/dist/esm/core/Bounds.js.map +1 -1
- package/dist/esm/core/Clock.d.ts +21 -0
- package/dist/esm/core/Clock.js +21 -0
- package/dist/esm/core/Clock.js.map +1 -1
- package/dist/esm/core/Color.d.ts +35 -0
- package/dist/esm/core/Color.js +35 -0
- package/dist/esm/core/Color.js.map +1 -1
- package/dist/esm/core/Scene.d.ts +46 -0
- package/dist/esm/core/Scene.js +27 -0
- package/dist/esm/core/Scene.js.map +1 -1
- package/dist/esm/core/SceneManager.d.ts +62 -0
- package/dist/esm/core/SceneManager.js +49 -0
- package/dist/esm/core/SceneManager.js.map +1 -1
- package/dist/esm/core/SceneNode.d.ts +40 -1
- package/dist/esm/core/SceneNode.js +75 -6
- package/dist/esm/core/SceneNode.js.map +1 -1
- package/dist/esm/core/Signal.d.ts +44 -0
- package/dist/esm/core/Signal.js +39 -0
- package/dist/esm/core/Signal.js.map +1 -1
- package/dist/esm/core/Time.d.ts +21 -0
- package/dist/esm/core/Time.js +22 -1
- package/dist/esm/core/Time.js.map +1 -1
- package/dist/esm/core/Timer.d.ts +7 -0
- package/dist/esm/core/Timer.js +7 -0
- package/dist/esm/core/Timer.js.map +1 -1
- package/dist/esm/core/capabilities.d.ts +12 -0
- package/dist/esm/core/capabilities.js +12 -0
- package/dist/esm/core/capabilities.js.map +1 -1
- package/dist/esm/core/index.d.ts +0 -1
- package/dist/esm/core/types.d.ts +37 -0
- package/dist/esm/core/utils.d.ts +48 -0
- package/dist/esm/core/utils.js +48 -0
- package/dist/esm/core/utils.js.map +1 -1
- package/dist/esm/debug/BoundingBoxesLayer.d.ts +26 -0
- package/dist/esm/debug/BoundingBoxesLayer.js +136 -0
- package/dist/esm/debug/BoundingBoxesLayer.js.map +1 -0
- package/dist/esm/debug/DebugLayer.d.ts +42 -0
- package/dist/esm/debug/DebugLayer.js +34 -0
- package/dist/esm/debug/DebugLayer.js.map +1 -0
- package/dist/esm/debug/DebugOverlay.d.ts +59 -0
- package/dist/esm/debug/DebugOverlay.js +123 -0
- package/dist/esm/debug/DebugOverlay.js.map +1 -0
- package/dist/esm/debug/HitTestLayer.d.ts +32 -0
- package/dist/esm/debug/HitTestLayer.js +118 -0
- package/dist/esm/debug/HitTestLayer.js.map +1 -0
- package/dist/esm/debug/PerformanceLayer.d.ts +37 -0
- package/dist/esm/debug/PerformanceLayer.js +193 -0
- package/dist/esm/debug/PerformanceLayer.js.map +1 -0
- package/dist/esm/debug/PointerStackLayer.d.ts +31 -0
- package/dist/esm/debug/PointerStackLayer.js +160 -0
- package/dist/esm/debug/PointerStackLayer.js.map +1 -0
- package/dist/esm/debug/index.d.ts +6 -0
- package/dist/esm/debug/index.js +7 -0
- package/dist/esm/debug/index.js.map +1 -0
- package/dist/esm/index.js +30 -4
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/input/ArcadeStickGamepadMapping.d.ts +7 -0
- package/dist/esm/input/ArcadeStickGamepadMapping.js +7 -0
- package/dist/esm/input/ArcadeStickGamepadMapping.js.map +1 -1
- package/dist/esm/input/GameCubeGamepadMapping.d.ts +9 -0
- package/dist/esm/input/GameCubeGamepadMapping.js +9 -0
- package/dist/esm/input/GameCubeGamepadMapping.js.map +1 -1
- package/dist/esm/input/Gamepad.d.ts +48 -0
- package/dist/esm/input/Gamepad.js +43 -0
- package/dist/esm/input/Gamepad.js.map +1 -1
- package/dist/esm/input/GamepadChannels.d.ts +8 -0
- package/dist/esm/input/GamepadChannels.js +8 -0
- package/dist/esm/input/GamepadChannels.js.map +1 -1
- package/dist/esm/input/GamepadControl.d.ts +18 -0
- package/dist/esm/input/GamepadControl.js +13 -0
- package/dist/esm/input/GamepadControl.js.map +1 -1
- package/dist/esm/input/GamepadDefinitions.d.ts +64 -1
- package/dist/esm/input/GamepadDefinitions.js +40 -1
- package/dist/esm/input/GamepadDefinitions.js.map +1 -1
- package/dist/esm/input/GamepadMapping.d.ts +32 -2
- package/dist/esm/input/GamepadMapping.js +24 -0
- package/dist/esm/input/GamepadMapping.js.map +1 -1
- package/dist/esm/input/GamepadPromptLayouts.d.ts +32 -1
- package/dist/esm/input/GamepadPromptLayouts.js +25 -1
- package/dist/esm/input/GamepadPromptLayouts.js.map +1 -1
- package/dist/esm/input/GenericDualAnalogGamepadMapping.d.ts +10 -0
- package/dist/esm/input/GenericDualAnalogGamepadMapping.js +10 -0
- package/dist/esm/input/GenericDualAnalogGamepadMapping.js.map +1 -1
- package/dist/esm/input/GestureRecognizer.d.ts +11 -2
- package/dist/esm/input/GestureRecognizer.js +11 -2
- package/dist/esm/input/GestureRecognizer.js.map +1 -1
- package/dist/esm/input/Input.d.ts +24 -0
- package/dist/esm/input/Input.js +22 -0
- package/dist/esm/input/Input.js.map +1 -1
- package/dist/esm/input/InputManager.d.ts +43 -0
- package/dist/esm/input/InputManager.js +68 -5
- package/dist/esm/input/InputManager.js.map +1 -1
- package/dist/esm/input/InteractionEvent.d.ts +31 -0
- package/dist/esm/input/InteractionEvent.js +37 -0
- package/dist/esm/input/InteractionEvent.js.map +1 -0
- package/dist/esm/input/InteractionManager.d.ts +163 -0
- package/dist/esm/input/InteractionManager.js +575 -0
- package/dist/esm/input/InteractionManager.js.map +1 -0
- package/dist/esm/input/JoyConLeftGamepadMapping.d.ts +9 -0
- package/dist/esm/input/JoyConLeftGamepadMapping.js +9 -0
- package/dist/esm/input/JoyConLeftGamepadMapping.js.map +1 -1
- package/dist/esm/input/JoyConRightGamepadMapping.d.ts +9 -0
- package/dist/esm/input/JoyConRightGamepadMapping.js +9 -0
- package/dist/esm/input/JoyConRightGamepadMapping.js.map +1 -1
- package/dist/esm/input/PlayStationGamepadMapping.d.ts +8 -0
- package/dist/esm/input/PlayStationGamepadMapping.js +8 -0
- package/dist/esm/input/PlayStationGamepadMapping.js.map +1 -1
- package/dist/esm/input/Pointer.d.ts +22 -0
- package/dist/esm/input/Pointer.js +22 -0
- package/dist/esm/input/Pointer.js.map +1 -1
- package/dist/esm/input/SteamControllerGamepadMapping.d.ts +8 -0
- package/dist/esm/input/SteamControllerGamepadMapping.js +8 -0
- package/dist/esm/input/SteamControllerGamepadMapping.js.map +1 -1
- package/dist/esm/input/SwitchProGamepadMapping.d.ts +9 -0
- package/dist/esm/input/SwitchProGamepadMapping.js +9 -0
- package/dist/esm/input/SwitchProGamepadMapping.js.map +1 -1
- package/dist/esm/input/XboxGamepadMapping.d.ts +8 -0
- package/dist/esm/input/XboxGamepadMapping.js +8 -0
- package/dist/esm/input/XboxGamepadMapping.js.map +1 -1
- package/dist/esm/input/index.d.ts +2 -0
- package/dist/esm/input/interaction-hooks.d.ts +34 -0
- package/dist/esm/input/interaction-hooks.js +35 -0
- package/dist/esm/input/interaction-hooks.js.map +1 -0
- package/dist/esm/input/types.d.ts +20 -0
- package/dist/esm/input/types.js +20 -0
- package/dist/esm/input/types.js.map +1 -1
- package/dist/esm/math/AbstractVector.d.ts +83 -0
- package/dist/esm/math/AbstractVector.js +83 -0
- package/dist/esm/math/AbstractVector.js.map +1 -1
- package/dist/esm/math/Circle.d.ts +44 -2
- package/dist/esm/math/Circle.js +116 -16
- package/dist/esm/math/Circle.js.map +1 -1
- package/dist/esm/math/CircleLike.d.ts +1 -0
- package/dist/esm/math/Collision.d.ts +39 -0
- package/dist/esm/math/Collision.js +5 -0
- package/dist/esm/math/Collision.js.map +1 -1
- package/dist/esm/math/Ellipse.d.ts +11 -0
- package/dist/esm/math/Ellipse.js +18 -2
- package/dist/esm/math/Ellipse.js.map +1 -1
- package/dist/esm/math/EllipseLike.d.ts +3 -0
- package/dist/esm/math/Flags.d.ts +31 -0
- package/dist/esm/math/Flags.js +31 -0
- package/dist/esm/math/Flags.js.map +1 -1
- package/dist/esm/math/Interval.d.ts +15 -0
- package/dist/esm/math/Interval.js +16 -1
- package/dist/esm/math/Interval.js.map +1 -1
- package/dist/esm/math/Line.d.ts +17 -1
- package/dist/esm/math/Line.js +17 -1
- package/dist/esm/math/Line.js.map +1 -1
- package/dist/esm/math/LineLike.d.ts +1 -0
- package/dist/esm/math/Matrix.d.ts +44 -3
- package/dist/esm/math/Matrix.js +44 -3
- package/dist/esm/math/Matrix.js.map +1 -1
- package/dist/esm/math/ObservableSize.d.ts +7 -0
- package/dist/esm/math/ObservableSize.js +7 -0
- package/dist/esm/math/ObservableSize.js.map +1 -1
- package/dist/esm/math/ObservableVector.d.ts +11 -2
- package/dist/esm/math/ObservableVector.js +13 -2
- package/dist/esm/math/ObservableVector.js.map +1 -1
- package/dist/esm/math/PointLike.d.ts +1 -0
- package/dist/esm/math/PolarVector.d.ts +15 -0
- package/dist/esm/math/PolarVector.js +16 -1
- package/dist/esm/math/PolarVector.js.map +1 -1
- package/dist/esm/math/Polygon.d.ts +35 -1
- package/dist/esm/math/Polygon.js +78 -6
- package/dist/esm/math/Polygon.js.map +1 -1
- package/dist/esm/math/PolygonLike.d.ts +4 -0
- package/dist/esm/math/Quadtree.d.ts +84 -0
- package/dist/esm/math/Quadtree.js +204 -0
- package/dist/esm/math/Quadtree.js.map +1 -0
- package/dist/esm/math/Random.d.ts +25 -0
- package/dist/esm/math/Random.js +26 -1
- package/dist/esm/math/Random.js.map +1 -1
- package/dist/esm/math/Rectangle.d.ts +15 -0
- package/dist/esm/math/Rectangle.js +17 -2
- package/dist/esm/math/Rectangle.js.map +1 -1
- package/dist/esm/math/RectangleLike.d.ts +1 -0
- package/dist/esm/math/Segment.d.ts +7 -0
- package/dist/esm/math/Segment.js +7 -0
- package/dist/esm/math/Segment.js.map +1 -1
- package/dist/esm/math/ShapeLike.d.ts +6 -0
- package/dist/esm/math/Size.d.ts +9 -0
- package/dist/esm/math/Size.js +10 -1
- package/dist/esm/math/Size.js.map +1 -1
- package/dist/esm/math/Vector.d.ts +16 -0
- package/dist/esm/math/Vector.js +17 -1
- package/dist/esm/math/Vector.js.map +1 -1
- package/dist/esm/math/collision-detection.d.ts +47 -1
- package/dist/esm/math/collision-detection.js +231 -17
- package/dist/esm/math/collision-detection.js.map +1 -1
- package/dist/esm/math/collision-primitives.d.ts +23 -0
- package/dist/esm/math/collision-primitives.js +23 -0
- package/dist/esm/math/collision-primitives.js.map +1 -1
- package/dist/esm/math/geometry.d.ts +42 -0
- package/dist/esm/math/geometry.js +37 -0
- package/dist/esm/math/geometry.js.map +1 -1
- package/dist/esm/math/index.d.ts +1 -0
- package/dist/esm/math/utils.d.ts +41 -0
- package/dist/esm/math/utils.js +41 -0
- package/dist/esm/math/utils.js.map +1 -1
- package/dist/esm/particles/Particle.d.ts +37 -0
- package/dist/esm/particles/Particle.js +37 -0
- package/dist/esm/particles/Particle.js.map +1 -1
- package/dist/esm/particles/ParticleProperties.d.ts +15 -0
- package/dist/esm/particles/ParticleSystem.d.ts +69 -0
- package/dist/esm/particles/ParticleSystem.js +70 -0
- package/dist/esm/particles/ParticleSystem.js.map +1 -1
- package/dist/esm/particles/affectors/ColorAffector.d.ts +13 -0
- package/dist/esm/particles/affectors/ColorAffector.js +13 -0
- package/dist/esm/particles/affectors/ColorAffector.js.map +1 -1
- package/dist/esm/particles/affectors/ForceAffector.d.ts +11 -0
- package/dist/esm/particles/affectors/ForceAffector.js +11 -0
- package/dist/esm/particles/affectors/ForceAffector.js.map +1 -1
- package/dist/esm/particles/affectors/ParticleAffector.d.ts +13 -0
- package/dist/esm/particles/affectors/ScaleAffector.d.ts +10 -0
- package/dist/esm/particles/affectors/ScaleAffector.js +10 -0
- package/dist/esm/particles/affectors/ScaleAffector.js.map +1 -1
- package/dist/esm/particles/affectors/TorqueAffector.d.ts +11 -0
- package/dist/esm/particles/affectors/TorqueAffector.js +12 -1
- package/dist/esm/particles/affectors/TorqueAffector.js.map +1 -1
- package/dist/esm/particles/emitters/ParticleEmitter.d.ts +13 -0
- package/dist/esm/particles/emitters/ParticleOptions.d.ts +16 -0
- package/dist/esm/particles/emitters/ParticleOptions.js +16 -0
- package/dist/esm/particles/emitters/ParticleOptions.js.map +1 -1
- package/dist/esm/particles/emitters/UniversalEmitter.d.ts +23 -0
- package/dist/esm/particles/emitters/UniversalEmitter.js +23 -0
- package/dist/esm/particles/emitters/UniversalEmitter.js.map +1 -1
- package/dist/esm/rendering/CallbackRenderPass.d.ts +12 -0
- package/dist/esm/rendering/CallbackRenderPass.js +12 -0
- package/dist/esm/rendering/CallbackRenderPass.js.map +1 -1
- package/dist/esm/rendering/Container.d.ts +44 -0
- package/dist/esm/rendering/Container.js +62 -0
- package/dist/esm/rendering/Container.js.map +1 -1
- package/dist/esm/rendering/Drawable.d.ts +22 -0
- package/dist/esm/rendering/Drawable.js +22 -0
- package/dist/esm/rendering/Drawable.js.map +1 -1
- package/dist/esm/rendering/RenderBackend.d.ts +13 -0
- package/dist/esm/rendering/RenderBackendType.d.ts +4 -0
- package/dist/esm/rendering/RenderBackendType.js +4 -0
- package/dist/esm/rendering/RenderBackendType.js.map +1 -1
- package/dist/esm/rendering/RenderNode.d.ts +45 -0
- package/dist/esm/rendering/RenderNode.js +62 -0
- package/dist/esm/rendering/RenderNode.js.map +1 -1
- package/dist/esm/rendering/RenderPass.d.ts +8 -0
- package/dist/esm/rendering/RenderStats.d.ts +19 -0
- package/dist/esm/rendering/RenderStats.js +7 -0
- package/dist/esm/rendering/RenderStats.js.map +1 -1
- package/dist/esm/rendering/RenderTarget.d.ts +17 -0
- package/dist/esm/rendering/RenderTarget.js +17 -0
- package/dist/esm/rendering/RenderTarget.js.map +1 -1
- package/dist/esm/rendering/RenderTargetPass.d.ts +11 -0
- package/dist/esm/rendering/RenderTargetPass.js +7 -0
- package/dist/esm/rendering/RenderTargetPass.js.map +1 -1
- package/dist/esm/rendering/Renderer.d.ts +15 -0
- package/dist/esm/rendering/RendererRegistry.d.ts +7 -0
- package/dist/esm/rendering/RendererRegistry.js +7 -0
- package/dist/esm/rendering/RendererRegistry.js.map +1 -1
- package/dist/esm/rendering/View.d.ts +73 -6
- package/dist/esm/rendering/View.js +69 -2
- package/dist/esm/rendering/View.js.map +1 -1
- package/dist/esm/rendering/filters/BlurFilter.d.ts +9 -0
- package/dist/esm/rendering/filters/BlurFilter.js +8 -0
- package/dist/esm/rendering/filters/BlurFilter.js.map +1 -1
- package/dist/esm/rendering/filters/ColorFilter.d.ts +7 -0
- package/dist/esm/rendering/filters/ColorFilter.js +7 -0
- package/dist/esm/rendering/filters/ColorFilter.js.map +1 -1
- package/dist/esm/rendering/filters/Filter.d.ts +23 -0
- package/dist/esm/rendering/filters/Filter.js +20 -0
- package/dist/esm/rendering/filters/Filter.js.map +1 -1
- package/dist/esm/rendering/filters/WebGl2ShaderFilter.d.ts +114 -0
- package/dist/esm/rendering/filters/WebGl2ShaderFilter.js +273 -0
- package/dist/esm/rendering/filters/WebGl2ShaderFilter.js.map +1 -0
- package/dist/esm/rendering/filters/WebGpuShaderFilter.d.ts +116 -0
- package/dist/esm/rendering/filters/WebGpuShaderFilter.js +402 -0
- package/dist/esm/rendering/filters/WebGpuShaderFilter.js.map +1 -0
- package/dist/esm/rendering/index.d.ts +3 -0
- package/dist/esm/rendering/mesh/Mesh.d.ts +2 -0
- package/dist/esm/rendering/mesh/Mesh.js +3 -0
- package/dist/esm/rendering/mesh/Mesh.js.map +1 -1
- package/dist/esm/rendering/primitives/Graphics.d.ts +34 -0
- package/dist/esm/rendering/primitives/Graphics.js +34 -0
- package/dist/esm/rendering/primitives/Graphics.js.map +1 -1
- package/dist/esm/rendering/shader/Shader.d.ts +36 -0
- package/dist/esm/rendering/shader/Shader.js +26 -0
- package/dist/esm/rendering/shader/Shader.js.map +1 -1
- package/dist/esm/rendering/shader/ShaderAttribute.d.ts +13 -0
- package/dist/esm/rendering/shader/ShaderAttribute.js +13 -0
- package/dist/esm/rendering/shader/ShaderAttribute.js.map +1 -1
- package/dist/esm/rendering/shader/ShaderUniform.d.ts +27 -0
- package/dist/esm/rendering/shader/ShaderUniform.js +28 -1
- package/dist/esm/rendering/shader/ShaderUniform.js.map +1 -1
- package/dist/esm/rendering/shader/upgradeFragmentShaderToGl300.d.ts +34 -0
- package/dist/esm/rendering/shader/upgradeFragmentShaderToGl300.js +60 -0
- package/dist/esm/rendering/shader/upgradeFragmentShaderToGl300.js.map +1 -0
- package/dist/esm/rendering/sprite/AnimatedSprite.d.ts +38 -0
- package/dist/esm/rendering/sprite/AnimatedSprite.js +36 -0
- package/dist/esm/rendering/sprite/AnimatedSprite.js.map +1 -1
- package/dist/esm/rendering/sprite/Sprite.d.ts +62 -1
- package/dist/esm/rendering/sprite/Sprite.js +97 -19
- package/dist/esm/rendering/sprite/Sprite.js.map +1 -1
- package/dist/esm/rendering/sprite/Spritesheet.d.ts +25 -0
- package/dist/esm/rendering/sprite/Spritesheet.js +20 -0
- package/dist/esm/rendering/sprite/Spritesheet.js.map +1 -1
- package/dist/esm/rendering/text/Text.d.ts +2 -0
- package/dist/esm/rendering/text/Text.js +2 -0
- package/dist/esm/rendering/text/Text.js.map +1 -1
- package/dist/esm/rendering/text/TextStyle.d.ts +29 -0
- package/dist/esm/rendering/text/TextStyle.js +24 -0
- package/dist/esm/rendering/text/TextStyle.js.map +1 -1
- package/dist/esm/rendering/text/types.d.ts +1 -0
- package/dist/esm/rendering/texture/RenderTexture.d.ts +16 -0
- package/dist/esm/rendering/texture/RenderTexture.js +16 -0
- package/dist/esm/rendering/texture/RenderTexture.js.map +1 -1
- package/dist/esm/rendering/texture/Sampler.d.ts +23 -0
- package/dist/esm/rendering/texture/Sampler.js +13 -0
- package/dist/esm/rendering/texture/Sampler.js.map +1 -1
- package/dist/esm/rendering/texture/Texture.d.ts +30 -0
- package/dist/esm/rendering/texture/Texture.js +30 -0
- package/dist/esm/rendering/texture/Texture.js.map +1 -1
- package/dist/esm/rendering/types.d.ts +29 -0
- package/dist/esm/rendering/types.js +29 -0
- package/dist/esm/rendering/types.js.map +1 -1
- package/dist/esm/rendering/utils.d.ts +20 -0
- package/dist/esm/rendering/utils.js +10 -0
- package/dist/esm/rendering/utils.js.map +1 -1
- package/dist/esm/rendering/video/Video.d.ts +39 -1
- package/dist/esm/rendering/video/Video.js +68 -6
- package/dist/esm/rendering/video/Video.js.map +1 -1
- package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.d.ts +7 -0
- package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.js +7 -0
- package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts +17 -4
- package/dist/esm/rendering/webgl2/WebGl2Backend.js +20 -16
- package/dist/esm/rendering/webgl2/WebGl2Backend.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.d.ts +8 -0
- package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.js +8 -0
- package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts +45 -8
- package/dist/esm/rendering/webgpu/WebGpuBackend.js +160 -40
- package/dist/esm/rendering/webgpu/WebGpuBackend.js.map +1 -1
- package/dist/esm/resources/AbstractAssetFactory.d.ts +20 -0
- package/dist/esm/resources/AbstractAssetFactory.js +20 -0
- package/dist/esm/resources/AbstractAssetFactory.js.map +1 -1
- package/dist/esm/resources/AssetFactory.d.ts +26 -0
- package/dist/esm/resources/AssetManifest.d.ts +45 -0
- package/dist/esm/resources/AssetManifest.js +25 -0
- package/dist/esm/resources/AssetManifest.js.map +1 -1
- package/dist/esm/resources/CacheFirstStrategy.d.ts +12 -0
- package/dist/esm/resources/CacheFirstStrategy.js +12 -0
- package/dist/esm/resources/CacheFirstStrategy.js.map +1 -1
- package/dist/esm/resources/CacheStore.d.ts +23 -0
- package/dist/esm/resources/CacheStrategy.d.ts +20 -0
- package/dist/esm/resources/Database.d.ts +45 -0
- package/dist/esm/resources/FactoryRegistry.d.ts +28 -0
- package/dist/esm/resources/FactoryRegistry.js +24 -0
- package/dist/esm/resources/FactoryRegistry.js.map +1 -1
- package/dist/esm/resources/IndexedDbDatabase.d.ts +22 -1
- package/dist/esm/resources/IndexedDbDatabase.js +21 -0
- package/dist/esm/resources/IndexedDbDatabase.js.map +1 -1
- package/dist/esm/resources/IndexedDbStore.d.ts +20 -0
- package/dist/esm/resources/IndexedDbStore.js +12 -0
- package/dist/esm/resources/IndexedDbStore.js.map +1 -1
- package/dist/esm/resources/Loader.d.ts +167 -0
- package/dist/esm/resources/Loader.js +110 -0
- package/dist/esm/resources/Loader.js.map +1 -1
- package/dist/esm/resources/NetworkOnlyStrategy.d.ts +8 -0
- package/dist/esm/resources/NetworkOnlyStrategy.js +8 -0
- package/dist/esm/resources/NetworkOnlyStrategy.js.map +1 -1
- package/dist/esm/resources/factories/BinaryFactory.d.ts +13 -0
- package/dist/esm/resources/factories/BinaryFactory.js +13 -0
- package/dist/esm/resources/factories/BinaryFactory.js.map +1 -1
- package/dist/esm/resources/factories/FontFactory.d.ts +37 -0
- package/dist/esm/resources/factories/FontFactory.js +26 -0
- package/dist/esm/resources/factories/FontFactory.js.map +1 -1
- package/dist/esm/resources/factories/ImageFactory.d.ts +24 -0
- package/dist/esm/resources/factories/ImageFactory.js +19 -0
- package/dist/esm/resources/factories/ImageFactory.js.map +1 -1
- package/dist/esm/resources/factories/JsonFactory.d.ts +13 -0
- package/dist/esm/resources/factories/JsonFactory.js +13 -0
- package/dist/esm/resources/factories/JsonFactory.js.map +1 -1
- package/dist/esm/resources/factories/MusicFactory.d.ts +36 -0
- package/dist/esm/resources/factories/MusicFactory.js +44 -4
- package/dist/esm/resources/factories/MusicFactory.js.map +1 -1
- package/dist/esm/resources/factories/SoundFactory.d.ts +29 -0
- package/dist/esm/resources/factories/SoundFactory.js +18 -0
- package/dist/esm/resources/factories/SoundFactory.js.map +1 -1
- package/dist/esm/resources/factories/SvgFactory.d.ts +19 -0
- package/dist/esm/resources/factories/SvgFactory.js +19 -0
- package/dist/esm/resources/factories/SvgFactory.js.map +1 -1
- package/dist/esm/resources/factories/TextFactory.d.ts +11 -0
- package/dist/esm/resources/factories/TextFactory.js +11 -0
- package/dist/esm/resources/factories/TextFactory.js.map +1 -1
- package/dist/esm/resources/factories/TextureFactory.d.ts +25 -0
- package/dist/esm/resources/factories/TextureFactory.js +20 -0
- package/dist/esm/resources/factories/TextureFactory.js.map +1 -1
- package/dist/esm/resources/factories/VideoFactory.d.ts +37 -0
- package/dist/esm/resources/factories/VideoFactory.js +48 -5
- package/dist/esm/resources/factories/VideoFactory.js.map +1 -1
- package/dist/esm/resources/factories/VttFactory.d.ts +18 -0
- package/dist/esm/resources/factories/VttFactory.js +24 -0
- package/dist/esm/resources/factories/VttFactory.js.map +1 -1
- package/dist/esm/resources/factories/WasmFactory.d.ts +16 -0
- package/dist/esm/resources/factories/WasmFactory.js +16 -0
- package/dist/esm/resources/factories/WasmFactory.js.map +1 -1
- package/dist/esm/resources/utils.d.ts +10 -0
- package/dist/esm/resources/utils.js +10 -0
- package/dist/esm/resources/utils.js.map +1 -1
- package/dist/exo.esm.js +11182 -2538
- package/dist/exo.esm.js.map +1 -1
- package/package.json +20 -9
- package/dist/esm/core/Quadtree.d.ts +0 -20
- package/dist/esm/core/Quadtree.js +0 -86
- package/dist/esm/core/Quadtree.js.map +0 -1
|
@@ -0,0 +1,402 @@
|
|
|
1
|
+
import { Color } from '../../core/Color.js';
|
|
2
|
+
import { RenderBackendType } from '../RenderBackendType.js';
|
|
3
|
+
import { RenderTargetPass } from '../RenderTargetPass.js';
|
|
4
|
+
import { Texture } from '../texture/Texture.js';
|
|
5
|
+
import { Filter } from './Filter.js';
|
|
6
|
+
|
|
7
|
+
/// <reference types="@webgpu/types" />
|
|
8
|
+
/**
|
|
9
|
+
* Default fullscreen-quad vertex shader (WGSL). Positions are already in
|
|
10
|
+
* clip space (-1..1), so no projection matrix is needed.
|
|
11
|
+
*/
|
|
12
|
+
const defaultVertexSource = `
|
|
13
|
+
struct VsOut {
|
|
14
|
+
@builtin(position) position: vec4<f32>,
|
|
15
|
+
@location(0) vUv: vec2<f32>,
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
@vertex
|
|
19
|
+
fn main(@location(0) aPosition: vec2<f32>, @location(1) aUv: vec2<f32>) -> VsOut {
|
|
20
|
+
var out: VsOut;
|
|
21
|
+
out.position = vec4<f32>(aPosition, 0.0, 1.0);
|
|
22
|
+
out.vUv = aUv;
|
|
23
|
+
return out;
|
|
24
|
+
}
|
|
25
|
+
`;
|
|
26
|
+
/**
|
|
27
|
+
* Interleaved position+UV data for a fullscreen TRIANGLE_STRIP quad.
|
|
28
|
+
* Layout per vertex: [posX, posY, uvX, uvY]
|
|
29
|
+
*
|
|
30
|
+
* Vertices (clip-space positions, 0..1 UVs):
|
|
31
|
+
* 0: bottom-left (-1, -1, 0, 0)
|
|
32
|
+
* 1: bottom-right ( 1, -1, 1, 0)
|
|
33
|
+
* 2: top-left (-1, 1, 0, 1)
|
|
34
|
+
* 3: top-right ( 1, 1, 1, 1)
|
|
35
|
+
*/
|
|
36
|
+
const quadVertexData = new Float32Array([
|
|
37
|
+
-1, -1, 0, 0,
|
|
38
|
+
1, -1, 1, 0,
|
|
39
|
+
-1, 1, 0, 1,
|
|
40
|
+
1, 1, 1, 1,
|
|
41
|
+
]);
|
|
42
|
+
/** Bytes per vertex: 2 floats position + 2 floats UV = 16 bytes */
|
|
43
|
+
const vertexStrideBytes = 16;
|
|
44
|
+
/** Resolution uniform buffer size: vec2<f32> = 8 bytes, padded to 16 */
|
|
45
|
+
const resolutionBufferBytes = 16;
|
|
46
|
+
/** Returns true when the value is a texture (goes into a bind group, not a UBO). */
|
|
47
|
+
function isTextureValue(value) {
|
|
48
|
+
return value instanceof Texture
|
|
49
|
+
|| (typeof value === 'object' && value !== null && 'width' in value && 'height' in value && !(value instanceof Float32Array) && !(value instanceof Int32Array) && !Array.isArray(value));
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* A high-level {@link Filter} subclass that renders the input texture through
|
|
53
|
+
* a user-provided WGSL fragment shader on the **WebGPU** backend.
|
|
54
|
+
*
|
|
55
|
+
* For the WebGL2 backend use {@link WebGl2ShaderFilter}.
|
|
56
|
+
*
|
|
57
|
+
* ## Usage
|
|
58
|
+
*
|
|
59
|
+
* ```ts
|
|
60
|
+
* const filter = new WebGpuShaderFilter({
|
|
61
|
+
* fragmentSource: `
|
|
62
|
+
* @group(0) @binding(0) var<uniform> uResolution: vec2<f32>;
|
|
63
|
+
* @group(0) @binding(1) var uTexture: texture_2d<f32>;
|
|
64
|
+
* @group(0) @binding(2) var uSampler: sampler;
|
|
65
|
+
*
|
|
66
|
+
* @fragment
|
|
67
|
+
* fn main(@location(0) vUv: vec2<f32>) -> @location(0) vec4<f32> {
|
|
68
|
+
* return textureSample(uTexture, uSampler, vUv);
|
|
69
|
+
* }
|
|
70
|
+
* `,
|
|
71
|
+
* uniforms: { uTime: 0.0 },
|
|
72
|
+
* });
|
|
73
|
+
*
|
|
74
|
+
* // Update uniforms each frame:
|
|
75
|
+
* filter.uniforms.uTime = performance.now() / 1000;
|
|
76
|
+
* sprite.filters = [filter];
|
|
77
|
+
* ```
|
|
78
|
+
*
|
|
79
|
+
* ## Auto-bound uniforms (group 0)
|
|
80
|
+
*
|
|
81
|
+
* - `@binding(0)` — `var<uniform> uResolution: vec2<f32>` (output dimensions)
|
|
82
|
+
* - `@binding(1)` — `var uTexture: texture_2d<f32>` (filter input)
|
|
83
|
+
* - `@binding(2)` — `var uSampler: sampler`
|
|
84
|
+
*
|
|
85
|
+
* ## User uniforms (group 1)
|
|
86
|
+
*
|
|
87
|
+
* All non-texture user uniforms are packed into a single uniform buffer at
|
|
88
|
+
* `@binding(0)`. Each member occupies a 16-byte aligned slot (conservative
|
|
89
|
+
* alignment). Declare your WGSL struct to match this layout.
|
|
90
|
+
*
|
|
91
|
+
* Texture/RenderTexture uniforms are bound as separate entries starting at
|
|
92
|
+
* `@binding(1)` (texture) and `@binding(N+1)` (sampler), in declaration order.
|
|
93
|
+
*/
|
|
94
|
+
class WebGpuShaderFilter extends Filter {
|
|
95
|
+
/**
|
|
96
|
+
* Mutable map of uniform values. Set values via property assignment;
|
|
97
|
+
* they are flushed to the GPU before each apply().
|
|
98
|
+
*
|
|
99
|
+
* filter.uniforms.uTime = 1.234;
|
|
100
|
+
* filter.uniforms.uColor = [1, 0.5, 0, 1]; // vec4
|
|
101
|
+
*/
|
|
102
|
+
uniforms;
|
|
103
|
+
_fragmentSource;
|
|
104
|
+
_vertexSource;
|
|
105
|
+
_connection = null;
|
|
106
|
+
constructor(options) {
|
|
107
|
+
super();
|
|
108
|
+
if (!options.fragmentSource) {
|
|
109
|
+
throw new Error('WebGpuShaderFilter requires fragmentSource.');
|
|
110
|
+
}
|
|
111
|
+
this._fragmentSource = options.fragmentSource;
|
|
112
|
+
this._vertexSource = options.vertexSource ?? defaultVertexSource;
|
|
113
|
+
this.uniforms = { ...(options.uniforms ?? {}) };
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Execute the WGSL shader pass: flush uniforms, build bind groups, and
|
|
117
|
+
* render the input texture into `output`. Throws if the active backend is
|
|
118
|
+
* not WebGPU — use {@link WebGl2ShaderFilter} on WebGL2.
|
|
119
|
+
*/
|
|
120
|
+
apply(backend, input, output) {
|
|
121
|
+
if (backend.backendType !== RenderBackendType.WebGpu) {
|
|
122
|
+
throw new Error('WebGpuShaderFilter requires the WebGPU backend. Use WebGl2ShaderFilter on WebGL2.');
|
|
123
|
+
}
|
|
124
|
+
const gpuBackend = backend;
|
|
125
|
+
this._ensureConnected(gpuBackend, output);
|
|
126
|
+
const conn = this._connection;
|
|
127
|
+
backend.execute(new RenderTargetPass((b) => {
|
|
128
|
+
const gpu = b;
|
|
129
|
+
const device = conn.device;
|
|
130
|
+
// ---- Update auto-bound resolution uniform ----
|
|
131
|
+
const resData = new Float32Array([output.width, output.height, 0, 0]);
|
|
132
|
+
device.queue.writeBuffer(conn.resolutionBuffer, 0, resData);
|
|
133
|
+
// ---- Build auto-bind group (group 0) ----
|
|
134
|
+
const inputBinding = gpu.getTextureBinding(input);
|
|
135
|
+
const autoBindGroup = device.createBindGroup({
|
|
136
|
+
layout: conn.autoBindGroupLayout,
|
|
137
|
+
entries: [
|
|
138
|
+
{ binding: 0, resource: { buffer: conn.resolutionBuffer } },
|
|
139
|
+
{ binding: 1, resource: inputBinding.view },
|
|
140
|
+
{ binding: 2, resource: conn.sampler },
|
|
141
|
+
],
|
|
142
|
+
});
|
|
143
|
+
// ---- Build user bind group (group 1) ----
|
|
144
|
+
const userBindGroup = this._buildUserBindGroup(gpu, conn);
|
|
145
|
+
// ---- Encode render pass ----
|
|
146
|
+
const device2 = gpu.device;
|
|
147
|
+
const encoder = device2.createCommandEncoder();
|
|
148
|
+
const pass = encoder.beginRenderPass({
|
|
149
|
+
colorAttachments: [gpu.createColorAttachment()],
|
|
150
|
+
});
|
|
151
|
+
gpu.stats.renderPasses++;
|
|
152
|
+
pass.setPipeline(conn.pipeline);
|
|
153
|
+
pass.setVertexBuffer(0, conn.vertexBuffer);
|
|
154
|
+
pass.setBindGroup(0, autoBindGroup);
|
|
155
|
+
pass.setBindGroup(1, userBindGroup);
|
|
156
|
+
pass.draw(4);
|
|
157
|
+
gpu.stats.drawCalls++;
|
|
158
|
+
pass.end();
|
|
159
|
+
gpu.submit(encoder.finish());
|
|
160
|
+
}, {
|
|
161
|
+
target: output,
|
|
162
|
+
view: output.view,
|
|
163
|
+
clearColor: Color.transparentBlack,
|
|
164
|
+
}));
|
|
165
|
+
}
|
|
166
|
+
destroy() {
|
|
167
|
+
if (this._connection !== null) {
|
|
168
|
+
this._connection.vertexBuffer.destroy();
|
|
169
|
+
this._connection.resolutionBuffer.destroy();
|
|
170
|
+
this._connection.userUniformBuffer?.destroy();
|
|
171
|
+
this._connection = null;
|
|
172
|
+
}
|
|
173
|
+
for (const key of Object.keys(this.uniforms)) {
|
|
174
|
+
delete this.uniforms[key];
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// ---------------------------------------------------------------------------
|
|
178
|
+
// Private helpers
|
|
179
|
+
// ---------------------------------------------------------------------------
|
|
180
|
+
_ensureConnected(backend, output) {
|
|
181
|
+
if (this._connection !== null) {
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
const device = backend.device;
|
|
185
|
+
// Shader modules
|
|
186
|
+
const vsModule = device.createShaderModule({ code: this._vertexSource });
|
|
187
|
+
const fsModule = device.createShaderModule({ code: this._fragmentSource });
|
|
188
|
+
// ---- Group 0 layout: resolution uniform + input texture + sampler ----
|
|
189
|
+
const autoBindGroupLayout = device.createBindGroupLayout({
|
|
190
|
+
entries: [
|
|
191
|
+
{
|
|
192
|
+
binding: 0,
|
|
193
|
+
visibility: GPUShaderStage.FRAGMENT | GPUShaderStage.VERTEX,
|
|
194
|
+
buffer: { type: 'uniform' },
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
binding: 1,
|
|
198
|
+
visibility: GPUShaderStage.FRAGMENT,
|
|
199
|
+
texture: {},
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
binding: 2,
|
|
203
|
+
visibility: GPUShaderStage.FRAGMENT,
|
|
204
|
+
sampler: {},
|
|
205
|
+
},
|
|
206
|
+
],
|
|
207
|
+
});
|
|
208
|
+
// ---- Group 1 layout: user UBO + optional texture/sampler pairs ----
|
|
209
|
+
const userBindGroupLayout = this._buildUserBindGroupLayout(device);
|
|
210
|
+
// ---- Pipeline layout ----
|
|
211
|
+
const pipelineLayout = device.createPipelineLayout({
|
|
212
|
+
bindGroupLayouts: [autoBindGroupLayout, userBindGroupLayout],
|
|
213
|
+
});
|
|
214
|
+
// ---- Render pipeline ----
|
|
215
|
+
const targetFormat = backend.renderTargetFormat;
|
|
216
|
+
const pipeline = device.createRenderPipeline({
|
|
217
|
+
layout: pipelineLayout,
|
|
218
|
+
vertex: {
|
|
219
|
+
module: vsModule,
|
|
220
|
+
entryPoint: 'main',
|
|
221
|
+
buffers: [
|
|
222
|
+
{
|
|
223
|
+
arrayStride: vertexStrideBytes,
|
|
224
|
+
attributes: [
|
|
225
|
+
{ shaderLocation: 0, offset: 0, format: 'float32x2' },
|
|
226
|
+
{ shaderLocation: 1, offset: 8, format: 'float32x2' },
|
|
227
|
+
],
|
|
228
|
+
},
|
|
229
|
+
],
|
|
230
|
+
},
|
|
231
|
+
fragment: {
|
|
232
|
+
module: fsModule,
|
|
233
|
+
entryPoint: 'main',
|
|
234
|
+
targets: [{ format: targetFormat }],
|
|
235
|
+
},
|
|
236
|
+
primitive: { topology: 'triangle-strip' },
|
|
237
|
+
});
|
|
238
|
+
// ---- Vertex buffer (fullscreen quad, static) ----
|
|
239
|
+
const vertexBuffer = device.createBuffer({
|
|
240
|
+
size: quadVertexData.byteLength,
|
|
241
|
+
usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
|
|
242
|
+
});
|
|
243
|
+
device.queue.writeBuffer(vertexBuffer, 0, quadVertexData);
|
|
244
|
+
// ---- Resolution uniform buffer ----
|
|
245
|
+
const resolutionBuffer = device.createBuffer({
|
|
246
|
+
size: resolutionBufferBytes,
|
|
247
|
+
usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
|
|
248
|
+
});
|
|
249
|
+
// ---- Sampler ----
|
|
250
|
+
const sampler = device.createSampler({
|
|
251
|
+
magFilter: 'linear',
|
|
252
|
+
minFilter: 'linear',
|
|
253
|
+
addressModeU: 'clamp-to-edge',
|
|
254
|
+
addressModeV: 'clamp-to-edge',
|
|
255
|
+
});
|
|
256
|
+
this._connection = {
|
|
257
|
+
device,
|
|
258
|
+
vertexBuffer,
|
|
259
|
+
resolutionBuffer,
|
|
260
|
+
autoBindGroupLayout,
|
|
261
|
+
userBindGroupLayout,
|
|
262
|
+
pipelineLayout,
|
|
263
|
+
pipeline,
|
|
264
|
+
sampler,
|
|
265
|
+
userUniformBuffer: null,
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Build the GPUBindGroupLayout for group 1 (user uniforms).
|
|
270
|
+
*
|
|
271
|
+
* Layout:
|
|
272
|
+
* binding 0 — uniform buffer (scalar/vector uniforms), if any scalar uniforms exist
|
|
273
|
+
* binding 1, 3, 5, ... — texture entries (one per texture uniform, in order)
|
|
274
|
+
* binding 2, 4, 6, ... — sampler entries (paired with textures)
|
|
275
|
+
*/
|
|
276
|
+
_buildUserBindGroupLayout(device) {
|
|
277
|
+
const entries = [];
|
|
278
|
+
const hasScalarUniforms = Object.values(this.uniforms).some((v) => !isTextureValue(v));
|
|
279
|
+
if (hasScalarUniforms) {
|
|
280
|
+
entries.push({
|
|
281
|
+
binding: 0,
|
|
282
|
+
visibility: GPUShaderStage.FRAGMENT,
|
|
283
|
+
buffer: { type: 'uniform' },
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
let bindingIndex = 1;
|
|
287
|
+
for (const value of Object.values(this.uniforms)) {
|
|
288
|
+
if (!isTextureValue(value)) {
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
291
|
+
// texture entry
|
|
292
|
+
entries.push({
|
|
293
|
+
binding: bindingIndex,
|
|
294
|
+
visibility: GPUShaderStage.FRAGMENT,
|
|
295
|
+
texture: {},
|
|
296
|
+
});
|
|
297
|
+
bindingIndex++;
|
|
298
|
+
// sampler entry
|
|
299
|
+
entries.push({
|
|
300
|
+
binding: bindingIndex,
|
|
301
|
+
visibility: GPUShaderStage.FRAGMENT,
|
|
302
|
+
sampler: {},
|
|
303
|
+
});
|
|
304
|
+
bindingIndex++;
|
|
305
|
+
}
|
|
306
|
+
// If no entries at all, add a dummy uniform buffer entry so the layout is valid
|
|
307
|
+
if (entries.length === 0) {
|
|
308
|
+
entries.push({
|
|
309
|
+
binding: 0,
|
|
310
|
+
visibility: GPUShaderStage.FRAGMENT,
|
|
311
|
+
buffer: { type: 'uniform' },
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
return device.createBindGroupLayout({ entries });
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Build and return the GPUBindGroup for group 1 on each frame.
|
|
318
|
+
* Marshals scalar uniforms into the user uniform buffer and assembles
|
|
319
|
+
* texture/sampler bind group entries.
|
|
320
|
+
*/
|
|
321
|
+
_buildUserBindGroup(backend, conn) {
|
|
322
|
+
const device = conn.device;
|
|
323
|
+
const entries = [];
|
|
324
|
+
// ---- Collect scalar uniforms and marshal into a UBO ----
|
|
325
|
+
const scalarEntries = Object.entries(this.uniforms).filter(([, v]) => !isTextureValue(v));
|
|
326
|
+
if (scalarEntries.length > 0) {
|
|
327
|
+
// Each uniform gets a 16-byte aligned slot (conservative WGSL alignment)
|
|
328
|
+
const bufferSize = scalarEntries.length * 16;
|
|
329
|
+
const data = new Float32Array(bufferSize / 4);
|
|
330
|
+
let slot = 0;
|
|
331
|
+
for (const [, value] of scalarEntries) {
|
|
332
|
+
const baseFloatIndex = slot * 4; // 16 bytes = 4 floats per slot
|
|
333
|
+
if (typeof value === 'number') {
|
|
334
|
+
data[baseFloatIndex] = value;
|
|
335
|
+
}
|
|
336
|
+
else if (value instanceof Float32Array) {
|
|
337
|
+
data.set(value, baseFloatIndex);
|
|
338
|
+
}
|
|
339
|
+
else if (value instanceof Int32Array) {
|
|
340
|
+
// Int32Array values — reinterpret as float (best-effort for V1)
|
|
341
|
+
for (let i = 0; i < value.length; i++) {
|
|
342
|
+
data[baseFloatIndex + i] = value[i];
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
else {
|
|
346
|
+
// Readonly tuple [a], [a,b], [a,b,c], [a,b,c,d]
|
|
347
|
+
const arr = value;
|
|
348
|
+
for (let i = 0; i < arr.length; i++) {
|
|
349
|
+
data[baseFloatIndex + i] = arr[i];
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
slot++;
|
|
353
|
+
}
|
|
354
|
+
// Reuse / create user uniform buffer
|
|
355
|
+
if (conn.userUniformBuffer === null || conn.userUniformBuffer.size < bufferSize) {
|
|
356
|
+
conn.userUniformBuffer?.destroy();
|
|
357
|
+
conn.userUniformBuffer = device.createBuffer({
|
|
358
|
+
size: bufferSize,
|
|
359
|
+
usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
device.queue.writeBuffer(conn.userUniformBuffer, 0, data);
|
|
363
|
+
entries.push({
|
|
364
|
+
binding: 0,
|
|
365
|
+
resource: { buffer: conn.userUniformBuffer },
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
else {
|
|
369
|
+
// No scalar uniforms — still need binding 0 to satisfy the layout.
|
|
370
|
+
// Create a minimal 16-byte dummy buffer if needed.
|
|
371
|
+
if (conn.userUniformBuffer === null) {
|
|
372
|
+
conn.userUniformBuffer = device.createBuffer({
|
|
373
|
+
size: 16,
|
|
374
|
+
usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
|
|
375
|
+
});
|
|
376
|
+
}
|
|
377
|
+
entries.push({
|
|
378
|
+
binding: 0,
|
|
379
|
+
resource: { buffer: conn.userUniformBuffer },
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
// ---- Texture/sampler entries ----
|
|
383
|
+
let bindingIndex = 1;
|
|
384
|
+
for (const [, value] of Object.entries(this.uniforms)) {
|
|
385
|
+
if (!isTextureValue(value)) {
|
|
386
|
+
continue;
|
|
387
|
+
}
|
|
388
|
+
const binding = backend.getTextureBinding(value);
|
|
389
|
+
entries.push({ binding: bindingIndex, resource: binding.view });
|
|
390
|
+
bindingIndex++;
|
|
391
|
+
entries.push({ binding: bindingIndex, resource: binding.sampler });
|
|
392
|
+
bindingIndex++;
|
|
393
|
+
}
|
|
394
|
+
return device.createBindGroup({
|
|
395
|
+
layout: conn.userBindGroupLayout,
|
|
396
|
+
entries,
|
|
397
|
+
});
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
export { WebGpuShaderFilter };
|
|
402
|
+
//# sourceMappingURL=WebGpuShaderFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebGpuShaderFilter.js","sources":["../../../../../src/rendering/filters/WebGpuShaderFilter.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ export * from './primitives/Graphics';
|
|
|
3
3
|
export * from './shader/Shader';
|
|
4
4
|
export * from './shader/ShaderAttribute';
|
|
5
5
|
export * from './shader/ShaderUniform';
|
|
6
|
+
export * from './shader/upgradeFragmentShaderToGl300';
|
|
6
7
|
export * from './sprite/Sprite';
|
|
7
8
|
export * from './sprite/Spritesheet';
|
|
8
9
|
export * from './sprite/AnimatedSprite';
|
|
@@ -51,3 +52,5 @@ export * from './View';
|
|
|
51
52
|
export * from './filters/Filter';
|
|
52
53
|
export * from './filters/BlurFilter';
|
|
53
54
|
export * from './filters/ColorFilter';
|
|
55
|
+
export * from './filters/WebGl2ShaderFilter';
|
|
56
|
+
export * from './filters/WebGpuShaderFilter';
|
|
@@ -56,7 +56,9 @@ export declare class Mesh extends Drawable {
|
|
|
56
56
|
readonly colors: Uint32Array | null;
|
|
57
57
|
private _texture;
|
|
58
58
|
constructor(options: MeshOptions);
|
|
59
|
+
/** Number of (x, y) vertex pairs in the mesh (i.e. `vertices.length / 2`). */
|
|
59
60
|
get vertexCount(): number;
|
|
61
|
+
/** Number of indices to draw: `indices.length` for indexed meshes, `vertexCount` otherwise. */
|
|
60
62
|
get indexCount(): number;
|
|
61
63
|
get texture(): Texture | RenderTexture | null;
|
|
62
64
|
set texture(texture: Texture | RenderTexture | null);
|
|
@@ -70,9 +70,11 @@ class Mesh extends Drawable {
|
|
|
70
70
|
this._texture = texture;
|
|
71
71
|
this.recomputeLocalBounds();
|
|
72
72
|
}
|
|
73
|
+
/** Number of (x, y) vertex pairs in the mesh (i.e. `vertices.length / 2`). */
|
|
73
74
|
get vertexCount() {
|
|
74
75
|
return this.vertices.length / 2;
|
|
75
76
|
}
|
|
77
|
+
/** Number of indices to draw: `indices.length` for indexed meshes, `vertexCount` otherwise. */
|
|
76
78
|
get indexCount() {
|
|
77
79
|
return this.indices?.length ?? this.vertexCount;
|
|
78
80
|
}
|
|
@@ -106,6 +108,7 @@ class Mesh extends Drawable {
|
|
|
106
108
|
maxY = y;
|
|
107
109
|
}
|
|
108
110
|
this.localBounds.set(minX, minY, maxX - minX, maxY - minY);
|
|
111
|
+
this._invalidateBoundsCascade();
|
|
109
112
|
return this;
|
|
110
113
|
}
|
|
111
114
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Mesh.js","sources":["../../../../../src/rendering/mesh/Mesh.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAyBA;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BG;AACG,MAAO,IAAK,SAAQ,QAAQ,CAAA;AAEd,IAAA,QAAQ;AACR,IAAA,OAAO;AACP,IAAA,GAAG;AACH,IAAA,MAAM;AAEd,IAAA,QAAQ;AAEhB,IAAA,WAAA,CAAmB,OAAoB,EAAA;AACnC,QAAA,KAAK,EAAE;QAEP,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,EAAE,GAAG,GAAG,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,GAAG,IAAI,EAAE,GAAG,OAAO;AAEvF,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE;YACpD,MAAM,IAAI,KAAK,CAAC,CAAA,wEAAA,EAA2E,QAAQ,CAAC,MAAM,CAAA,EAAA,CAAI,CAAC;QACnH;AAEA,QAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;AAEvC,QAAA,IAAI,WAAW,GAAG,CAAC,EAAE;AACjB,YAAA,MAAM,IAAI,KAAK,CAAC,0CAA0C,WAAW,CAAA,EAAA,CAAI,CAAC;QAC9E;AAEA,QAAA,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE;AAChD,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,gBAAA,EAAmB,GAAG,CAAC,MAAM,CAAA,4BAAA,EAA+B,QAAQ,CAAC,MAAM,CAAA,CAAA,CAAG,CAAC;QACnG;QAEA,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE;YAClD,MAAM,IAAI,KAAK,CAAC,CAAA,mBAAA,EAAsB,MAAM,CAAC,MAAM,CAAA,yBAAA,EAA4B,WAAW,CAAA,CAAA,CAAG,CAAC;QAClG;AAEA,QAAA,IAAI,OAAO,KAAK,IAAI,EAAE;AAClB,YAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE;gBAClD,MAAM,IAAI,KAAK,CAAC,CAAA,2DAAA,EAA8D,OAAO,CAAC,MAAM,CAAA,EAAA,CAAI,CAAC;YACrG;AAEA,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,gBAAA,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE;AAC3B,oBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,WAAA,EAAc,OAAO,CAAC,CAAC,CAAC,CAAA,aAAA,EAAgB,CAAC,CAAA,kCAAA,EAAqC,WAAW,CAAA,CAAA,CAAG,CAAC;gBACjH;YACJ;QACJ;AAAO,aAAA,IAAI,WAAW,GAAG,CAAC,KAAK,CAAC,EAAE;AAC9B,YAAA,MAAM,IAAI,KAAK,CAAC,yEAAyE,WAAW,CAAA,EAAA,CAAI,CAAC;QAC7G;AAEA,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;AACd,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;QAEvB,IAAI,CAAC,oBAAoB,EAAE;IAC/B
|
|
1
|
+
{"version":3,"file":"Mesh.js","sources":["../../../../../src/rendering/mesh/Mesh.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,19 @@ import { Container } from '@/rendering/Container';
|
|
|
3
3
|
import { Vector } from '@/math/Vector';
|
|
4
4
|
import { Mesh } from '@/rendering/mesh/Mesh';
|
|
5
5
|
import type { RenderNode } from '@/rendering/RenderNode';
|
|
6
|
+
/**
|
|
7
|
+
* Immediate-mode 2D shape API backed by {@link Mesh} children.
|
|
8
|
+
*
|
|
9
|
+
* Each draw call (e.g. `drawCircle`, `drawRectangle`, `drawLine`) appends a
|
|
10
|
+
* new {@link Mesh} child colored with the current `fillColor` or `lineColor`.
|
|
11
|
+
* The active `lineWidth` controls stroke thickness for path and outline draws.
|
|
12
|
+
* Path commands (`moveTo`, `lineTo`, `quadraticCurveTo`, etc.) track a cursor
|
|
13
|
+
* point and flush a Mesh on each segment.
|
|
14
|
+
*
|
|
15
|
+
* Call {@link clear} to remove all child meshes and reset pen state. Because
|
|
16
|
+
* each shape is a separate Mesh, `Graphics` inherits full filter, blend,
|
|
17
|
+
* tint, and mask support from {@link Container}.
|
|
18
|
+
*/
|
|
6
19
|
export declare class Graphics extends Container {
|
|
7
20
|
private _lineWidth;
|
|
8
21
|
private _lineColor;
|
|
@@ -18,19 +31,40 @@ export declare class Graphics extends Container {
|
|
|
18
31
|
getChildAt(index: number): Mesh;
|
|
19
32
|
addChild(child: RenderNode): this;
|
|
20
33
|
addChildAt(child: RenderNode, index: number): this;
|
|
34
|
+
/** Move the current pen position to (`x`, `y`) without drawing anything. */
|
|
21
35
|
moveTo(x: number, y: number): this;
|
|
36
|
+
/** Draw a stroked line segment from the current point to (`toX`, `toY`) and advance the pen. */
|
|
22
37
|
lineTo(toX: number, toY: number): this;
|
|
38
|
+
/** Draw a quadratic Bézier curve from the current point to (`toX`, `toY`) via control point (`cpX`, `cpY`). */
|
|
23
39
|
quadraticCurveTo(cpX: number, cpY: number, toX: number, toY: number): this;
|
|
40
|
+
/** Draw a cubic Bézier curve from the current point to (`toX`, `toY`) via two control points. */
|
|
24
41
|
bezierCurveTo(cpX1: number, cpY1: number, cpX2: number, cpY2: number, toX: number, toY: number): this;
|
|
42
|
+
/**
|
|
43
|
+
* Draw a circular arc tangent to the two lines defined by the current point→(x1,y1)
|
|
44
|
+
* and (x1,y1)→(x2,y2), with the given `radius`. Falls back to `lineTo(x1,y1)`
|
|
45
|
+
* when the geometry is degenerate.
|
|
46
|
+
*/
|
|
25
47
|
arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): this;
|
|
48
|
+
/** Draw a stroked arc centered at (`x`, `y`) with the given `radius` from `startAngle` to `endAngle` (radians). */
|
|
26
49
|
drawArc(x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: boolean): this;
|
|
50
|
+
/** Draw a stroked line between two explicit points, independent of the current pen position. */
|
|
27
51
|
drawLine(startX: number, startY: number, endX: number, endY: number): this;
|
|
52
|
+
/** Draw a stroked polyline from a flat `[x0,y0, x1,y1, ...]` coordinate array. */
|
|
28
53
|
drawPath(path: Array<number>): this;
|
|
54
|
+
/** Fill a closed polygon defined by `[x0,y0, x1,y1, ...]` and optionally stroke its outline. */
|
|
29
55
|
drawPolygon(path: Array<number>): this;
|
|
56
|
+
/** Fill a circle and optionally stroke its outline if `lineWidth > 0`. */
|
|
30
57
|
drawCircle(centerX: number, centerY: number, radius: number): this;
|
|
58
|
+
/** Fill an ellipse and optionally stroke its outline if `lineWidth > 0`. */
|
|
31
59
|
drawEllipse(centerX: number, centerY: number, radiusX: number, radiusY: number): this;
|
|
60
|
+
/** Fill a rectangle and optionally stroke its outline if `lineWidth > 0`. */
|
|
32
61
|
drawRectangle(x: number, y: number, width: number, height: number): this;
|
|
62
|
+
/**
|
|
63
|
+
* Fill a regular star polygon and optionally stroke its outline.
|
|
64
|
+
* `innerRadius` defaults to half of `radius`.
|
|
65
|
+
*/
|
|
33
66
|
drawStar(centerX: number, centerY: number, points: number, radius: number, innerRadius?: number, rotation?: number): this;
|
|
67
|
+
/** Remove all child meshes and reset pen state (position, colors, line width). */
|
|
34
68
|
clear(): this;
|
|
35
69
|
destroy(): void;
|
|
36
70
|
private _createMesh;
|
|
@@ -5,6 +5,19 @@ import { buildLine, buildPath, buildPolygon, buildCircle, buildEllipse, buildSta
|
|
|
5
5
|
import { Vector } from '../../math/Vector.js';
|
|
6
6
|
import { Mesh } from '../mesh/Mesh.js';
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* Immediate-mode 2D shape API backed by {@link Mesh} children.
|
|
10
|
+
*
|
|
11
|
+
* Each draw call (e.g. `drawCircle`, `drawRectangle`, `drawLine`) appends a
|
|
12
|
+
* new {@link Mesh} child colored with the current `fillColor` or `lineColor`.
|
|
13
|
+
* The active `lineWidth` controls stroke thickness for path and outline draws.
|
|
14
|
+
* Path commands (`moveTo`, `lineTo`, `quadraticCurveTo`, etc.) track a cursor
|
|
15
|
+
* point and flush a Mesh on each segment.
|
|
16
|
+
*
|
|
17
|
+
* Call {@link clear} to remove all child meshes and reset pen state. Because
|
|
18
|
+
* each shape is a separate Mesh, `Graphics` inherits full filter, blend,
|
|
19
|
+
* tint, and mask support from {@link Container}.
|
|
20
|
+
*/
|
|
8
21
|
class Graphics extends Container {
|
|
9
22
|
_lineWidth = 0;
|
|
10
23
|
_lineColor = new Color();
|
|
@@ -46,28 +59,37 @@ class Graphics extends Container {
|
|
|
46
59
|
}
|
|
47
60
|
return super.addChildAt(child, index);
|
|
48
61
|
}
|
|
62
|
+
/** Move the current pen position to (`x`, `y`) without drawing anything. */
|
|
49
63
|
moveTo(x, y) {
|
|
50
64
|
this._currentPoint.set(x, y);
|
|
51
65
|
return this;
|
|
52
66
|
}
|
|
67
|
+
/** Draw a stroked line segment from the current point to (`toX`, `toY`) and advance the pen. */
|
|
53
68
|
lineTo(toX, toY) {
|
|
54
69
|
const { x: fromX, y: fromY } = this._currentPoint;
|
|
55
70
|
this.drawPath([fromX, fromY, toX, toY]);
|
|
56
71
|
this.moveTo(toX, toY);
|
|
57
72
|
return this;
|
|
58
73
|
}
|
|
74
|
+
/** Draw a quadratic Bézier curve from the current point to (`toX`, `toY`) via control point (`cpX`, `cpY`). */
|
|
59
75
|
quadraticCurveTo(cpX, cpY, toX, toY) {
|
|
60
76
|
const { x: fromX, y: fromY } = this._currentPoint;
|
|
61
77
|
this.drawPath(quadraticCurveTo(fromX, fromY, cpX, cpY, toX, toY));
|
|
62
78
|
this.moveTo(toX, toY);
|
|
63
79
|
return this;
|
|
64
80
|
}
|
|
81
|
+
/** Draw a cubic Bézier curve from the current point to (`toX`, `toY`) via two control points. */
|
|
65
82
|
bezierCurveTo(cpX1, cpY1, cpX2, cpY2, toX, toY) {
|
|
66
83
|
const { x: fromX, y: fromY } = this._currentPoint;
|
|
67
84
|
this.drawPath(bezierCurveTo(fromX, fromY, cpX1, cpY1, cpX2, cpY2, toX, toY));
|
|
68
85
|
this.moveTo(toX, toY);
|
|
69
86
|
return this;
|
|
70
87
|
}
|
|
88
|
+
/**
|
|
89
|
+
* Draw a circular arc tangent to the two lines defined by the current point→(x1,y1)
|
|
90
|
+
* and (x1,y1)→(x2,y2), with the given `radius`. Falls back to `lineTo(x1,y1)`
|
|
91
|
+
* when the geometry is degenerate.
|
|
92
|
+
*/
|
|
71
93
|
arcTo(x1, y1, x2, y2, radius) {
|
|
72
94
|
const { x: fromX, y: fromY } = this._currentPoint;
|
|
73
95
|
const r = Math.abs(radius);
|
|
@@ -111,6 +133,7 @@ class Graphics extends Container {
|
|
|
111
133
|
this.lineTo(startX, startY);
|
|
112
134
|
return this.drawArc(centerX, centerY, r, startAngle, endAngle, leftTurn);
|
|
113
135
|
}
|
|
136
|
+
/** Draw a stroked arc centered at (`x`, `y`) with the given `radius` from `startAngle` to `endAngle` (radians). */
|
|
114
137
|
drawArc(x, y, radius, startAngle, endAngle, anticlockwise = false) {
|
|
115
138
|
const r = Math.abs(radius);
|
|
116
139
|
if (r === 0) {
|
|
@@ -137,16 +160,19 @@ class Graphics extends Container {
|
|
|
137
160
|
this.moveTo(path[path.length - 2], path[path.length - 1]);
|
|
138
161
|
return this;
|
|
139
162
|
}
|
|
163
|
+
/** Draw a stroked line between two explicit points, independent of the current pen position. */
|
|
140
164
|
drawLine(startX, startY, endX, endY) {
|
|
141
165
|
const data = buildLine(startX, startY, endX, endY, this._lineWidth);
|
|
142
166
|
this.addChild(this._createMesh(data, this._lineColor));
|
|
143
167
|
return this;
|
|
144
168
|
}
|
|
169
|
+
/** Draw a stroked polyline from a flat `[x0,y0, x1,y1, ...]` coordinate array. */
|
|
145
170
|
drawPath(path) {
|
|
146
171
|
const data = buildPath(path, this._lineWidth);
|
|
147
172
|
this.addChild(this._createMesh(data, this._lineColor));
|
|
148
173
|
return this;
|
|
149
174
|
}
|
|
175
|
+
/** Fill a closed polygon defined by `[x0,y0, x1,y1, ...]` and optionally stroke its outline. */
|
|
150
176
|
drawPolygon(path) {
|
|
151
177
|
const data = buildPolygon(path);
|
|
152
178
|
this.addChild(this._createMesh(data, this._fillColor));
|
|
@@ -155,6 +181,7 @@ class Graphics extends Container {
|
|
|
155
181
|
}
|
|
156
182
|
return this;
|
|
157
183
|
}
|
|
184
|
+
/** Fill a circle and optionally stroke its outline if `lineWidth > 0`. */
|
|
158
185
|
drawCircle(centerX, centerY, radius) {
|
|
159
186
|
const data = buildCircle(centerX, centerY, radius);
|
|
160
187
|
this.addChild(this._createMesh(data, this._fillColor));
|
|
@@ -163,6 +190,7 @@ class Graphics extends Container {
|
|
|
163
190
|
}
|
|
164
191
|
return this;
|
|
165
192
|
}
|
|
193
|
+
/** Fill an ellipse and optionally stroke its outline if `lineWidth > 0`. */
|
|
166
194
|
drawEllipse(centerX, centerY, radiusX, radiusY) {
|
|
167
195
|
const data = buildEllipse(centerX, centerY, radiusX, radiusY);
|
|
168
196
|
this.addChild(this._createMesh(data, this._fillColor));
|
|
@@ -171,6 +199,7 @@ class Graphics extends Container {
|
|
|
171
199
|
}
|
|
172
200
|
return this;
|
|
173
201
|
}
|
|
202
|
+
/** Fill a rectangle and optionally stroke its outline if `lineWidth > 0`. */
|
|
174
203
|
drawRectangle(x, y, width, height) {
|
|
175
204
|
const data = buildRectangle(x, y, width, height);
|
|
176
205
|
this.addChild(this._createMesh(data, this._fillColor));
|
|
@@ -179,6 +208,10 @@ class Graphics extends Container {
|
|
|
179
208
|
}
|
|
180
209
|
return this;
|
|
181
210
|
}
|
|
211
|
+
/**
|
|
212
|
+
* Fill a regular star polygon and optionally stroke its outline.
|
|
213
|
+
* `innerRadius` defaults to half of `radius`.
|
|
214
|
+
*/
|
|
182
215
|
drawStar(centerX, centerY, points, radius, innerRadius = radius / 2, rotation = 0) {
|
|
183
216
|
const data = buildStar(centerX, centerY, points, radius, innerRadius, rotation);
|
|
184
217
|
this.addChild(this._createMesh(data, this._fillColor));
|
|
@@ -187,6 +220,7 @@ class Graphics extends Container {
|
|
|
187
220
|
}
|
|
188
221
|
return this;
|
|
189
222
|
}
|
|
223
|
+
/** Remove all child meshes and reset pen state (position, colors, line width). */
|
|
190
224
|
clear() {
|
|
191
225
|
this.removeChildren();
|
|
192
226
|
this._lineWidth = 0;
|