@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlurFilter.js","sources":["../../../../../src/rendering/filters/BlurFilter.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"BlurFilter.js","sources":["../../../../../src/rendering/filters/BlurFilter.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,13 @@ import { Color } from '@/core/Color';
|
|
|
2
2
|
import type { RenderTexture } from '@/rendering/texture/RenderTexture';
|
|
3
3
|
import type { RenderBackend } from '@/rendering/RenderBackend';
|
|
4
4
|
import { Filter } from './Filter';
|
|
5
|
+
/**
|
|
6
|
+
* A {@link Filter} that multiplies the input texture by a solid {@link Color}.
|
|
7
|
+
*
|
|
8
|
+
* Useful for tinting, fade-to-black/white, flash effects, and
|
|
9
|
+
* colour-grading passes. The `color` property can be mutated at runtime
|
|
10
|
+
* without recreating the filter.
|
|
11
|
+
*/
|
|
5
12
|
export declare class ColorFilter extends Filter {
|
|
6
13
|
private readonly _color;
|
|
7
14
|
private readonly _sprite;
|
|
@@ -4,6 +4,13 @@ import { Sprite } from '../sprite/Sprite.js';
|
|
|
4
4
|
import { RenderTargetPass } from '../RenderTargetPass.js';
|
|
5
5
|
import { Filter } from './Filter.js';
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* A {@link Filter} that multiplies the input texture by a solid {@link Color}.
|
|
9
|
+
*
|
|
10
|
+
* Useful for tinting, fade-to-black/white, flash effects, and
|
|
11
|
+
* colour-grading passes. The `color` property can be mutated at runtime
|
|
12
|
+
* without recreating the filter.
|
|
13
|
+
*/
|
|
7
14
|
class ColorFilter extends Filter {
|
|
8
15
|
_color;
|
|
9
16
|
_sprite = new Sprite(null);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColorFilter.js","sources":["../../../../../src/rendering/filters/ColorFilter.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"ColorFilter.js","sources":["../../../../../src/rendering/filters/ColorFilter.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAQA;;;;;;AAMG;AACG,MAAO,WAAY,SAAQ,MAAM,CAAA;AAElB,IAAA,MAAM;AACN,IAAA,OAAO,GAAW,IAAI,MAAM,CAAC,IAAI,CAAC;IAEnD,WAAA,CAAmB,KAAA,GAAe,KAAK,CAAC,KAAK,EAAA;AACzC,QAAA,KAAK,EAAE;AAEP,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE;IAC/B;AAEA,IAAA,IAAW,KAAK,GAAA;QACZ,OAAO,IAAI,CAAC,MAAM;IACtB;AAEO,IAAA,KAAK,CAAC,OAAsB,EAAE,KAAoB,EAAE,MAAqB,EAAA;AAC5E,QAAA,IAAI,CAAC;aACA,UAAU,CAAC,KAAK;AAChB,aAAA,YAAY,CAAC,UAAU,CAAC,MAAM;AAC9B,aAAA,OAAO,CAAC,IAAI,CAAC,MAAM;AACnB,aAAA,WAAW,CAAC,CAAC,EAAE,CAAC;aAChB,WAAW,CAAC,CAAC;AACb,aAAA,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;QAEnB,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;QACjC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;AAEnC,QAAA,OAAO,CAAC,OAAO,CAAC,IAAI,gBAAgB,CAChC,MAAK;AACD,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;AAChC,QAAA,CAAC,EACD;AACI,YAAA,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,UAAU,EAAE,KAAK,CAAC,gBAAgB;AACrC,SAAA,CACJ,CAAC;IACN;IAEgB,OAAO,GAAA;AACnB,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;IACzB;AACH;;;;"}
|
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
import type { RenderTexture } from '@/rendering/texture/RenderTexture';
|
|
2
2
|
import type { RenderBackend } from '@/rendering/RenderBackend';
|
|
3
|
+
/**
|
|
4
|
+
* Abstract base class for post-process filters applied to a drawable's
|
|
5
|
+
* render output.
|
|
6
|
+
*
|
|
7
|
+
* Filters are rendered into a temporary {@link RenderTexture} (the `output`)
|
|
8
|
+
* that is composited back onto the scene after all filters in the chain have
|
|
9
|
+
* been applied. Subclasses implement {@link apply} to run their shader pass.
|
|
10
|
+
* Stock implementations: {@link BlurFilter}, {@link ColorFilter}.
|
|
11
|
+
* User-supplied GLSL/WGSL shaders: {@link WebGl2ShaderFilter},
|
|
12
|
+
* {@link WebGpuShaderFilter}.
|
|
13
|
+
*/
|
|
3
14
|
export declare abstract class Filter {
|
|
15
|
+
/**
|
|
16
|
+
* Execute one filter pass: sample from `input`, write the result to
|
|
17
|
+
* `output`. Both textures are the same dimensions as the filtered drawable's
|
|
18
|
+
* bounding box.
|
|
19
|
+
*/
|
|
4
20
|
abstract apply(backend: RenderBackend, input: RenderTexture, output: RenderTexture): void;
|
|
21
|
+
/**
|
|
22
|
+
* Release any GPU-side resources held by this filter (uniform buffers,
|
|
23
|
+
* pipelines, intermediate textures). Default is a no-op for stateless
|
|
24
|
+
* filters; subclasses with state ({@link BlurFilter}, {@link ColorFilter})
|
|
25
|
+
* override.
|
|
26
|
+
*/
|
|
27
|
+
destroy(): void;
|
|
5
28
|
}
|
|
@@ -1,4 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abstract base class for post-process filters applied to a drawable's
|
|
3
|
+
* render output.
|
|
4
|
+
*
|
|
5
|
+
* Filters are rendered into a temporary {@link RenderTexture} (the `output`)
|
|
6
|
+
* that is composited back onto the scene after all filters in the chain have
|
|
7
|
+
* been applied. Subclasses implement {@link apply} to run their shader pass.
|
|
8
|
+
* Stock implementations: {@link BlurFilter}, {@link ColorFilter}.
|
|
9
|
+
* User-supplied GLSL/WGSL shaders: {@link WebGl2ShaderFilter},
|
|
10
|
+
* {@link WebGpuShaderFilter}.
|
|
11
|
+
*/
|
|
1
12
|
class Filter {
|
|
13
|
+
/**
|
|
14
|
+
* Release any GPU-side resources held by this filter (uniform buffers,
|
|
15
|
+
* pipelines, intermediate textures). Default is a no-op for stateless
|
|
16
|
+
* filters; subclasses with state ({@link BlurFilter}, {@link ColorFilter})
|
|
17
|
+
* override.
|
|
18
|
+
*/
|
|
19
|
+
destroy() {
|
|
20
|
+
// no-op — subclasses with GPU state override
|
|
21
|
+
}
|
|
2
22
|
}
|
|
3
23
|
|
|
4
24
|
export { Filter };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Filter.js","sources":["../../../../../src/rendering/filters/Filter.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Filter.js","sources":["../../../../../src/rendering/filters/Filter.ts"],"sourcesContent":[null],"names":[],"mappings":"AAGA;;;;;;;;;;AAUG;MACmB,MAAM,CAAA;AAYxB;;;;;AAKG;IACI,OAAO,GAAA;;IAEd;AACH;;;;"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { Texture } from '@/rendering/texture/Texture';
|
|
2
|
+
import type { RenderTexture } from '@/rendering/texture/RenderTexture';
|
|
3
|
+
import type { RenderBackend } from '@/rendering/RenderBackend';
|
|
4
|
+
import { Filter } from './Filter';
|
|
5
|
+
/**
|
|
6
|
+
* A scalar number, vector tuple, typed array, or texture. Both
|
|
7
|
+
* {@link WebGl2ShaderFilter} and {@link WebGpuShaderFilter} accept and
|
|
8
|
+
* marshal these value types.
|
|
9
|
+
*/
|
|
10
|
+
export type ShaderFilterUniformValue = number | readonly [number, number] | readonly [number, number, number] | readonly [number, number, number, number] | Float32Array | Int32Array | Texture | RenderTexture;
|
|
11
|
+
export interface WebGl2ShaderFilterOptions {
|
|
12
|
+
/**
|
|
13
|
+
* GLSL fragment shader source. Required.
|
|
14
|
+
*
|
|
15
|
+
* The shader receives these auto-bound uniforms:
|
|
16
|
+
* uniform sampler2D uTexture; // the filter's input
|
|
17
|
+
* uniform vec2 uResolution; // output dimensions
|
|
18
|
+
*
|
|
19
|
+
* And these auto-bound varyings:
|
|
20
|
+
* in vec2 vUv; // 0..1 across the quad
|
|
21
|
+
*/
|
|
22
|
+
fragmentSource?: string;
|
|
23
|
+
/**
|
|
24
|
+
* GLSL vertex shader source. Optional; defaults to a pass-through
|
|
25
|
+
* fullscreen-quad shader.
|
|
26
|
+
*/
|
|
27
|
+
vertexSource?: string;
|
|
28
|
+
/**
|
|
29
|
+
* Initial uniform values. Can be updated at runtime by writing
|
|
30
|
+
* to the `uniforms` property:
|
|
31
|
+
*
|
|
32
|
+
* filter.uniforms.uTime = performance.now() / 1000;
|
|
33
|
+
*/
|
|
34
|
+
uniforms?: Record<string, ShaderFilterUniformValue>;
|
|
35
|
+
/**
|
|
36
|
+
* Auto-upgrade legacy GLSL ES 1.00 fragment shader source to GLSL ES 3.00.
|
|
37
|
+
* Default `true` — accepts both Shadertoy/ISF/legacy shaders and modern
|
|
38
|
+
* 3.00 shaders interchangeably.
|
|
39
|
+
*
|
|
40
|
+
* Set to `false` if you want strict 3.00 input (will fail to compile if
|
|
41
|
+
* given 1.00-style code). Useful for CI/linting setups that want to catch
|
|
42
|
+
* legacy shader code as bugs.
|
|
43
|
+
*
|
|
44
|
+
* Note: only the fragment shader is upgraded. If you supply a 1.00-style
|
|
45
|
+
* vertex shader via `vertexSource`, you will get a compile error that
|
|
46
|
+
* must be fixed manually.
|
|
47
|
+
*/
|
|
48
|
+
autoUpgrade?: boolean;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* A high-level {@link Filter} subclass that renders the input texture
|
|
52
|
+
* through a user-provided GLSL fragment shader on the **WebGL2** backend.
|
|
53
|
+
*
|
|
54
|
+
* For the WebGPU backend use {@link WebGpuShaderFilter}.
|
|
55
|
+
*
|
|
56
|
+
* ## Usage
|
|
57
|
+
*
|
|
58
|
+
* ```ts
|
|
59
|
+
* const filter = new WebGl2ShaderFilter({
|
|
60
|
+
* fragmentSource: `
|
|
61
|
+
* #version 300 es
|
|
62
|
+
* precision mediump float;
|
|
63
|
+
* uniform sampler2D uTexture;
|
|
64
|
+
* uniform vec2 uResolution;
|
|
65
|
+
* uniform float uTime;
|
|
66
|
+
* in vec2 vUv;
|
|
67
|
+
* out vec4 fragColor;
|
|
68
|
+
* void main() {
|
|
69
|
+
* fragColor = texture(uTexture, vUv);
|
|
70
|
+
* }
|
|
71
|
+
* `,
|
|
72
|
+
* uniforms: { uTime: 0.0 },
|
|
73
|
+
* });
|
|
74
|
+
*
|
|
75
|
+
* // Update uniforms each frame:
|
|
76
|
+
* filter.uniforms.uTime = performance.now() / 1000;
|
|
77
|
+
* sprite.filters = [filter];
|
|
78
|
+
* ```
|
|
79
|
+
*
|
|
80
|
+
* ## Auto-bound uniforms
|
|
81
|
+
*
|
|
82
|
+
* The backend automatically sets `uTexture` (slot 0) and `uResolution`
|
|
83
|
+
* before each draw. User uniforms start at texture slot 1.
|
|
84
|
+
*/
|
|
85
|
+
export declare class WebGl2ShaderFilter extends Filter {
|
|
86
|
+
/**
|
|
87
|
+
* Mutable map of uniform values. Set values via property
|
|
88
|
+
* assignment; they are flushed to the GPU before each apply().
|
|
89
|
+
*
|
|
90
|
+
* filter.uniforms.uTime = 1.234;
|
|
91
|
+
* filter.uniforms.uColor = [1, 0.5, 0, 1]; // vec4
|
|
92
|
+
*/
|
|
93
|
+
readonly uniforms: Record<string, ShaderFilterUniformValue>;
|
|
94
|
+
private readonly _fragmentSource;
|
|
95
|
+
private readonly _vertexSource;
|
|
96
|
+
private _shader;
|
|
97
|
+
private _connection;
|
|
98
|
+
constructor(options: WebGl2ShaderFilterOptions);
|
|
99
|
+
/**
|
|
100
|
+
* Execute the GLSL shader pass: compile the program on first call, bind
|
|
101
|
+
* uniforms, and render the input texture into `output`. Throws if the
|
|
102
|
+
* active backend is WebGPU — use {@link WebGpuShaderFilter} on WebGPU.
|
|
103
|
+
*/
|
|
104
|
+
apply(backend: RenderBackend, input: RenderTexture, output: RenderTexture): void;
|
|
105
|
+
destroy(): void;
|
|
106
|
+
private _ensureConnected;
|
|
107
|
+
private _createVertexBuffer;
|
|
108
|
+
private _createVao;
|
|
109
|
+
/**
|
|
110
|
+
* Marshal a non-texture uniform value to a TypedArray suitable for
|
|
111
|
+
* {@link ShaderUniform#setValue}.
|
|
112
|
+
*/
|
|
113
|
+
private _marshalValue;
|
|
114
|
+
}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import { Color } from '../../core/Color.js';
|
|
2
|
+
import { Shader } from '../shader/Shader.js';
|
|
3
|
+
import { RenderBackendType } from '../RenderBackendType.js';
|
|
4
|
+
import { RenderTargetPass } from '../RenderTargetPass.js';
|
|
5
|
+
import { RenderingPrimitives, BufferTypes, BufferUsage } from '../types.js';
|
|
6
|
+
import { createWebGl2ShaderProgram } from '../webgl2/WebGl2ShaderProgram.js';
|
|
7
|
+
import { WebGl2RenderBuffer } from '../webgl2/WebGl2RenderBuffer.js';
|
|
8
|
+
import { WebGl2VertexArrayObject } from '../webgl2/WebGl2VertexArrayObject.js';
|
|
9
|
+
import { Texture } from '../texture/Texture.js';
|
|
10
|
+
import { upgradeFragmentShaderToGl300 } from '../shader/upgradeFragmentShaderToGl300.js';
|
|
11
|
+
import { Filter } from './Filter.js';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Default fullscreen-quad vertex shader. Positions are already in clip
|
|
15
|
+
* space (-1..1), so no projection matrix is needed.
|
|
16
|
+
*/
|
|
17
|
+
const defaultVertexSource = `#version 300 es
|
|
18
|
+
in vec2 aPosition;
|
|
19
|
+
in vec2 aUv;
|
|
20
|
+
out vec2 vUv;
|
|
21
|
+
void main() {
|
|
22
|
+
vUv = aUv;
|
|
23
|
+
gl_Position = vec4(aPosition, 0.0, 1.0);
|
|
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 quadVertices = 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 vertexStride = 16;
|
|
44
|
+
/**
|
|
45
|
+
* A high-level {@link Filter} subclass that renders the input texture
|
|
46
|
+
* through a user-provided GLSL fragment shader on the **WebGL2** backend.
|
|
47
|
+
*
|
|
48
|
+
* For the WebGPU backend use {@link WebGpuShaderFilter}.
|
|
49
|
+
*
|
|
50
|
+
* ## Usage
|
|
51
|
+
*
|
|
52
|
+
* ```ts
|
|
53
|
+
* const filter = new WebGl2ShaderFilter({
|
|
54
|
+
* fragmentSource: `
|
|
55
|
+
* #version 300 es
|
|
56
|
+
* precision mediump float;
|
|
57
|
+
* uniform sampler2D uTexture;
|
|
58
|
+
* uniform vec2 uResolution;
|
|
59
|
+
* uniform float uTime;
|
|
60
|
+
* in vec2 vUv;
|
|
61
|
+
* out vec4 fragColor;
|
|
62
|
+
* void main() {
|
|
63
|
+
* fragColor = texture(uTexture, vUv);
|
|
64
|
+
* }
|
|
65
|
+
* `,
|
|
66
|
+
* uniforms: { uTime: 0.0 },
|
|
67
|
+
* });
|
|
68
|
+
*
|
|
69
|
+
* // Update uniforms each frame:
|
|
70
|
+
* filter.uniforms.uTime = performance.now() / 1000;
|
|
71
|
+
* sprite.filters = [filter];
|
|
72
|
+
* ```
|
|
73
|
+
*
|
|
74
|
+
* ## Auto-bound uniforms
|
|
75
|
+
*
|
|
76
|
+
* The backend automatically sets `uTexture` (slot 0) and `uResolution`
|
|
77
|
+
* before each draw. User uniforms start at texture slot 1.
|
|
78
|
+
*/
|
|
79
|
+
class WebGl2ShaderFilter extends Filter {
|
|
80
|
+
/**
|
|
81
|
+
* Mutable map of uniform values. Set values via property
|
|
82
|
+
* assignment; they are flushed to the GPU before each apply().
|
|
83
|
+
*
|
|
84
|
+
* filter.uniforms.uTime = 1.234;
|
|
85
|
+
* filter.uniforms.uColor = [1, 0.5, 0, 1]; // vec4
|
|
86
|
+
*/
|
|
87
|
+
uniforms;
|
|
88
|
+
_fragmentSource;
|
|
89
|
+
_vertexSource;
|
|
90
|
+
_shader = null;
|
|
91
|
+
_connection = null;
|
|
92
|
+
constructor(options) {
|
|
93
|
+
super();
|
|
94
|
+
if (!options.fragmentSource) {
|
|
95
|
+
throw new Error('WebGl2ShaderFilter requires fragmentSource for the WebGL2 backend.');
|
|
96
|
+
}
|
|
97
|
+
const autoUpgrade = options.autoUpgrade !== false;
|
|
98
|
+
this._fragmentSource = autoUpgrade
|
|
99
|
+
? upgradeFragmentShaderToGl300(options.fragmentSource)
|
|
100
|
+
: options.fragmentSource;
|
|
101
|
+
this._vertexSource = options.vertexSource ?? defaultVertexSource;
|
|
102
|
+
this.uniforms = { ...(options.uniforms ?? {}) };
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Execute the GLSL shader pass: compile the program on first call, bind
|
|
106
|
+
* uniforms, and render the input texture into `output`. Throws if the
|
|
107
|
+
* active backend is WebGPU — use {@link WebGpuShaderFilter} on WebGPU.
|
|
108
|
+
*/
|
|
109
|
+
apply(backend, input, output) {
|
|
110
|
+
if (backend.backendType === RenderBackendType.WebGpu) {
|
|
111
|
+
throw new Error('WebGl2ShaderFilter requires the WebGL2 backend. Use WebGpuShaderFilter on WebGPU.');
|
|
112
|
+
}
|
|
113
|
+
const gl2Backend = backend;
|
|
114
|
+
this._ensureConnected(gl2Backend);
|
|
115
|
+
const shader = this._shader;
|
|
116
|
+
backend.execute(new RenderTargetPass((b) => {
|
|
117
|
+
const gl2 = b;
|
|
118
|
+
// Bind shader (calls ShaderProgram.bind → gl.useProgram + sync dirty uniforms)
|
|
119
|
+
gl2.bindShader(shader);
|
|
120
|
+
// Auto-bind input texture to slot 0 (uTexture)
|
|
121
|
+
gl2.bindTexture(input, 0);
|
|
122
|
+
if (shader.uniforms.has('uTexture')) {
|
|
123
|
+
shader.getUniform('uTexture').setValue(new Int32Array([0]));
|
|
124
|
+
}
|
|
125
|
+
// Auto-bind uResolution
|
|
126
|
+
if (shader.uniforms.has('uResolution')) {
|
|
127
|
+
shader.getUniform('uResolution').setValue(new Float32Array([output.width, output.height]));
|
|
128
|
+
}
|
|
129
|
+
// Sync user uniforms — texture uniforms start at slot 1
|
|
130
|
+
let textureSlot = 1;
|
|
131
|
+
for (const [name, value] of Object.entries(this.uniforms)) {
|
|
132
|
+
if (!shader.uniforms.has(name)) {
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
const uniform = shader.getUniform(name);
|
|
136
|
+
if (value instanceof Texture) {
|
|
137
|
+
gl2.bindTexture(value, textureSlot);
|
|
138
|
+
uniform.setValue(new Int32Array([textureSlot]));
|
|
139
|
+
textureSlot++;
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
uniform.setValue(this._marshalValue(value));
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Flush dirty uniforms to the GPU
|
|
146
|
+
shader.sync();
|
|
147
|
+
// Draw the fullscreen quad
|
|
148
|
+
const connection = this._connection;
|
|
149
|
+
gl2.bindVertexArrayObject(connection.vao);
|
|
150
|
+
connection.vao.draw(4, 0, RenderingPrimitives.TriangleStrip);
|
|
151
|
+
}, {
|
|
152
|
+
target: output,
|
|
153
|
+
view: output.view,
|
|
154
|
+
clearColor: Color.transparentBlack,
|
|
155
|
+
}));
|
|
156
|
+
}
|
|
157
|
+
destroy() {
|
|
158
|
+
if (this._connection !== null) {
|
|
159
|
+
this._connection.vertexBuffer.destroy();
|
|
160
|
+
this._connection.vao.destroy();
|
|
161
|
+
this._connection = null;
|
|
162
|
+
}
|
|
163
|
+
if (this._shader !== null) {
|
|
164
|
+
this._shader.destroy();
|
|
165
|
+
this._shader = null;
|
|
166
|
+
}
|
|
167
|
+
for (const key of Object.keys(this.uniforms)) {
|
|
168
|
+
delete this.uniforms[key];
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// ---------------------------------------------------------------------------
|
|
172
|
+
// Private helpers
|
|
173
|
+
// ---------------------------------------------------------------------------
|
|
174
|
+
_ensureConnected(backend) {
|
|
175
|
+
if (this._shader !== null) {
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
const gl = backend.context;
|
|
179
|
+
// Create and connect the shader
|
|
180
|
+
const shader = new Shader(this._vertexSource, this._fragmentSource);
|
|
181
|
+
shader.connect(createWebGl2ShaderProgram(gl));
|
|
182
|
+
// Force shader finalization so attributes are populated before VAO setup.
|
|
183
|
+
// sync() calls finalize() internally, which blocks until compilation is
|
|
184
|
+
// done and extracts attribute/uniform reflection data.
|
|
185
|
+
shader.sync();
|
|
186
|
+
// Build the fullscreen-quad vertex buffer (static, per-instance)
|
|
187
|
+
const vaoHandle = gl.createVertexArray();
|
|
188
|
+
if (vaoHandle === null) {
|
|
189
|
+
throw new Error('WebGl2ShaderFilter: could not create vertex array object.');
|
|
190
|
+
}
|
|
191
|
+
const vertexBuffer = this._createVertexBuffer(gl);
|
|
192
|
+
const vao = this._createVao(gl, vaoHandle, shader, vertexBuffer);
|
|
193
|
+
this._shader = shader;
|
|
194
|
+
this._connection = { gl, vertexBuffer, vao };
|
|
195
|
+
}
|
|
196
|
+
_createVertexBuffer(gl) {
|
|
197
|
+
const handle = gl.createBuffer();
|
|
198
|
+
if (handle === null) {
|
|
199
|
+
throw new Error('WebGl2ShaderFilter: could not create vertex buffer.');
|
|
200
|
+
}
|
|
201
|
+
const buffer = new WebGl2RenderBuffer(BufferTypes.ArrayBuffer, quadVertices, BufferUsage.StaticDraw);
|
|
202
|
+
buffer.connect({
|
|
203
|
+
bind: () => {
|
|
204
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, handle);
|
|
205
|
+
},
|
|
206
|
+
upload: (buf, _offset) => {
|
|
207
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, handle);
|
|
208
|
+
gl.bufferData(gl.ARRAY_BUFFER, buf.data, buf.usage);
|
|
209
|
+
},
|
|
210
|
+
destroy: (buf) => {
|
|
211
|
+
gl.deleteBuffer(handle);
|
|
212
|
+
buf.disconnect();
|
|
213
|
+
},
|
|
214
|
+
});
|
|
215
|
+
return buffer;
|
|
216
|
+
}
|
|
217
|
+
_createVao(gl, vaoHandle, shader, vertexBuffer) {
|
|
218
|
+
let appliedVersion = -1;
|
|
219
|
+
const vao = new WebGl2VertexArrayObject(RenderingPrimitives.TriangleStrip);
|
|
220
|
+
if (shader.attributes.has('aPosition')) {
|
|
221
|
+
vao.addAttribute(vertexBuffer, shader.getAttribute('aPosition'), gl.FLOAT, false, vertexStride, 0);
|
|
222
|
+
}
|
|
223
|
+
if (shader.attributes.has('aUv')) {
|
|
224
|
+
vao.addAttribute(vertexBuffer, shader.getAttribute('aUv'), gl.FLOAT, false, vertexStride, 8);
|
|
225
|
+
}
|
|
226
|
+
vao.connect({
|
|
227
|
+
bind: (v) => {
|
|
228
|
+
gl.bindVertexArray(vaoHandle);
|
|
229
|
+
if (appliedVersion !== v.version) {
|
|
230
|
+
let lastBuffer = null;
|
|
231
|
+
for (const attribute of v.attributes) {
|
|
232
|
+
const buf = attribute.buffer;
|
|
233
|
+
if (lastBuffer !== buf) {
|
|
234
|
+
buf.bind();
|
|
235
|
+
lastBuffer = buf;
|
|
236
|
+
}
|
|
237
|
+
gl.vertexAttribPointer(attribute.location, attribute.size, attribute.type, attribute.normalized, attribute.stride, attribute.start);
|
|
238
|
+
gl.enableVertexAttribArray(attribute.location);
|
|
239
|
+
}
|
|
240
|
+
appliedVersion = v.version;
|
|
241
|
+
}
|
|
242
|
+
},
|
|
243
|
+
unbind: () => {
|
|
244
|
+
gl.bindVertexArray(null);
|
|
245
|
+
},
|
|
246
|
+
draw: (_v, size, start, type) => {
|
|
247
|
+
gl.drawArrays(type, start, size);
|
|
248
|
+
},
|
|
249
|
+
destroy: (v) => {
|
|
250
|
+
gl.deleteVertexArray(vaoHandle);
|
|
251
|
+
v.disconnect();
|
|
252
|
+
},
|
|
253
|
+
});
|
|
254
|
+
return vao;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Marshal a non-texture uniform value to a TypedArray suitable for
|
|
258
|
+
* {@link ShaderUniform#setValue}.
|
|
259
|
+
*/
|
|
260
|
+
_marshalValue(value) {
|
|
261
|
+
if (value instanceof Float32Array || value instanceof Int32Array) {
|
|
262
|
+
return value;
|
|
263
|
+
}
|
|
264
|
+
if (typeof value === 'number') {
|
|
265
|
+
return new Float32Array([value]);
|
|
266
|
+
}
|
|
267
|
+
// readonly tuple [a, b], [a, b, c], or [a, b, c, d]
|
|
268
|
+
return new Float32Array(value);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
export { WebGl2ShaderFilter };
|
|
273
|
+
//# sourceMappingURL=WebGl2ShaderFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebGl2ShaderFilter.js","sources":["../../../../../src/rendering/filters/WebGl2ShaderFilter.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import type { RenderTexture } from '@/rendering/texture/RenderTexture';
|
|
2
|
+
import type { RenderBackend } from '@/rendering/RenderBackend';
|
|
3
|
+
import { Filter } from './Filter';
|
|
4
|
+
import type { ShaderFilterUniformValue } from './WebGl2ShaderFilter';
|
|
5
|
+
export type { ShaderFilterUniformValue };
|
|
6
|
+
export interface WebGpuShaderFilterOptions {
|
|
7
|
+
/**
|
|
8
|
+
* WGSL source code for the fragment shader. Required.
|
|
9
|
+
*
|
|
10
|
+
* The shader receives these auto-bound entries via @group(0):
|
|
11
|
+
* @group(0) @binding(0) var<uniform> uResolution: vec2<f32>; // output dimensions
|
|
12
|
+
* @group(0) @binding(1) var uTexture: texture_2d<f32>;
|
|
13
|
+
* @group(0) @binding(2) var uSampler: sampler;
|
|
14
|
+
*
|
|
15
|
+
* User uniforms go in @group(1):
|
|
16
|
+
* @group(1) @binding(0) var<uniform> uniforms: <UserUniformsStruct>;
|
|
17
|
+
*
|
|
18
|
+
* User uniforms are packed into a single uniform buffer with 16-byte
|
|
19
|
+
* alignment per member. Declare your WGSL struct to match this layout.
|
|
20
|
+
* Texture/RenderTexture uniforms are placed as separate bind group entries
|
|
21
|
+
* starting at @group(1) @binding(1).
|
|
22
|
+
*/
|
|
23
|
+
fragmentSource: string;
|
|
24
|
+
/**
|
|
25
|
+
* WGSL source for the vertex shader. Optional; defaults to a fullscreen
|
|
26
|
+
* pass-through quad with a varying `vUv: vec2<f32>`.
|
|
27
|
+
*/
|
|
28
|
+
vertexSource?: string;
|
|
29
|
+
/**
|
|
30
|
+
* Initial uniform values. Can be updated at runtime by writing
|
|
31
|
+
* to the `uniforms` property:
|
|
32
|
+
*
|
|
33
|
+
* filter.uniforms.uTime = performance.now() / 1000;
|
|
34
|
+
*/
|
|
35
|
+
uniforms?: Record<string, ShaderFilterUniformValue>;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* A high-level {@link Filter} subclass that renders the input texture through
|
|
39
|
+
* a user-provided WGSL fragment shader on the **WebGPU** backend.
|
|
40
|
+
*
|
|
41
|
+
* For the WebGL2 backend use {@link WebGl2ShaderFilter}.
|
|
42
|
+
*
|
|
43
|
+
* ## Usage
|
|
44
|
+
*
|
|
45
|
+
* ```ts
|
|
46
|
+
* const filter = new WebGpuShaderFilter({
|
|
47
|
+
* fragmentSource: `
|
|
48
|
+
* @group(0) @binding(0) var<uniform> uResolution: vec2<f32>;
|
|
49
|
+
* @group(0) @binding(1) var uTexture: texture_2d<f32>;
|
|
50
|
+
* @group(0) @binding(2) var uSampler: sampler;
|
|
51
|
+
*
|
|
52
|
+
* @fragment
|
|
53
|
+
* fn main(@location(0) vUv: vec2<f32>) -> @location(0) vec4<f32> {
|
|
54
|
+
* return textureSample(uTexture, uSampler, vUv);
|
|
55
|
+
* }
|
|
56
|
+
* `,
|
|
57
|
+
* uniforms: { uTime: 0.0 },
|
|
58
|
+
* });
|
|
59
|
+
*
|
|
60
|
+
* // Update uniforms each frame:
|
|
61
|
+
* filter.uniforms.uTime = performance.now() / 1000;
|
|
62
|
+
* sprite.filters = [filter];
|
|
63
|
+
* ```
|
|
64
|
+
*
|
|
65
|
+
* ## Auto-bound uniforms (group 0)
|
|
66
|
+
*
|
|
67
|
+
* - `@binding(0)` — `var<uniform> uResolution: vec2<f32>` (output dimensions)
|
|
68
|
+
* - `@binding(1)` — `var uTexture: texture_2d<f32>` (filter input)
|
|
69
|
+
* - `@binding(2)` — `var uSampler: sampler`
|
|
70
|
+
*
|
|
71
|
+
* ## User uniforms (group 1)
|
|
72
|
+
*
|
|
73
|
+
* All non-texture user uniforms are packed into a single uniform buffer at
|
|
74
|
+
* `@binding(0)`. Each member occupies a 16-byte aligned slot (conservative
|
|
75
|
+
* alignment). Declare your WGSL struct to match this layout.
|
|
76
|
+
*
|
|
77
|
+
* Texture/RenderTexture uniforms are bound as separate entries starting at
|
|
78
|
+
* `@binding(1)` (texture) and `@binding(N+1)` (sampler), in declaration order.
|
|
79
|
+
*/
|
|
80
|
+
export declare class WebGpuShaderFilter extends Filter {
|
|
81
|
+
/**
|
|
82
|
+
* Mutable map of uniform values. Set values via property assignment;
|
|
83
|
+
* they are flushed to the GPU before each apply().
|
|
84
|
+
*
|
|
85
|
+
* filter.uniforms.uTime = 1.234;
|
|
86
|
+
* filter.uniforms.uColor = [1, 0.5, 0, 1]; // vec4
|
|
87
|
+
*/
|
|
88
|
+
readonly uniforms: Record<string, ShaderFilterUniformValue>;
|
|
89
|
+
private readonly _fragmentSource;
|
|
90
|
+
private readonly _vertexSource;
|
|
91
|
+
private _connection;
|
|
92
|
+
constructor(options: WebGpuShaderFilterOptions);
|
|
93
|
+
/**
|
|
94
|
+
* Execute the WGSL shader pass: flush uniforms, build bind groups, and
|
|
95
|
+
* render the input texture into `output`. Throws if the active backend is
|
|
96
|
+
* not WebGPU — use {@link WebGl2ShaderFilter} on WebGL2.
|
|
97
|
+
*/
|
|
98
|
+
apply(backend: RenderBackend, input: RenderTexture, output: RenderTexture): void;
|
|
99
|
+
destroy(): void;
|
|
100
|
+
private _ensureConnected;
|
|
101
|
+
/**
|
|
102
|
+
* Build the GPUBindGroupLayout for group 1 (user uniforms).
|
|
103
|
+
*
|
|
104
|
+
* Layout:
|
|
105
|
+
* binding 0 — uniform buffer (scalar/vector uniforms), if any scalar uniforms exist
|
|
106
|
+
* binding 1, 3, 5, ... — texture entries (one per texture uniform, in order)
|
|
107
|
+
* binding 2, 4, 6, ... — sampler entries (paired with textures)
|
|
108
|
+
*/
|
|
109
|
+
private _buildUserBindGroupLayout;
|
|
110
|
+
/**
|
|
111
|
+
* Build and return the GPUBindGroup for group 1 on each frame.
|
|
112
|
+
* Marshals scalar uniforms into the user uniform buffer and assembles
|
|
113
|
+
* texture/sampler bind group entries.
|
|
114
|
+
*/
|
|
115
|
+
private _buildUserBindGroup;
|
|
116
|
+
}
|