@codexo/exojs 0.8.0 → 0.8.3
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 +390 -208
- package/README.md +19 -19
- package/dist/esm/animation/Easing.js +13 -21
- package/dist/esm/animation/Easing.js.map +1 -1
- package/dist/esm/animation/Tween.d.ts +3 -3
- package/dist/esm/animation/Tween.js +7 -5
- package/dist/esm/animation/Tween.js.map +1 -1
- package/dist/esm/animation/TweenManager.js +1 -1
- package/dist/esm/animation/TweenManager.js.map +1 -1
- package/dist/esm/animation/types.js.map +1 -1
- package/dist/esm/audio/AbstractMedia.d.ts +1 -1
- package/dist/esm/audio/AbstractMedia.js +1 -1
- package/dist/esm/audio/AbstractMedia.js.map +1 -1
- package/dist/esm/audio/AudioAnalyser.d.ts +37 -1
- package/dist/esm/audio/AudioAnalyser.js +150 -2
- package/dist/esm/audio/AudioAnalyser.js.map +1 -1
- package/dist/esm/audio/AudioBus.d.ts +1 -1
- package/dist/esm/audio/AudioBus.js.map +1 -1
- package/dist/esm/audio/AudioFilter.js +3 -1
- package/dist/esm/audio/AudioFilter.js.map +1 -1
- package/dist/esm/audio/AudioListener.d.ts +1 -1
- package/dist/esm/audio/AudioListener.js +5 -3
- package/dist/esm/audio/AudioListener.js.map +1 -1
- package/dist/esm/audio/AudioManager.js.map +1 -1
- package/dist/esm/audio/BeatDetector.d.ts +66 -4
- package/dist/esm/audio/BeatDetector.js +145 -44
- package/dist/esm/audio/BeatDetector.js.map +1 -1
- package/dist/esm/audio/Envelope.d.ts +1 -1
- package/dist/esm/audio/Envelope.js +2 -2
- package/dist/esm/audio/Envelope.js.map +1 -1
- package/dist/esm/audio/Music.d.ts +1 -1
- package/dist/esm/audio/Music.js +1 -1
- package/dist/esm/audio/Music.js.map +1 -1
- package/dist/esm/audio/OscillatorSound.d.ts +2 -2
- package/dist/esm/audio/OscillatorSound.js.map +1 -1
- package/dist/esm/audio/Sound.d.ts +40 -2
- package/dist/esm/audio/Sound.js +69 -9
- package/dist/esm/audio/Sound.js.map +1 -1
- package/dist/esm/audio/audio-context.js +1 -1
- package/dist/esm/audio/audio-context.js.map +1 -1
- package/dist/esm/audio/crossFade.js +1 -1
- package/dist/esm/audio/crossFade.js.map +1 -1
- package/dist/esm/audio/dsp/mel.d.ts +2 -2
- package/dist/esm/audio/dsp/mel.js +70 -0
- package/dist/esm/audio/dsp/mel.js.map +1 -0
- package/dist/esm/audio/dsp/tempogram.d.ts +2 -2
- package/dist/esm/audio/filters/ChorusFilter.js +12 -4
- package/dist/esm/audio/filters/ChorusFilter.js.map +1 -1
- package/dist/esm/audio/filters/CompressorFilter.d.ts +9 -0
- package/dist/esm/audio/filters/CompressorFilter.js +11 -0
- package/dist/esm/audio/filters/CompressorFilter.js.map +1 -1
- package/dist/esm/audio/filters/DelayFilter.js.map +1 -1
- package/dist/esm/audio/filters/DuckingFilter.d.ts +1 -1
- package/dist/esm/audio/filters/DuckingFilter.js +13 -5
- package/dist/esm/audio/filters/DuckingFilter.js.map +1 -1
- package/dist/esm/audio/filters/EqualizerFilter.js.map +1 -1
- package/dist/esm/audio/filters/GranularFilter.js +30 -14
- package/dist/esm/audio/filters/GranularFilter.js.map +1 -1
- package/dist/esm/audio/filters/HighpassFilter.js.map +1 -1
- package/dist/esm/audio/filters/LowpassFilter.js.map +1 -1
- package/dist/esm/audio/filters/PitchShiftFilter.js +14 -10
- package/dist/esm/audio/filters/PitchShiftFilter.js.map +1 -1
- package/dist/esm/audio/filters/ReverbFilter.js.map +1 -1
- package/dist/esm/audio/filters/VocoderFilter.d.ts +2 -2
- package/dist/esm/audio/filters/VocoderFilter.js +20 -12
- package/dist/esm/audio/filters/VocoderFilter.js.map +1 -1
- package/dist/esm/audio/filters/WorkletFilter.js +5 -6
- package/dist/esm/audio/filters/WorkletFilter.js.map +1 -1
- package/dist/esm/audio/filters/index.d.ts +7 -7
- package/dist/esm/audio/index.d.ts +9 -9
- package/dist/esm/audio/worklet/registerWorklet.js +7 -3
- package/dist/esm/audio/worklet/registerWorklet.js.map +1 -1
- package/dist/esm/core/Application.d.ts +13 -13
- package/dist/esm/core/Application.js +24 -16
- package/dist/esm/core/Application.js.map +1 -1
- package/dist/esm/core/Bounds.d.ts +1 -1
- package/dist/esm/core/Bounds.js +1 -3
- package/dist/esm/core/Bounds.js.map +1 -1
- package/dist/esm/core/Clock.js +1 -1
- package/dist/esm/core/Clock.js.map +1 -1
- package/dist/esm/core/Color.js +2 -5
- package/dist/esm/core/Color.js.map +1 -1
- package/dist/esm/core/Scene.d.ts +10 -10
- package/dist/esm/core/Scene.js +1 -1
- package/dist/esm/core/Scene.js.map +1 -1
- package/dist/esm/core/SceneManager.d.ts +4 -4
- package/dist/esm/core/SceneManager.js +39 -33
- package/dist/esm/core/SceneManager.js.map +1 -1
- package/dist/esm/core/SceneNode.d.ts +8 -8
- package/dist/esm/core/SceneNode.js +39 -29
- package/dist/esm/core/SceneNode.js.map +1 -1
- package/dist/esm/core/Signal.d.ts +3 -3
- package/dist/esm/core/Signal.js +3 -3
- package/dist/esm/core/Signal.js.map +1 -1
- package/dist/esm/core/Time.js +6 -6
- package/dist/esm/core/Time.js.map +1 -1
- package/dist/esm/core/Timer.d.ts +1 -1
- package/dist/esm/core/Timer.js +1 -1
- package/dist/esm/core/Timer.js.map +1 -1
- package/dist/esm/core/capabilities.js +2 -4
- package/dist/esm/core/capabilities.js.map +1 -1
- package/dist/esm/core/index.d.ts +2 -2
- package/dist/esm/core/utils.d.ts +4 -4
- package/dist/esm/core/utils.js +10 -10
- package/dist/esm/core/utils.js.map +1 -1
- package/dist/esm/debug/BoundingBoxesLayer.d.ts +3 -3
- package/dist/esm/debug/BoundingBoxesLayer.js +6 -13
- package/dist/esm/debug/BoundingBoxesLayer.js.map +1 -1
- package/dist/esm/debug/DebugLayer.d.ts +1 -1
- package/dist/esm/debug/DebugLayer.js.map +1 -1
- package/dist/esm/debug/DebugOverlay.d.ts +2 -2
- package/dist/esm/debug/DebugOverlay.js +2 -2
- package/dist/esm/debug/DebugOverlay.js.map +1 -1
- package/dist/esm/debug/HitTestLayer.d.ts +3 -3
- package/dist/esm/debug/HitTestLayer.js +3 -10
- package/dist/esm/debug/HitTestLayer.js.map +1 -1
- package/dist/esm/debug/PerformanceLayer.d.ts +2 -2
- package/dist/esm/debug/PerformanceLayer.js +6 -6
- package/dist/esm/debug/PerformanceLayer.js.map +1 -1
- package/dist/esm/debug/PointerStackLayer.d.ts +3 -3
- package/dist/esm/debug/PointerStackLayer.js +3 -3
- package/dist/esm/debug/PointerStackLayer.js.map +1 -1
- package/dist/esm/debug/RenderPassInspectorLayer.d.ts +71 -0
- package/dist/esm/debug/RenderPassInspectorLayer.js +201 -0
- package/dist/esm/debug/RenderPassInspectorLayer.js.map +1 -0
- package/dist/esm/debug/index.d.ts +4 -3
- package/dist/esm/debug/index.js +4 -3
- package/dist/esm/debug/index.js.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +101 -98
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/input/ArcadeStickGamepadMapping.js.map +1 -1
- package/dist/esm/input/GameCubeGamepadMapping.d.ts +1 -1
- package/dist/esm/input/GameCubeGamepadMapping.js +1 -1
- package/dist/esm/input/GameCubeGamepadMapping.js.map +1 -1
- package/dist/esm/input/Gamepad.d.ts +7 -7
- package/dist/esm/input/Gamepad.js +10 -6
- package/dist/esm/input/Gamepad.js.map +1 -1
- package/dist/esm/input/GamepadAxis.js +1 -1
- package/dist/esm/input/GamepadAxis.js.map +1 -1
- package/dist/esm/input/GamepadButton.js +1 -1
- package/dist/esm/input/GamepadButton.js.map +1 -1
- package/dist/esm/input/GamepadDefinitions.d.ts +4 -4
- package/dist/esm/input/GamepadDefinitions.js +12 -14
- package/dist/esm/input/GamepadDefinitions.js.map +1 -1
- package/dist/esm/input/GamepadMapping.d.ts +5 -5
- package/dist/esm/input/GamepadMapping.js.map +1 -1
- package/dist/esm/input/GamepadPromptLayouts.d.ts +2 -2
- package/dist/esm/input/GamepadPromptLayouts.js +8 -8
- package/dist/esm/input/GamepadPromptLayouts.js.map +1 -1
- package/dist/esm/input/GenericDualAnalogGamepadMapping.js.map +1 -1
- package/dist/esm/input/GestureRecognizer.d.ts +1 -1
- package/dist/esm/input/GestureRecognizer.js.map +1 -1
- package/dist/esm/input/InputBinding.d.ts +3 -3
- package/dist/esm/input/InputBinding.js.map +1 -1
- package/dist/esm/input/InputManager.d.ts +9 -9
- package/dist/esm/input/InputManager.js +25 -16
- package/dist/esm/input/InputManager.js.map +1 -1
- package/dist/esm/input/InteractionEvent.d.ts +1 -1
- package/dist/esm/input/InteractionEvent.js.map +1 -1
- package/dist/esm/input/InteractionManager.d.ts +2 -2
- package/dist/esm/input/InteractionManager.js +25 -16
- package/dist/esm/input/InteractionManager.js.map +1 -1
- package/dist/esm/input/JoyConLeftGamepadMapping.js.map +1 -1
- package/dist/esm/input/JoyConRightGamepadMapping.js.map +1 -1
- package/dist/esm/input/PlayStationGamepadMapping.d.ts +1 -1
- package/dist/esm/input/PlayStationGamepadMapping.js +1 -1
- package/dist/esm/input/PlayStationGamepadMapping.js.map +1 -1
- package/dist/esm/input/Pointer.d.ts +2 -2
- package/dist/esm/input/Pointer.js +6 -6
- package/dist/esm/input/Pointer.js.map +1 -1
- package/dist/esm/input/SteamControllerGamepadMapping.d.ts +1 -1
- package/dist/esm/input/SteamControllerGamepadMapping.js +1 -1
- package/dist/esm/input/SteamControllerGamepadMapping.js.map +1 -1
- package/dist/esm/input/SteamDeckGamepadMapping.js.map +1 -1
- package/dist/esm/input/SwitchProGamepadMapping.d.ts +1 -1
- package/dist/esm/input/SwitchProGamepadMapping.js +1 -1
- package/dist/esm/input/SwitchProGamepadMapping.js.map +1 -1
- package/dist/esm/input/XboxGamepadMapping.d.ts +1 -1
- package/dist/esm/input/XboxGamepadMapping.js +1 -1
- package/dist/esm/input/XboxGamepadMapping.js.map +1 -1
- package/dist/esm/input/index.d.ts +16 -16
- package/dist/esm/input/interaction-hooks.js.map +1 -1
- package/dist/esm/input/types.js.map +1 -1
- package/dist/esm/math/AbstractVector.js +8 -9
- package/dist/esm/math/AbstractVector.js.map +1 -1
- package/dist/esm/math/Circle.d.ts +5 -5
- package/dist/esm/math/Circle.js +33 -21
- package/dist/esm/math/Circle.js.map +1 -1
- package/dist/esm/math/Collision.d.ts +2 -2
- package/dist/esm/math/Collision.js.map +1 -1
- package/dist/esm/math/Ellipse.d.ts +5 -5
- package/dist/esm/math/Ellipse.js +28 -19
- package/dist/esm/math/Ellipse.js.map +1 -1
- package/dist/esm/math/Flags.d.ts +4 -4
- package/dist/esm/math/Flags.js.map +1 -1
- package/dist/esm/math/Interval.js.map +1 -1
- package/dist/esm/math/Line.d.ts +5 -5
- package/dist/esm/math/Line.js +23 -15
- package/dist/esm/math/Line.js.map +1 -1
- package/dist/esm/math/Matrix.js +14 -16
- package/dist/esm/math/Matrix.js.map +1 -1
- package/dist/esm/math/ObservableSize.js.map +1 -1
- package/dist/esm/math/ObservableVector.d.ts +1 -1
- package/dist/esm/math/ObservableVector.js.map +1 -1
- package/dist/esm/math/PolarVector.js.map +1 -1
- package/dist/esm/math/Polygon.d.ts +11 -11
- package/dist/esm/math/Polygon.js +37 -26
- package/dist/esm/math/Polygon.js.map +1 -1
- package/dist/esm/math/PolygonLike.d.ts +1 -1
- package/dist/esm/math/Quadtree.js +2 -8
- package/dist/esm/math/Quadtree.js.map +1 -1
- package/dist/esm/math/Random.js +5 -5
- package/dist/esm/math/Random.js.map +1 -1
- package/dist/esm/math/Rectangle.d.ts +4 -4
- package/dist/esm/math/Rectangle.js +59 -41
- package/dist/esm/math/Rectangle.js.map +1 -1
- package/dist/esm/math/Segment.d.ts +1 -1
- package/dist/esm/math/Segment.js +4 -4
- package/dist/esm/math/Segment.js.map +1 -1
- package/dist/esm/math/ShapeLike.d.ts +1 -1
- package/dist/esm/math/Size.js +1 -2
- package/dist/esm/math/Size.js.map +1 -1
- package/dist/esm/math/Vector.d.ts +4 -4
- package/dist/esm/math/Vector.js +19 -13
- package/dist/esm/math/Vector.js.map +1 -1
- package/dist/esm/math/collision-detection.d.ts +3 -3
- package/dist/esm/math/collision-detection.js +49 -49
- package/dist/esm/math/collision-detection.js.map +1 -1
- package/dist/esm/math/collision-primitives.d.ts +8 -8
- package/dist/esm/math/collision-primitives.js +27 -33
- package/dist/esm/math/collision-primitives.js.map +1 -1
- package/dist/esm/math/geometry.d.ts +3 -3
- package/dist/esm/math/geometry.js +55 -48
- package/dist/esm/math/geometry.js.map +1 -1
- package/dist/esm/math/index.d.ts +16 -16
- package/dist/esm/math/swept-collision.d.ts +3 -3
- package/dist/esm/math/swept-collision.js +5 -8
- package/dist/esm/math/swept-collision.js.map +1 -1
- package/dist/esm/math/triangulate.js +34 -24
- package/dist/esm/math/triangulate.js.map +1 -1
- package/dist/esm/math/utils.d.ts +2 -2
- package/dist/esm/math/utils.js +7 -7
- package/dist/esm/math/utils.js.map +1 -1
- package/dist/esm/particles/ParticleSystem.d.ts +9 -9
- package/dist/esm/particles/ParticleSystem.js +29 -29
- package/dist/esm/particles/ParticleSystem.js.map +1 -1
- package/dist/esm/particles/distributions/BoxArea.js.map +1 -1
- package/dist/esm/particles/distributions/CircleArea.js.map +1 -1
- package/dist/esm/particles/distributions/ConeDirection.js.map +1 -1
- package/dist/esm/particles/distributions/Constant.js.map +1 -1
- package/dist/esm/particles/distributions/Curve.d.ts +1 -1
- package/dist/esm/particles/distributions/Curve.js.map +1 -1
- package/dist/esm/particles/distributions/Gradient.d.ts +1 -1
- package/dist/esm/particles/distributions/Gradient.js +1 -1
- package/dist/esm/particles/distributions/Gradient.js.map +1 -1
- package/dist/esm/particles/distributions/LineSegment.js.map +1 -1
- package/dist/esm/particles/distributions/Range.js.map +1 -1
- package/dist/esm/particles/distributions/VectorRange.js.map +1 -1
- package/dist/esm/particles/distributions/index.d.ts +9 -9
- package/dist/esm/particles/gpu/ParticleGpuState.d.ts +3 -3
- package/dist/esm/particles/gpu/ParticleGpuState.js +48 -21
- package/dist/esm/particles/gpu/ParticleGpuState.js.map +1 -1
- package/dist/esm/particles/index.d.ts +1 -1
- package/dist/esm/particles/modules/AlphaFadeOverLifetime.d.ts +2 -2
- package/dist/esm/particles/modules/AlphaFadeOverLifetime.js.map +1 -1
- package/dist/esm/particles/modules/ApplyForce.d.ts +1 -1
- package/dist/esm/particles/modules/ApplyForce.js.map +1 -1
- package/dist/esm/particles/modules/AttractToPoint.d.ts +1 -1
- package/dist/esm/particles/modules/AttractToPoint.js.map +1 -1
- package/dist/esm/particles/modules/BurstSpawn.d.ts +4 -4
- package/dist/esm/particles/modules/BurstSpawn.js +2 -2
- package/dist/esm/particles/modules/BurstSpawn.js.map +1 -1
- package/dist/esm/particles/modules/ColorOverLifetime.d.ts +2 -2
- package/dist/esm/particles/modules/ColorOverLifetime.js +1 -1
- package/dist/esm/particles/modules/ColorOverLifetime.js.map +1 -1
- package/dist/esm/particles/modules/ColorOverSpeed.d.ts +2 -2
- package/dist/esm/particles/modules/ColorOverSpeed.js +1 -1
- package/dist/esm/particles/modules/ColorOverSpeed.js.map +1 -1
- package/dist/esm/particles/modules/DeathModule.js.map +1 -1
- package/dist/esm/particles/modules/Drag.d.ts +1 -1
- package/dist/esm/particles/modules/Drag.js +1 -3
- package/dist/esm/particles/modules/Drag.js.map +1 -1
- package/dist/esm/particles/modules/OrbitalForce.d.ts +1 -1
- package/dist/esm/particles/modules/OrbitalForce.js.map +1 -1
- package/dist/esm/particles/modules/RateSpawn.d.ts +3 -3
- package/dist/esm/particles/modules/RateSpawn.js +2 -2
- package/dist/esm/particles/modules/RateSpawn.js.map +1 -1
- package/dist/esm/particles/modules/RepelFromPoint.d.ts +1 -1
- package/dist/esm/particles/modules/RepelFromPoint.js.map +1 -1
- package/dist/esm/particles/modules/RotateOverLifetime.d.ts +1 -1
- package/dist/esm/particles/modules/RotateOverLifetime.js +1 -3
- package/dist/esm/particles/modules/RotateOverLifetime.js.map +1 -1
- package/dist/esm/particles/modules/ScaleOverLifetime.d.ts +2 -2
- package/dist/esm/particles/modules/ScaleOverLifetime.js.map +1 -1
- package/dist/esm/particles/modules/SpawnModule.js.map +1 -1
- package/dist/esm/particles/modules/SpawnOnDeath.d.ts +1 -1
- package/dist/esm/particles/modules/SpawnOnDeath.js.map +1 -1
- package/dist/esm/particles/modules/Turbulence.d.ts +1 -1
- package/dist/esm/particles/modules/Turbulence.js.map +1 -1
- package/dist/esm/particles/modules/UpdateModule.js.map +1 -1
- package/dist/esm/particles/modules/VelocityOverLifetime.d.ts +2 -2
- package/dist/esm/particles/modules/VelocityOverLifetime.js.map +1 -1
- package/dist/esm/particles/modules/WgslContribution.d.ts +3 -3
- package/dist/esm/particles/modules/WgslContribution.js.map +1 -1
- package/dist/esm/particles/modules/index.d.ts +17 -17
- package/dist/esm/rendering/CallbackRenderPass.js.map +1 -1
- package/dist/esm/rendering/Container.d.ts +2 -2
- package/dist/esm/rendering/Container.js +10 -11
- package/dist/esm/rendering/Container.js.map +1 -1
- package/dist/esm/rendering/Drawable.js.map +1 -1
- package/dist/esm/rendering/RenderBackend.d.ts +6 -6
- package/dist/esm/rendering/RenderBackendType.js.map +1 -1
- package/dist/esm/rendering/RenderNode.d.ts +10 -10
- package/dist/esm/rendering/RenderNode.js +31 -31
- package/dist/esm/rendering/RenderNode.js.map +1 -1
- package/dist/esm/rendering/RenderStats.js.map +1 -1
- package/dist/esm/rendering/RenderTarget.d.ts +2 -2
- package/dist/esm/rendering/RenderTarget.js +5 -5
- package/dist/esm/rendering/RenderTarget.js.map +1 -1
- package/dist/esm/rendering/RenderTargetPass.d.ts +3 -3
- package/dist/esm/rendering/RenderTargetPass.js.map +1 -1
- package/dist/esm/rendering/Renderer.d.ts +2 -2
- package/dist/esm/rendering/RendererRegistry.d.ts +3 -3
- package/dist/esm/rendering/RendererRegistry.js +2 -3
- package/dist/esm/rendering/RendererRegistry.js.map +1 -1
- package/dist/esm/rendering/View.d.ts +3 -3
- package/dist/esm/rendering/View.js +17 -20
- package/dist/esm/rendering/View.js.map +1 -1
- package/dist/esm/rendering/filters/BlurFilter.d.ts +1 -1
- package/dist/esm/rendering/filters/BlurFilter.js +4 -9
- package/dist/esm/rendering/filters/BlurFilter.js.map +1 -1
- package/dist/esm/rendering/filters/ColorFilter.d.ts +1 -1
- package/dist/esm/rendering/filters/ColorFilter.js +3 -9
- package/dist/esm/rendering/filters/ColorFilter.js.map +1 -1
- package/dist/esm/rendering/filters/Filter.d.ts +1 -1
- package/dist/esm/rendering/filters/Filter.js.map +1 -1
- package/dist/esm/rendering/filters/LutFilter.d.ts +87 -0
- package/dist/esm/rendering/filters/LutFilter.js +261 -0
- package/dist/esm/rendering/filters/LutFilter.js.map +1 -0
- package/dist/esm/rendering/filters/WebGl2ShaderFilter.d.ts +2 -2
- package/dist/esm/rendering/filters/WebGl2ShaderFilter.js +7 -14
- package/dist/esm/rendering/filters/WebGl2ShaderFilter.js.map +1 -1
- package/dist/esm/rendering/filters/WebGpuShaderFilter.d.ts +1 -1
- package/dist/esm/rendering/filters/WebGpuShaderFilter.js +16 -11
- package/dist/esm/rendering/filters/WebGpuShaderFilter.js.map +1 -1
- package/dist/esm/rendering/index.d.ts +30 -27
- package/dist/esm/rendering/mesh/Mesh.d.ts +6 -1
- package/dist/esm/rendering/mesh/Mesh.js +3 -1
- package/dist/esm/rendering/mesh/Mesh.js.map +1 -1
- package/dist/esm/rendering/mesh/MeshShader.d.ts +183 -0
- package/dist/esm/rendering/mesh/MeshShader.js +231 -0
- package/dist/esm/rendering/mesh/MeshShader.js.map +1 -0
- package/dist/esm/rendering/primitives/Graphics.d.ts +3 -3
- package/dist/esm/rendering/primitives/Graphics.js +12 -12
- package/dist/esm/rendering/primitives/Graphics.js.map +1 -1
- package/dist/esm/rendering/shader/Shader.js.map +1 -1
- package/dist/esm/rendering/shader/ShaderAttribute.js.map +1 -1
- package/dist/esm/rendering/shader/ShaderUniform.js.map +1 -1
- package/dist/esm/rendering/shader/upgradeFragmentShaderToGl300.js +6 -8
- package/dist/esm/rendering/shader/upgradeFragmentShaderToGl300.js.map +1 -1
- package/dist/esm/rendering/sprite/AnimatedSprite.d.ts +3 -3
- package/dist/esm/rendering/sprite/AnimatedSprite.js.map +1 -1
- package/dist/esm/rendering/sprite/Sprite.d.ts +4 -4
- package/dist/esm/rendering/sprite/Sprite.js +51 -35
- package/dist/esm/rendering/sprite/Sprite.js.map +1 -1
- package/dist/esm/rendering/sprite/Spritesheet.d.ts +5 -9
- package/dist/esm/rendering/sprite/Spritesheet.js +1 -1
- package/dist/esm/rendering/sprite/Spritesheet.js.map +1 -1
- package/dist/esm/rendering/text/DynamicGlyphAtlas.js +3 -9
- package/dist/esm/rendering/text/DynamicGlyphAtlas.js.map +1 -1
- package/dist/esm/rendering/text/Text.js +9 -9
- package/dist/esm/rendering/text/Text.js.map +1 -1
- package/dist/esm/rendering/text/TextLayout.d.ts +2 -2
- package/dist/esm/rendering/text/TextLayout.js.map +1 -1
- package/dist/esm/rendering/text/TextStyle.js.map +1 -1
- package/dist/esm/rendering/text/atlas-singleton.js.map +1 -1
- package/dist/esm/rendering/texture/DataTexture.d.ts +115 -0
- package/dist/esm/rendering/texture/DataTexture.js +173 -0
- package/dist/esm/rendering/texture/DataTexture.js.map +1 -0
- package/dist/esm/rendering/texture/RenderTexture.d.ts +1 -1
- package/dist/esm/rendering/texture/RenderTexture.js +4 -1
- package/dist/esm/rendering/texture/RenderTexture.js.map +1 -1
- package/dist/esm/rendering/texture/Sampler.js.map +1 -1
- package/dist/esm/rendering/texture/Texture.d.ts +2 -2
- package/dist/esm/rendering/texture/Texture.js +8 -5
- package/dist/esm/rendering/texture/Texture.js.map +1 -1
- package/dist/esm/rendering/types.js.map +1 -1
- package/dist/esm/rendering/utils.js.map +1 -1
- package/dist/esm/rendering/video/Video.d.ts +3 -3
- package/dist/esm/rendering/video/Video.js +7 -6
- package/dist/esm/rendering/video/Video.js.map +1 -1
- package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.d.ts +6 -6
- package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.js +7 -10
- package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/AbstractWebGl2Renderer.d.ts +1 -1
- package/dist/esm/rendering/webgl2/AbstractWebGl2Renderer.js +1 -2
- package/dist/esm/rendering/webgl2/AbstractWebGl2Renderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts +11 -11
- package/dist/esm/rendering/webgl2/WebGl2Backend.js +61 -22
- package/dist/esm/rendering/webgl2/WebGl2Backend.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2MaskCompositor.d.ts +2 -2
- package/dist/esm/rendering/webgl2/WebGl2MaskCompositor.js +6 -8
- package/dist/esm/rendering/webgl2/WebGl2MaskCompositor.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.d.ts +7 -4
- package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.js +121 -43
- package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.d.ts +1 -1
- package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.js +10 -18
- package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.d.ts +1 -1
- package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2ShaderBlock.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2ShaderMappings.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2ShaderProgram.js +54 -22
- package/dist/esm/rendering/webgl2/WebGl2ShaderProgram.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.d.ts +1 -1
- package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js +11 -14
- package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2VertexArrayObject.d.ts +1 -1
- package/dist/esm/rendering/webgl2/WebGl2VertexArrayObject.js.map +1 -1
- package/dist/esm/rendering/webgpu/AbstractWebGpuRenderer.d.ts +1 -1
- package/dist/esm/rendering/webgpu/AbstractWebGpuRenderer.js +1 -2
- package/dist/esm/rendering/webgpu/AbstractWebGpuRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts +8 -7
- package/dist/esm/rendering/webgpu/WebGpuBackend.js +104 -37
- package/dist/esm/rendering/webgpu/WebGpuBackend.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBlendState.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.d.ts +2 -2
- package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.js +3 -4
- package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.d.ts +15 -2
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js +657 -102
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.d.ts +1 -1
- package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js +100 -56
- package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.d.ts +2 -2
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js +45 -45
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/compute/WebGpuComputePipeline.d.ts +1 -1
- package/dist/esm/rendering/webgpu/compute/index.d.ts +2 -2
- package/dist/esm/resources/AbstractAssetFactory.d.ts +1 -1
- package/dist/esm/resources/AbstractAssetFactory.js.map +1 -1
- package/dist/esm/resources/AssetManifest.d.ts +1 -1
- package/dist/esm/resources/AssetManifest.js +2 -2
- package/dist/esm/resources/AssetManifest.js.map +1 -1
- package/dist/esm/resources/CacheFirstStrategy.d.ts +2 -2
- package/dist/esm/resources/CacheFirstStrategy.js.map +1 -1
- package/dist/esm/resources/CacheStrategy.d.ts +1 -1
- package/dist/esm/resources/FactoryRegistry.d.ts +1 -1
- package/dist/esm/resources/FactoryRegistry.js +2 -3
- package/dist/esm/resources/FactoryRegistry.js.map +1 -1
- package/dist/esm/resources/IndexedDbDatabase.d.ts +1 -1
- package/dist/esm/resources/IndexedDbDatabase.js +11 -14
- package/dist/esm/resources/IndexedDbDatabase.js.map +1 -1
- package/dist/esm/resources/IndexedDbStore.d.ts +1 -1
- package/dist/esm/resources/IndexedDbStore.js +2 -7
- package/dist/esm/resources/IndexedDbStore.js.map +1 -1
- package/dist/esm/resources/Loader.d.ts +9 -9
- package/dist/esm/resources/Loader.js +48 -35
- package/dist/esm/resources/Loader.js.map +1 -1
- package/dist/esm/resources/NetworkOnlyStrategy.d.ts +2 -2
- package/dist/esm/resources/NetworkOnlyStrategy.js.map +1 -1
- package/dist/esm/resources/factories/BinaryFactory.js.map +1 -1
- package/dist/esm/resources/factories/FontFactory.js +1 -1
- package/dist/esm/resources/factories/FontFactory.js.map +1 -1
- package/dist/esm/resources/factories/ImageFactory.js +4 -4
- package/dist/esm/resources/factories/ImageFactory.js.map +1 -1
- package/dist/esm/resources/factories/JsonFactory.d.ts +1 -1
- package/dist/esm/resources/factories/JsonFactory.js +1 -1
- package/dist/esm/resources/factories/JsonFactory.js.map +1 -1
- package/dist/esm/resources/factories/MusicFactory.d.ts +1 -1
- package/dist/esm/resources/factories/MusicFactory.js +4 -4
- package/dist/esm/resources/factories/MusicFactory.js.map +1 -1
- package/dist/esm/resources/factories/SoundFactory.d.ts +1 -1
- package/dist/esm/resources/factories/SoundFactory.js +3 -3
- package/dist/esm/resources/factories/SoundFactory.js.map +1 -1
- package/dist/esm/resources/factories/SvgFactory.js +3 -3
- package/dist/esm/resources/factories/SvgFactory.js.map +1 -1
- package/dist/esm/resources/factories/TextFactory.js +1 -1
- package/dist/esm/resources/factories/TextFactory.js.map +1 -1
- package/dist/esm/resources/factories/TextureFactory.d.ts +1 -1
- package/dist/esm/resources/factories/TextureFactory.js +3 -3
- package/dist/esm/resources/factories/TextureFactory.js.map +1 -1
- package/dist/esm/resources/factories/VideoFactory.d.ts +2 -2
- package/dist/esm/resources/factories/VideoFactory.js +5 -5
- package/dist/esm/resources/factories/VideoFactory.js.map +1 -1
- package/dist/esm/resources/factories/VttFactory.d.ts +2 -2
- package/dist/esm/resources/factories/VttFactory.js +6 -6
- package/dist/esm/resources/factories/VttFactory.js.map +1 -1
- package/dist/esm/resources/factories/WasmFactory.js.map +1 -1
- package/dist/esm/resources/index.d.ts +11 -11
- package/dist/esm/resources/utils.js +30 -25
- package/dist/esm/resources/utils.js.map +1 -1
- package/dist/exo.esm.js +26260 -24256
- package/dist/exo.esm.js.map +1 -1
- package/package.json +15 -4
|
@@ -1,56 +1,59 @@
|
|
|
1
|
+
export * from './CallbackRenderPass';
|
|
2
|
+
export * from './Container';
|
|
3
|
+
export * from './Drawable';
|
|
4
|
+
export * from './filters/BlurFilter';
|
|
5
|
+
export * from './filters/ColorFilter';
|
|
6
|
+
export * from './filters/Filter';
|
|
7
|
+
export * from './filters/LutFilter';
|
|
8
|
+
export * from './filters/WebGl2ShaderFilter';
|
|
9
|
+
export * from './filters/WebGpuShaderFilter';
|
|
1
10
|
export * from './mesh/Mesh';
|
|
11
|
+
export * from './mesh/MeshShader';
|
|
2
12
|
export * from './primitives/Graphics';
|
|
13
|
+
export * from './RenderBackend';
|
|
14
|
+
export * from './RenderBackendType';
|
|
15
|
+
export * from './Renderer';
|
|
16
|
+
export * from './RendererRegistry';
|
|
17
|
+
export * from './RenderNode';
|
|
18
|
+
export * from './RenderPass';
|
|
19
|
+
export * from './RenderStats';
|
|
20
|
+
export * from './RenderTarget';
|
|
21
|
+
export * from './RenderTargetPass';
|
|
3
22
|
export * from './shader/Shader';
|
|
4
23
|
export * from './shader/ShaderAttribute';
|
|
5
24
|
export * from './shader/ShaderUniform';
|
|
6
25
|
export * from './shader/upgradeFragmentShaderToGl300';
|
|
26
|
+
export * from './sprite/AnimatedSprite';
|
|
7
27
|
export * from './sprite/Sprite';
|
|
8
28
|
export * from './sprite/Spritesheet';
|
|
9
|
-
export * from './sprite/AnimatedSprite';
|
|
10
29
|
export * from './text/DynamicGlyphAtlas';
|
|
11
30
|
export * from './text/Text';
|
|
12
31
|
export * from './text/TextLayout';
|
|
13
32
|
export * from './text/TextStyle';
|
|
14
33
|
export * from './text/types';
|
|
34
|
+
export * from './texture/DataTexture';
|
|
15
35
|
export * from './texture/RenderTexture';
|
|
16
36
|
export * from './texture/Sampler';
|
|
17
37
|
export * from './texture/Texture';
|
|
38
|
+
export * from './types';
|
|
18
39
|
export * from './video/Video';
|
|
40
|
+
export * from './View';
|
|
19
41
|
export * from './webgl2/AbstractWebGl2BatchedRenderer';
|
|
20
42
|
export * from './webgl2/AbstractWebGl2Renderer';
|
|
43
|
+
export type { WebGl2Backend } from './webgl2/WebGl2Backend';
|
|
44
|
+
export * from './webgl2/WebGl2Backend';
|
|
45
|
+
export * from './webgl2/WebGl2MeshRenderer';
|
|
46
|
+
export * from './webgl2/WebGl2ParticleRenderer';
|
|
21
47
|
export * from './webgl2/WebGl2RenderBuffer';
|
|
22
48
|
export * from './webgl2/WebGl2ShaderBlock';
|
|
23
49
|
export * from './webgl2/WebGl2ShaderMappings';
|
|
24
|
-
export * from './webgl2/WebGl2VertexArrayObject';
|
|
25
|
-
export * from './webgl2/WebGl2MeshRenderer';
|
|
26
|
-
export * from './webgl2/WebGl2ParticleRenderer';
|
|
27
|
-
export type { WebGl2Backend } from './webgl2/WebGl2Backend';
|
|
28
|
-
export * from './webgl2/WebGl2Backend';
|
|
29
50
|
export * from './webgl2/WebGl2ShaderProgram';
|
|
30
51
|
export * from './webgl2/WebGl2SpriteRenderer';
|
|
52
|
+
export * from './webgl2/WebGl2VertexArrayObject';
|
|
31
53
|
export * from './webgpu/AbstractWebGpuRenderer';
|
|
54
|
+
export type { WebGpuBackend } from './webgpu/WebGpuBackend';
|
|
55
|
+
export * from './webgpu/WebGpuBackend';
|
|
32
56
|
export * from './webgpu/WebGpuBlendState';
|
|
33
57
|
export * from './webgpu/WebGpuMeshRenderer';
|
|
34
58
|
export * from './webgpu/WebGpuParticleRenderer';
|
|
35
|
-
export type { WebGpuBackend } from './webgpu/WebGpuBackend';
|
|
36
|
-
export * from './webgpu/WebGpuBackend';
|
|
37
59
|
export * from './webgpu/WebGpuSpriteRenderer';
|
|
38
|
-
export * from './types';
|
|
39
|
-
export * from './Container';
|
|
40
|
-
export * from './Drawable';
|
|
41
|
-
export * from './RenderNode';
|
|
42
|
-
export * from './RenderBackendType';
|
|
43
|
-
export * from './RenderPass';
|
|
44
|
-
export * from './RenderStats';
|
|
45
|
-
export * from './RenderTarget';
|
|
46
|
-
export * from './RenderTargetPass';
|
|
47
|
-
export * from './CallbackRenderPass';
|
|
48
|
-
export * from './Renderer';
|
|
49
|
-
export * from './RendererRegistry';
|
|
50
|
-
export * from './RenderBackend';
|
|
51
|
-
export * from './View';
|
|
52
|
-
export * from './filters/Filter';
|
|
53
|
-
export * from './filters/BlurFilter';
|
|
54
|
-
export * from './filters/ColorFilter';
|
|
55
|
-
export * from './filters/WebGl2ShaderFilter';
|
|
56
|
-
export * from './filters/WebGpuShaderFilter';
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Drawable } from '@/rendering/Drawable';
|
|
2
|
-
import type {
|
|
2
|
+
import type { MeshShader } from '@/rendering/mesh/MeshShader';
|
|
3
3
|
import type { RenderTexture } from '@/rendering/texture/RenderTexture';
|
|
4
|
+
import type { Texture } from '@/rendering/texture/Texture';
|
|
4
5
|
/**
|
|
5
6
|
* Construction-time options for a {@link Mesh}.
|
|
6
7
|
*
|
|
@@ -13,6 +14,8 @@ import type { RenderTexture } from '@/rendering/texture/RenderTexture';
|
|
|
13
14
|
* supplied UVs while an untextured mesh paints solid vertex colors only.
|
|
14
15
|
*
|
|
15
16
|
* Validation is enforced at construction; any mismatch throws.
|
|
17
|
+
*
|
|
18
|
+
* For custom shaders, see {@link MeshShader}.
|
|
16
19
|
*/
|
|
17
20
|
export interface MeshOptions {
|
|
18
21
|
readonly vertices: Float32Array;
|
|
@@ -20,6 +23,7 @@ export interface MeshOptions {
|
|
|
20
23
|
readonly uvs?: Float32Array;
|
|
21
24
|
readonly colors?: Uint32Array;
|
|
22
25
|
readonly texture?: Texture | RenderTexture | null;
|
|
26
|
+
readonly shader?: MeshShader;
|
|
23
27
|
}
|
|
24
28
|
/**
|
|
25
29
|
* Arbitrary 2D triangle-mesh primitive.
|
|
@@ -54,6 +58,7 @@ export declare class Mesh extends Drawable {
|
|
|
54
58
|
readonly indices: Uint16Array | null;
|
|
55
59
|
readonly uvs: Float32Array | null;
|
|
56
60
|
readonly colors: Uint32Array | null;
|
|
61
|
+
readonly shader: MeshShader | null;
|
|
57
62
|
private _texture;
|
|
58
63
|
constructor(options: MeshOptions);
|
|
59
64
|
/** Number of (x, y) vertex pairs in the mesh (i.e. `vertices.length / 2`). */
|
|
@@ -33,10 +33,11 @@ class Mesh extends Drawable {
|
|
|
33
33
|
indices;
|
|
34
34
|
uvs;
|
|
35
35
|
colors;
|
|
36
|
+
shader;
|
|
36
37
|
_texture;
|
|
37
38
|
constructor(options) {
|
|
38
39
|
super();
|
|
39
|
-
const { vertices, indices = null, uvs = null, colors = null, texture = null } = options;
|
|
40
|
+
const { vertices, indices = null, uvs = null, colors = null, texture = null, shader = null } = options;
|
|
40
41
|
if (vertices.length === 0 || vertices.length % 2 !== 0) {
|
|
41
42
|
throw new Error(`Mesh vertices must be a non-empty flat array of (x,y) pairs (got length ${vertices.length}).`);
|
|
42
43
|
}
|
|
@@ -67,6 +68,7 @@ class Mesh extends Drawable {
|
|
|
67
68
|
this.indices = indices;
|
|
68
69
|
this.uvs = uvs;
|
|
69
70
|
this.colors = colors;
|
|
71
|
+
this.shader = shader;
|
|
70
72
|
this._texture = texture;
|
|
71
73
|
this.recomputeLocalBounds();
|
|
72
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Mesh.js","sources":["../../../../../src/rendering/mesh/Mesh.ts"],"sourcesContent":[null],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"Mesh.js","sources":["../../../../../src/rendering/mesh/Mesh.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import type { RenderTexture } from '@/rendering/texture/RenderTexture';
|
|
2
|
+
import type { Texture } from '@/rendering/texture/Texture';
|
|
3
|
+
/**
|
|
4
|
+
* Uniform value passed to a custom mesh shader. Scalars and small tuples
|
|
5
|
+
* auto-marshal to the appropriate `Float32Array`/`Int32Array` for the
|
|
6
|
+
* backend's uniform call. `Texture`/`RenderTexture` values are bound to
|
|
7
|
+
* texture slots starting at slot 1 — slot 0 is reserved for the mesh's
|
|
8
|
+
* own `texture`.
|
|
9
|
+
*/
|
|
10
|
+
export type MeshShaderUniformValue = number | readonly [number, number] | readonly [number, number, number] | readonly [number, number, number, number] | Float32Array | Int32Array | Texture | RenderTexture;
|
|
11
|
+
/**
|
|
12
|
+
* Construction options for {@link MeshShader}.
|
|
13
|
+
*
|
|
14
|
+
* At least one language must be supplied. Provide `glsl` for WebGL2,
|
|
15
|
+
* `wgsl` for WebGPU, or both for backend-portable meshes. The shader
|
|
16
|
+
* is compiled lazily on first use against the active backend; an
|
|
17
|
+
* unsupported backend at draw time throws with a clear error.
|
|
18
|
+
*/
|
|
19
|
+
export interface MeshShaderOptions {
|
|
20
|
+
/**
|
|
21
|
+
* GLSL ES 3.00 sources for the WebGL2 backend. Both `vertex` and
|
|
22
|
+
* `fragment` are required when `glsl` is supplied.
|
|
23
|
+
*/
|
|
24
|
+
readonly glsl?: {
|
|
25
|
+
readonly vertex: string;
|
|
26
|
+
readonly fragment: string;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* WGSL source for the WebGPU backend. Vertex and fragment entry
|
|
30
|
+
* points live in the same source file (WGSL convention).
|
|
31
|
+
*/
|
|
32
|
+
readonly wgsl?: string;
|
|
33
|
+
/** Initial uniform values; mutate per frame via {@link MeshShader.uniforms}. */
|
|
34
|
+
readonly uniforms?: Record<string, MeshShaderUniformValue>;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Custom shader pair attached to a {@link Mesh}.
|
|
38
|
+
*
|
|
39
|
+
* One `MeshShader` instance can be shared across many meshes; renderers
|
|
40
|
+
* cache compiled programs/pipelines on the instance reference. Call
|
|
41
|
+
* {@link destroy} when the shader is no longer needed to release the
|
|
42
|
+
* cached GPU resources on every backend the shader was used on.
|
|
43
|
+
*
|
|
44
|
+
* # Vertex layout
|
|
45
|
+
*
|
|
46
|
+
* The vertex layout is fixed and shared with the default mesh shader,
|
|
47
|
+
* so custom vertex shaders MUST pin the standard attribute locations:
|
|
48
|
+
*
|
|
49
|
+
* ## GLSL (location-qualified)
|
|
50
|
+
*
|
|
51
|
+
* ```glsl
|
|
52
|
+
* layout(location = 0) in vec2 a_position;
|
|
53
|
+
* layout(location = 1) in vec2 a_texcoord;
|
|
54
|
+
* layout(location = 2) in vec4 a_color;
|
|
55
|
+
* ```
|
|
56
|
+
*
|
|
57
|
+
* ## WGSL (location-qualified)
|
|
58
|
+
*
|
|
59
|
+
* ```wgsl
|
|
60
|
+
* struct VertexInput {
|
|
61
|
+
* @location(0) position: vec2<f32>,
|
|
62
|
+
* @location(1) texcoord: vec2<f32>,
|
|
63
|
+
* @location(2) color: vec4<f32>,
|
|
64
|
+
* };
|
|
65
|
+
* ```
|
|
66
|
+
*
|
|
67
|
+
* # Auto-bound uniforms
|
|
68
|
+
*
|
|
69
|
+
* The renderer auto-binds these when the shader declares them. Declared
|
|
70
|
+
* but unused is fine; absent is fine too. Both backends carry the same
|
|
71
|
+
* logical uniforms, only the binding scheme differs.
|
|
72
|
+
*
|
|
73
|
+
* ## GLSL
|
|
74
|
+
*
|
|
75
|
+
* ```glsl
|
|
76
|
+
* uniform mat3 u_projection; // active view's projection
|
|
77
|
+
* uniform mat3 u_translation; // mesh's global transform
|
|
78
|
+
* uniform vec4 u_tint; // mesh.tint as RGBA in 0..1
|
|
79
|
+
* uniform sampler2D u_texture; // bound to texture slot 0
|
|
80
|
+
* ```
|
|
81
|
+
*
|
|
82
|
+
* ## WGSL
|
|
83
|
+
*
|
|
84
|
+
* ```wgsl
|
|
85
|
+
* struct MeshUniforms {
|
|
86
|
+
* projection: mat3x3<f32>,
|
|
87
|
+
* translation: mat3x3<f32>,
|
|
88
|
+
* tint: vec4<f32>,
|
|
89
|
+
* };
|
|
90
|
+
*
|
|
91
|
+
* @group(0) @binding(0) var<uniform> u_mesh: MeshUniforms;
|
|
92
|
+
*
|
|
93
|
+
* @group(1) @binding(0) var u_texture: texture_2d<f32>;
|
|
94
|
+
* @group(1) @binding(1) var u_sampler: sampler;
|
|
95
|
+
* ```
|
|
96
|
+
*
|
|
97
|
+
* # User uniforms
|
|
98
|
+
*
|
|
99
|
+
* Anything in {@link uniforms} is set after the auto-binds. `Texture`/
|
|
100
|
+
* `RenderTexture` values claim slots 1..N (slot 0 belongs to the mesh).
|
|
101
|
+
*
|
|
102
|
+
* ## WGSL user-uniform contract
|
|
103
|
+
*
|
|
104
|
+
* User uniforms live in `@group(2)`:
|
|
105
|
+
*
|
|
106
|
+
* - `@group(2) @binding(0) var<uniform> u_user: <UserUniformsStruct>;`
|
|
107
|
+
* for the packed scalar/vector/matrix uniforms.
|
|
108
|
+
* - `@group(2) @binding(N)` for each `Texture`/`RenderTexture` uniform,
|
|
109
|
+
* in declaration order, alongside its sampler at `@binding(N+1)`.
|
|
110
|
+
*/
|
|
111
|
+
export declare class MeshShader {
|
|
112
|
+
/**
|
|
113
|
+
* Mutable user uniform values. Mutate between frames to drive animated
|
|
114
|
+
* effects; the renderer reads from this map every draw.
|
|
115
|
+
*
|
|
116
|
+
* shader.uniforms.uTime = performance.now() / 1000;
|
|
117
|
+
* shader.uniforms.uColor = [1, 0.5, 0, 1];
|
|
118
|
+
*/
|
|
119
|
+
uniforms: Record<string, MeshShaderUniformValue>;
|
|
120
|
+
/** GLSL source pair for the WebGL2 backend, or `null` if not provided. */
|
|
121
|
+
readonly glsl: {
|
|
122
|
+
readonly vertex: string;
|
|
123
|
+
readonly fragment: string;
|
|
124
|
+
} | null;
|
|
125
|
+
/** WGSL source for the WebGPU backend, or `null` if not provided. */
|
|
126
|
+
readonly wgsl: string | null;
|
|
127
|
+
private readonly _disposeCallbacks;
|
|
128
|
+
constructor(options: MeshShaderOptions);
|
|
129
|
+
/**
|
|
130
|
+
* Convenience setter equivalent to `shader.uniforms[name] = value`.
|
|
131
|
+
* Provided for symmetry with engine APIs that prefer explicit methods
|
|
132
|
+
* over property mutation.
|
|
133
|
+
*/
|
|
134
|
+
setUniform(name: string, value: MeshShaderUniformValue): void;
|
|
135
|
+
/**
|
|
136
|
+
* Reflect declared uniforms from each language's source. Returns a per-
|
|
137
|
+
* language map of uniform-name → declared type, parsed from the shader
|
|
138
|
+
* sources via lightweight regex (not a full GLSL/WGSL grammar). Texture
|
|
139
|
+
* uniforms (`sampler2D`/`texture_2d`) are included; sampler bindings
|
|
140
|
+
* are not (they pair with textures by binding index).
|
|
141
|
+
*
|
|
142
|
+
* Reflection is best-effort and intended for CI drift-checks and editor
|
|
143
|
+
* tooling, not for runtime uniform binding decisions. The renderers do
|
|
144
|
+
* NOT consult this map; they bind uniforms by name from {@link uniforms}
|
|
145
|
+
* and let the underlying API resolve declared-but-unused entries.
|
|
146
|
+
*/
|
|
147
|
+
getDeclaredUniforms(): {
|
|
148
|
+
glsl: Record<string, string>;
|
|
149
|
+
wgsl: Record<string, string>;
|
|
150
|
+
};
|
|
151
|
+
/**
|
|
152
|
+
* Compare declared uniform names between the GLSL and WGSL sources.
|
|
153
|
+
* Returns lists of names declared in only one language. Use in CI to
|
|
154
|
+
* catch drift when both languages should expose the same logical
|
|
155
|
+
* uniforms. When only one language is provided, returns empty arrays.
|
|
156
|
+
*
|
|
157
|
+
* Auto-bound uniforms (`u_projection`, `u_translation`, `u_tint`,
|
|
158
|
+
* `u_texture`) are excluded from the comparison since the GLSL source
|
|
159
|
+
* declares them at the top-level uniform scope while the WGSL source
|
|
160
|
+
* receives them via the `@group(0)` mesh-uniforms struct and the
|
|
161
|
+
* `@group(1)` texture binding.
|
|
162
|
+
*/
|
|
163
|
+
detectUniformDrift(): {
|
|
164
|
+
onlyInGlsl: readonly string[];
|
|
165
|
+
onlyInWgsl: readonly string[];
|
|
166
|
+
};
|
|
167
|
+
/**
|
|
168
|
+
* Release GPU resources cached against this `MeshShader` on every
|
|
169
|
+
* backend that has compiled it. Safe to call multiple times. After
|
|
170
|
+
* destroy, the shader can still be re-used — renderers will recompile
|
|
171
|
+
* on next draw — but typical usage is to drop the reference.
|
|
172
|
+
*/
|
|
173
|
+
destroy(): void;
|
|
174
|
+
/**
|
|
175
|
+
* Internal hook for renderers to register a per-shader-instance cleanup
|
|
176
|
+
* callback (release compiled program, pipeline, or bind groups). The
|
|
177
|
+
* callback fires on {@link destroy}; renderers MUST also tolerate the
|
|
178
|
+
* shader being garbage-collected without destroy ever being called.
|
|
179
|
+
*
|
|
180
|
+
* @internal
|
|
181
|
+
*/
|
|
182
|
+
_onDispose(callback: () => void): void;
|
|
183
|
+
}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom shader pair attached to a {@link Mesh}.
|
|
3
|
+
*
|
|
4
|
+
* One `MeshShader` instance can be shared across many meshes; renderers
|
|
5
|
+
* cache compiled programs/pipelines on the instance reference. Call
|
|
6
|
+
* {@link destroy} when the shader is no longer needed to release the
|
|
7
|
+
* cached GPU resources on every backend the shader was used on.
|
|
8
|
+
*
|
|
9
|
+
* # Vertex layout
|
|
10
|
+
*
|
|
11
|
+
* The vertex layout is fixed and shared with the default mesh shader,
|
|
12
|
+
* so custom vertex shaders MUST pin the standard attribute locations:
|
|
13
|
+
*
|
|
14
|
+
* ## GLSL (location-qualified)
|
|
15
|
+
*
|
|
16
|
+
* ```glsl
|
|
17
|
+
* layout(location = 0) in vec2 a_position;
|
|
18
|
+
* layout(location = 1) in vec2 a_texcoord;
|
|
19
|
+
* layout(location = 2) in vec4 a_color;
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* ## WGSL (location-qualified)
|
|
23
|
+
*
|
|
24
|
+
* ```wgsl
|
|
25
|
+
* struct VertexInput {
|
|
26
|
+
* @location(0) position: vec2<f32>,
|
|
27
|
+
* @location(1) texcoord: vec2<f32>,
|
|
28
|
+
* @location(2) color: vec4<f32>,
|
|
29
|
+
* };
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* # Auto-bound uniforms
|
|
33
|
+
*
|
|
34
|
+
* The renderer auto-binds these when the shader declares them. Declared
|
|
35
|
+
* but unused is fine; absent is fine too. Both backends carry the same
|
|
36
|
+
* logical uniforms, only the binding scheme differs.
|
|
37
|
+
*
|
|
38
|
+
* ## GLSL
|
|
39
|
+
*
|
|
40
|
+
* ```glsl
|
|
41
|
+
* uniform mat3 u_projection; // active view's projection
|
|
42
|
+
* uniform mat3 u_translation; // mesh's global transform
|
|
43
|
+
* uniform vec4 u_tint; // mesh.tint as RGBA in 0..1
|
|
44
|
+
* uniform sampler2D u_texture; // bound to texture slot 0
|
|
45
|
+
* ```
|
|
46
|
+
*
|
|
47
|
+
* ## WGSL
|
|
48
|
+
*
|
|
49
|
+
* ```wgsl
|
|
50
|
+
* struct MeshUniforms {
|
|
51
|
+
* projection: mat3x3<f32>,
|
|
52
|
+
* translation: mat3x3<f32>,
|
|
53
|
+
* tint: vec4<f32>,
|
|
54
|
+
* };
|
|
55
|
+
*
|
|
56
|
+
* @group(0) @binding(0) var<uniform> u_mesh: MeshUniforms;
|
|
57
|
+
*
|
|
58
|
+
* @group(1) @binding(0) var u_texture: texture_2d<f32>;
|
|
59
|
+
* @group(1) @binding(1) var u_sampler: sampler;
|
|
60
|
+
* ```
|
|
61
|
+
*
|
|
62
|
+
* # User uniforms
|
|
63
|
+
*
|
|
64
|
+
* Anything in {@link uniforms} is set after the auto-binds. `Texture`/
|
|
65
|
+
* `RenderTexture` values claim slots 1..N (slot 0 belongs to the mesh).
|
|
66
|
+
*
|
|
67
|
+
* ## WGSL user-uniform contract
|
|
68
|
+
*
|
|
69
|
+
* User uniforms live in `@group(2)`:
|
|
70
|
+
*
|
|
71
|
+
* - `@group(2) @binding(0) var<uniform> u_user: <UserUniformsStruct>;`
|
|
72
|
+
* for the packed scalar/vector/matrix uniforms.
|
|
73
|
+
* - `@group(2) @binding(N)` for each `Texture`/`RenderTexture` uniform,
|
|
74
|
+
* in declaration order, alongside its sampler at `@binding(N+1)`.
|
|
75
|
+
*/
|
|
76
|
+
class MeshShader {
|
|
77
|
+
/**
|
|
78
|
+
* Mutable user uniform values. Mutate between frames to drive animated
|
|
79
|
+
* effects; the renderer reads from this map every draw.
|
|
80
|
+
*
|
|
81
|
+
* shader.uniforms.uTime = performance.now() / 1000;
|
|
82
|
+
* shader.uniforms.uColor = [1, 0.5, 0, 1];
|
|
83
|
+
*/
|
|
84
|
+
uniforms;
|
|
85
|
+
/** GLSL source pair for the WebGL2 backend, or `null` if not provided. */
|
|
86
|
+
glsl;
|
|
87
|
+
/** WGSL source for the WebGPU backend, or `null` if not provided. */
|
|
88
|
+
wgsl;
|
|
89
|
+
_disposeCallbacks = new Set();
|
|
90
|
+
constructor(options) {
|
|
91
|
+
if (options.glsl === undefined && options.wgsl === undefined) {
|
|
92
|
+
throw new Error('MeshShader requires at least one of `glsl` or `wgsl`.');
|
|
93
|
+
}
|
|
94
|
+
if (options.glsl !== undefined) {
|
|
95
|
+
if (typeof options.glsl.vertex !== 'string' || options.glsl.vertex.length === 0) {
|
|
96
|
+
throw new Error('MeshShader.glsl.vertex must be a non-empty string.');
|
|
97
|
+
}
|
|
98
|
+
if (typeof options.glsl.fragment !== 'string' || options.glsl.fragment.length === 0) {
|
|
99
|
+
throw new Error('MeshShader.glsl.fragment must be a non-empty string.');
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
if (options.wgsl !== undefined && (typeof options.wgsl !== 'string' || options.wgsl.length === 0)) {
|
|
103
|
+
throw new Error('MeshShader.wgsl must be a non-empty string.');
|
|
104
|
+
}
|
|
105
|
+
this.glsl = options.glsl ?? null;
|
|
106
|
+
this.wgsl = options.wgsl ?? null;
|
|
107
|
+
this.uniforms = { ...(options.uniforms ?? {}) };
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Convenience setter equivalent to `shader.uniforms[name] = value`.
|
|
111
|
+
* Provided for symmetry with engine APIs that prefer explicit methods
|
|
112
|
+
* over property mutation.
|
|
113
|
+
*/
|
|
114
|
+
setUniform(name, value) {
|
|
115
|
+
this.uniforms[name] = value;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Reflect declared uniforms from each language's source. Returns a per-
|
|
119
|
+
* language map of uniform-name → declared type, parsed from the shader
|
|
120
|
+
* sources via lightweight regex (not a full GLSL/WGSL grammar). Texture
|
|
121
|
+
* uniforms (`sampler2D`/`texture_2d`) are included; sampler bindings
|
|
122
|
+
* are not (they pair with textures by binding index).
|
|
123
|
+
*
|
|
124
|
+
* Reflection is best-effort and intended for CI drift-checks and editor
|
|
125
|
+
* tooling, not for runtime uniform binding decisions. The renderers do
|
|
126
|
+
* NOT consult this map; they bind uniforms by name from {@link uniforms}
|
|
127
|
+
* and let the underlying API resolve declared-but-unused entries.
|
|
128
|
+
*/
|
|
129
|
+
getDeclaredUniforms() {
|
|
130
|
+
return {
|
|
131
|
+
glsl: this.glsl !== null ? parseGlslUniforms(this.glsl.vertex, this.glsl.fragment) : {},
|
|
132
|
+
wgsl: this.wgsl !== null ? parseWgslUniforms(this.wgsl) : {},
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Compare declared uniform names between the GLSL and WGSL sources.
|
|
137
|
+
* Returns lists of names declared in only one language. Use in CI to
|
|
138
|
+
* catch drift when both languages should expose the same logical
|
|
139
|
+
* uniforms. When only one language is provided, returns empty arrays.
|
|
140
|
+
*
|
|
141
|
+
* Auto-bound uniforms (`u_projection`, `u_translation`, `u_tint`,
|
|
142
|
+
* `u_texture`) are excluded from the comparison since the GLSL source
|
|
143
|
+
* declares them at the top-level uniform scope while the WGSL source
|
|
144
|
+
* receives them via the `@group(0)` mesh-uniforms struct and the
|
|
145
|
+
* `@group(1)` texture binding.
|
|
146
|
+
*/
|
|
147
|
+
detectUniformDrift() {
|
|
148
|
+
if (this.glsl === null || this.wgsl === null) {
|
|
149
|
+
return { onlyInGlsl: [], onlyInWgsl: [] };
|
|
150
|
+
}
|
|
151
|
+
const declared = this.getDeclaredUniforms();
|
|
152
|
+
const glslNames = new Set(Object.keys(declared.glsl).filter(n => !autoBoundUniformNames.has(n)));
|
|
153
|
+
const wgslNames = new Set(Object.keys(declared.wgsl).filter(n => !autoBoundUniformNames.has(n)));
|
|
154
|
+
const onlyInGlsl = [];
|
|
155
|
+
const onlyInWgsl = [];
|
|
156
|
+
for (const name of glslNames) {
|
|
157
|
+
if (!wgslNames.has(name))
|
|
158
|
+
onlyInGlsl.push(name);
|
|
159
|
+
}
|
|
160
|
+
for (const name of wgslNames) {
|
|
161
|
+
if (!glslNames.has(name))
|
|
162
|
+
onlyInWgsl.push(name);
|
|
163
|
+
}
|
|
164
|
+
return { onlyInGlsl, onlyInWgsl };
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Release GPU resources cached against this `MeshShader` on every
|
|
168
|
+
* backend that has compiled it. Safe to call multiple times. After
|
|
169
|
+
* destroy, the shader can still be re-used — renderers will recompile
|
|
170
|
+
* on next draw — but typical usage is to drop the reference.
|
|
171
|
+
*/
|
|
172
|
+
destroy() {
|
|
173
|
+
for (const callback of this._disposeCallbacks) {
|
|
174
|
+
callback();
|
|
175
|
+
}
|
|
176
|
+
this._disposeCallbacks.clear();
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Internal hook for renderers to register a per-shader-instance cleanup
|
|
180
|
+
* callback (release compiled program, pipeline, or bind groups). The
|
|
181
|
+
* callback fires on {@link destroy}; renderers MUST also tolerate the
|
|
182
|
+
* shader being garbage-collected without destroy ever being called.
|
|
183
|
+
*
|
|
184
|
+
* @internal
|
|
185
|
+
*/
|
|
186
|
+
_onDispose(callback) {
|
|
187
|
+
this._disposeCallbacks.add(callback);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
const autoBoundUniformNames = new Set(['u_projection', 'u_translation', 'u_tint', 'u_texture', 'u_mesh']);
|
|
191
|
+
const glslUniformPattern = /\buniform\s+(?:mediump\s+|highp\s+|lowp\s+|)(\w+)\s+(\w+)[^;]*;/g;
|
|
192
|
+
const wgslUserUniformPattern = /@group\(\s*2\s*\)\s*@binding\(\s*\d+\s*\)\s*var(?:<[^>]+>|)\s+(\w+)\s*:\s*([^;]+);/g;
|
|
193
|
+
/**
|
|
194
|
+
* Strip line and block comments from a shader source so the uniform
|
|
195
|
+
* regexes don't match commented-out declarations. Conservative: works
|
|
196
|
+
* for both GLSL and WGSL syntax (both use `//` and `/* ... *\/`).
|
|
197
|
+
*/
|
|
198
|
+
function stripComments(source) {
|
|
199
|
+
return source.replaceAll(/\/\*[\s\S]*?\*\//g, '').replaceAll(/\/\/[^\n]*/g, '');
|
|
200
|
+
}
|
|
201
|
+
function parseGlslUniforms(vertex, fragment) {
|
|
202
|
+
const result = {};
|
|
203
|
+
for (const source of [vertex, fragment]) {
|
|
204
|
+
const stripped = stripComments(source);
|
|
205
|
+
glslUniformPattern.lastIndex = 0;
|
|
206
|
+
let match;
|
|
207
|
+
while ((match = glslUniformPattern.exec(stripped)) !== null) {
|
|
208
|
+
const [, type, name] = match;
|
|
209
|
+
result[name] = type;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return result;
|
|
213
|
+
}
|
|
214
|
+
function parseWgslUniforms(source) {
|
|
215
|
+
const result = {};
|
|
216
|
+
const stripped = stripComments(source);
|
|
217
|
+
// User uniforms in @group(2). Each user-uniform binding is either:
|
|
218
|
+
// - var<uniform> u_user: SomeStruct;
|
|
219
|
+
// - var u_extraTex: texture_2d<f32>;
|
|
220
|
+
// We extract the name and the (trimmed) type expression.
|
|
221
|
+
wgslUserUniformPattern.lastIndex = 0;
|
|
222
|
+
let match;
|
|
223
|
+
while ((match = wgslUserUniformPattern.exec(stripped)) !== null) {
|
|
224
|
+
const [, name, type] = match;
|
|
225
|
+
result[name] = type.trim();
|
|
226
|
+
}
|
|
227
|
+
return result;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
export { MeshShader };
|
|
231
|
+
//# sourceMappingURL=MeshShader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MeshShader.js","sources":["../../../../../src/rendering/mesh/MeshShader.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Color } from '@/core/Color';
|
|
2
|
-
import { Container } from '@/rendering/Container';
|
|
3
2
|
import { Vector } from '@/math/Vector';
|
|
3
|
+
import { Container } from '@/rendering/Container';
|
|
4
4
|
import { Mesh } from '@/rendering/mesh/Mesh';
|
|
5
5
|
import type { RenderNode } from '@/rendering/RenderNode';
|
|
6
6
|
/**
|
|
@@ -50,9 +50,9 @@ export declare class Graphics extends Container {
|
|
|
50
50
|
/** Draw a stroked line between two explicit points, independent of the current pen position. */
|
|
51
51
|
drawLine(startX: number, startY: number, endX: number, endY: number): this;
|
|
52
52
|
/** Draw a stroked polyline from a flat `[x0,y0, x1,y1, ...]` coordinate array. */
|
|
53
|
-
drawPath(path:
|
|
53
|
+
drawPath(path: number[]): this;
|
|
54
54
|
/** Fill a closed polygon defined by `[x0,y0, x1,y1, ...]` and optionally stroke its outline. */
|
|
55
|
-
drawPolygon(path:
|
|
55
|
+
drawPolygon(path: number[]): this;
|
|
56
56
|
/** Fill a circle and optionally stroke its outline if `lineWidth > 0`. */
|
|
57
57
|
drawCircle(centerX: number, centerY: number, radius: number): this;
|
|
58
58
|
/** Fill an ellipse and optionally stroke its outline if `lineWidth > 0`. */
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Color } from '../../core/Color.js';
|
|
2
|
-
import { Container } from '../Container.js';
|
|
3
|
-
import { quadraticCurveTo, bezierCurveTo, tau, clamp } from '../../math/utils.js';
|
|
4
2
|
import { buildLine, buildPath, buildPolygon, buildCircle, buildEllipse, buildStar, buildRectangle } from '../../math/geometry.js';
|
|
3
|
+
import { quadraticCurveTo, bezierCurveTo, tau, clamp } from '../../math/utils.js';
|
|
5
4
|
import { Vector } from '../../math/Vector.js';
|
|
5
|
+
import { Container } from '../Container.js';
|
|
6
6
|
import { Mesh } from '../mesh/Mesh.js';
|
|
7
7
|
|
|
8
8
|
/**
|
|
@@ -109,7 +109,7 @@ class Graphics extends Container {
|
|
|
109
109
|
const inDirY = inY / inLen;
|
|
110
110
|
const outDirX = outX / outLen;
|
|
111
111
|
const outDirY = outY / outLen;
|
|
112
|
-
const dot = clamp(
|
|
112
|
+
const dot = clamp(inDirX * outDirX + inDirY * outDirY, -1, 1);
|
|
113
113
|
const angle = Math.acos(dot);
|
|
114
114
|
if (angle === 0 || angle === Math.PI) {
|
|
115
115
|
return this.lineTo(x1, y1);
|
|
@@ -118,16 +118,16 @@ class Graphics extends Container {
|
|
|
118
118
|
if (!Number.isFinite(distanceToTangent) || distanceToTangent > inLen || distanceToTangent > outLen) {
|
|
119
119
|
return this.lineTo(x1, y1);
|
|
120
120
|
}
|
|
121
|
-
const startX = x1 -
|
|
122
|
-
const startY = y1 -
|
|
123
|
-
const endX = x1 +
|
|
124
|
-
const endY = y1 +
|
|
125
|
-
const cross =
|
|
121
|
+
const startX = x1 - inDirX * distanceToTangent;
|
|
122
|
+
const startY = y1 - inDirY * distanceToTangent;
|
|
123
|
+
const endX = x1 + outDirX * distanceToTangent;
|
|
124
|
+
const endY = y1 + outDirY * distanceToTangent;
|
|
125
|
+
const cross = inDirX * outDirY - inDirY * outDirX;
|
|
126
126
|
const leftTurn = cross > 0;
|
|
127
127
|
const normalX = leftTurn ? -inDirY : inDirY;
|
|
128
128
|
const normalY = leftTurn ? inDirX : -inDirX;
|
|
129
|
-
const centerX = startX +
|
|
130
|
-
const centerY = startY +
|
|
129
|
+
const centerX = startX + normalX * r;
|
|
130
|
+
const centerY = startY + normalY * r;
|
|
131
131
|
const startAngle = Math.atan2(startY - centerY, startX - centerX);
|
|
132
132
|
const endAngle = Math.atan2(endY - centerY, endX - centerX);
|
|
133
133
|
this.lineTo(startX, startY);
|
|
@@ -153,8 +153,8 @@ class Graphics extends Container {
|
|
|
153
153
|
const path = [];
|
|
154
154
|
for (let i = 0; i <= segments; i++) {
|
|
155
155
|
const ratio = i / segments;
|
|
156
|
-
const angle = startAngle +
|
|
157
|
-
path.push(x +
|
|
156
|
+
const angle = startAngle + sweep * ratio;
|
|
157
|
+
path.push(x + Math.cos(angle) * r, y + Math.sin(angle) * r);
|
|
158
158
|
}
|
|
159
159
|
this.drawPath(path);
|
|
160
160
|
this.moveTo(path[path.length - 2], path[path.length - 1]);
|