@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,7 +1,7 @@
|
|
|
1
1
|
import { Color } from '../../core/Color.js';
|
|
2
|
-
import { BlendModes } from '../types.js';
|
|
3
|
-
import { Sprite } from '../sprite/Sprite.js';
|
|
4
2
|
import { RenderTargetPass } from '../RenderTargetPass.js';
|
|
3
|
+
import { Sprite } from '../sprite/Sprite.js';
|
|
4
|
+
import { BlendModes } from '../types.js';
|
|
5
5
|
import { Filter } from './Filter.js';
|
|
6
6
|
|
|
7
7
|
/**
|
|
@@ -22,13 +22,7 @@ class ColorFilter extends Filter {
|
|
|
22
22
|
return this._color;
|
|
23
23
|
}
|
|
24
24
|
apply(backend, input, output) {
|
|
25
|
-
this._sprite
|
|
26
|
-
.setTexture(input)
|
|
27
|
-
.setBlendMode(BlendModes.Normal)
|
|
28
|
-
.setTint(this._color)
|
|
29
|
-
.setPosition(0, 0)
|
|
30
|
-
.setRotation(0)
|
|
31
|
-
.setScale(1, 1);
|
|
25
|
+
this._sprite.setTexture(input).setBlendMode(BlendModes.Normal).setTint(this._color).setPosition(0, 0).setRotation(0).setScale(1, 1);
|
|
32
26
|
this._sprite.width = output.width;
|
|
33
27
|
this._sprite.height = output.height;
|
|
34
28
|
backend.execute(new RenderTargetPass(() => {
|
|
@@ -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":";;;;;;AASA;;;;;;AAMG;AACG,MAAO,WAAY,SAAQ,MAAM,CAAA;AACpB,IAAA,MAAM;AACN,IAAA,OAAO,GAAW,IAAI,MAAM,CAAC,IAAI,CAAC;IAEnD,WAAA,CAAmB,KAAA,GAAe,KAAK,CAAC,KAAK,EAAA;AAC3C,QAAA,KAAK,EAAE;AAEP,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE;IAC7B;AAEA,IAAA,IAAW,KAAK,GAAA;QACd,OAAO,IAAI,CAAC,MAAM;IACpB;AAEO,IAAA,KAAK,CAAC,OAAsB,EAAE,KAAoB,EAAE,MAAqB,EAAA;AAC9E,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;QAEnI,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;QACjC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;AAEnC,QAAA,OAAO,CAAC,OAAO,CACb,IAAI,gBAAgB,CAClB,MAAK;AACH,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;AAC9B,QAAA,CAAC,EACD;AACE,YAAA,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,UAAU,EAAE,KAAK,CAAC,gBAAgB;AACnC,SAAA,CACF,CACF;IACH;IAEgB,OAAO,GAAA;AACrB,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;IACvB;AACD;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { RenderTexture } from '@/rendering/texture/RenderTexture';
|
|
2
1
|
import type { RenderBackend } from '@/rendering/RenderBackend';
|
|
2
|
+
import type { RenderTexture } from '@/rendering/texture/RenderTexture';
|
|
3
3
|
/**
|
|
4
4
|
* Abstract base class for post-process filters applied to a drawable's
|
|
5
5
|
* render output.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Filter.js","sources":["../../../../../src/rendering/filters/Filter.ts"],"sourcesContent":[null],"names":[],"mappings":"AAGA;;;;;;;;;;AAUG;MACmB,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"Filter.js","sources":["../../../../../src/rendering/filters/Filter.ts"],"sourcesContent":[null],"names":[],"mappings":"AAGA;;;;;;;;;;AAUG;MACmB,MAAM,CAAA;AAQ1B;;;;;AAKG;IACI,OAAO,GAAA;;IAEd;AACD;;;;"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { RenderBackend } from '@/rendering/RenderBackend';
|
|
2
|
+
import type { RenderTexture } from '@/rendering/texture/RenderTexture';
|
|
3
|
+
import { Texture } from '@/rendering/texture/Texture';
|
|
4
|
+
import { Filter } from './Filter';
|
|
5
|
+
/** Storage layout for a Look-Up Table texture. */
|
|
6
|
+
export type LutMode = '1d' | '3d';
|
|
7
|
+
/** Construction options for {@link LutFilter}. */
|
|
8
|
+
export interface LutFilterOptions {
|
|
9
|
+
/**
|
|
10
|
+
* Storage mode of the LUT texture.
|
|
11
|
+
* - `'1d'` — texture is `N×1`, indexed by the source pixel's red channel. Used for palette mapping and indexed-color effects.
|
|
12
|
+
* - `'3d'` — texture is `N²×N`, indexed by the full source RGB. Used for color grading, tone mapping, film emulation. Default `'3d'`.
|
|
13
|
+
*/
|
|
14
|
+
mode?: LutMode;
|
|
15
|
+
/**
|
|
16
|
+
* Size `N` of a 3D LUT (cube edge length). Common values: 8, 16, 17, 32, 33. Ignored for 1D mode.
|
|
17
|
+
* Default `17` (matches DaVinci/OBS export defaults).
|
|
18
|
+
*/
|
|
19
|
+
size?: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* A {@link Filter} that maps every pixel of the input through a Look-Up Table texture.
|
|
23
|
+
*
|
|
24
|
+
* Two storage modes:
|
|
25
|
+
* - **1D LUT** (`N×1`, default `N=256`): indexed by the source's red channel only. Used for palette cycling, indexed-colour effects, and luminance-based recoloring.
|
|
26
|
+
* - **3D LUT** (`N²×N` unwrapped cube): indexed by the full source RGB with trilinear interpolation between slices. Used for cinematic colour grading, tone mapping, film stock emulation, accessibility filters (color-blindness simulation), and similar standard colour-pipeline tasks. `N=17` matches DaVinci/OBS export defaults.
|
|
27
|
+
*
|
|
28
|
+
* ## Quick start
|
|
29
|
+
*
|
|
30
|
+
* ```ts
|
|
31
|
+
* // Color-graded look from a 17³ LUT exported by your DCC/grading tool:
|
|
32
|
+
* const lut = LutFilter.fromImage(myLutImage); // 289×17 PNG
|
|
33
|
+
* const filter = new LutFilter({ mode: '3d', size: 17 }).setLut(lut);
|
|
34
|
+
* sprite.filters = [filter];
|
|
35
|
+
*
|
|
36
|
+
* // Palette cycling — rotate a 1D palette every frame:
|
|
37
|
+
* const palette = LutFilter.identityLut1D();
|
|
38
|
+
* const filter = new LutFilter({ mode: '1d' }).setLut(palette);
|
|
39
|
+
* // Replace `palette.source` per frame with a shifted copy.
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* Internally creates a {@link WebGl2ShaderFilter} or {@link WebGpuShaderFilter} on first
|
|
43
|
+
* apply, depending on the active backend.
|
|
44
|
+
*/
|
|
45
|
+
export declare class LutFilter extends Filter {
|
|
46
|
+
/**
|
|
47
|
+
* Build a 1D identity LUT (`N×1` texture with smooth grayscale gradient).
|
|
48
|
+
*
|
|
49
|
+
* Useful as a starting point: applying this LUT is a no-op, mutate
|
|
50
|
+
* `texture.source` to derive cycling palettes, posterization, sepia,
|
|
51
|
+
* grayscale, etc.
|
|
52
|
+
*/
|
|
53
|
+
static identityLut1D(size?: number): Texture;
|
|
54
|
+
/**
|
|
55
|
+
* Build a 3D identity LUT (`N²×N` unwrapped cube texture).
|
|
56
|
+
*
|
|
57
|
+
* Applying this LUT is a no-op for any RGB input. Use as a starting point
|
|
58
|
+
* for procedural grading or as a fallback when a real LUT image hasn't
|
|
59
|
+
* loaded yet.
|
|
60
|
+
*/
|
|
61
|
+
static identityLut3D(size?: number): Texture;
|
|
62
|
+
/**
|
|
63
|
+
* Wrap an image element as a LUT texture with the right sampler defaults
|
|
64
|
+
* (linear filtering, clamp-to-edge, no mipmaps).
|
|
65
|
+
*
|
|
66
|
+
* Accepts the standard LUT image conventions exported by Photoshop,
|
|
67
|
+
* DaVinci Resolve, OBS, and similar tools — typically a `289×17` or
|
|
68
|
+
* `1024×32` strip for 3D LUTs, or a `256×1` strip for 1D.
|
|
69
|
+
*/
|
|
70
|
+
static fromImage(image: HTMLImageElement | HTMLCanvasElement): Texture;
|
|
71
|
+
private readonly _mode;
|
|
72
|
+
private readonly _size;
|
|
73
|
+
private _lut;
|
|
74
|
+
private _backendFilter;
|
|
75
|
+
constructor(options?: LutFilterOptions);
|
|
76
|
+
/** The LUT mode this filter was constructed with. */
|
|
77
|
+
get mode(): LutMode;
|
|
78
|
+
/** The cube edge size (3D only). For 1D this returns the constructor-time size hint. */
|
|
79
|
+
get size(): number;
|
|
80
|
+
/** The current LUT texture. */
|
|
81
|
+
get lut(): Texture;
|
|
82
|
+
/** Replace the LUT texture. Returns `this` for chaining. */
|
|
83
|
+
setLut(lut: Texture): this;
|
|
84
|
+
apply(backend: RenderBackend, input: RenderTexture, output: RenderTexture): void;
|
|
85
|
+
destroy(): void;
|
|
86
|
+
private _createBackendFilter;
|
|
87
|
+
}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import { RenderBackendType } from '../RenderBackendType.js';
|
|
2
|
+
import { Texture } from '../texture/Texture.js';
|
|
3
|
+
import { WrapModes, ScaleModes } from '../types.js';
|
|
4
|
+
import { Filter } from './Filter.js';
|
|
5
|
+
import { WebGl2ShaderFilter } from './WebGl2ShaderFilter.js';
|
|
6
|
+
import { WebGpuShaderFilter } from './WebGpuShaderFilter.js';
|
|
7
|
+
|
|
8
|
+
const glsl1dFragment = `#version 300 es
|
|
9
|
+
precision mediump float;
|
|
10
|
+
uniform sampler2D uTexture;
|
|
11
|
+
uniform sampler2D uLut;
|
|
12
|
+
in vec2 vUv;
|
|
13
|
+
out vec4 fragColor;
|
|
14
|
+
void main() {
|
|
15
|
+
vec4 src = texture(uTexture, vUv);
|
|
16
|
+
vec3 graded = texture(uLut, vec2(src.r, 0.5)).rgb;
|
|
17
|
+
fragColor = vec4(graded, src.a);
|
|
18
|
+
}
|
|
19
|
+
`;
|
|
20
|
+
const glsl3dFragment = `#version 300 es
|
|
21
|
+
precision mediump float;
|
|
22
|
+
uniform sampler2D uTexture;
|
|
23
|
+
uniform sampler2D uLut;
|
|
24
|
+
uniform float uLutSize;
|
|
25
|
+
in vec2 vUv;
|
|
26
|
+
out vec4 fragColor;
|
|
27
|
+
|
|
28
|
+
vec3 sampleLut3d(vec3 c) {
|
|
29
|
+
float n = uLutSize;
|
|
30
|
+
float scaled = clamp(c.b, 0.0, 1.0) * (n - 1.0);
|
|
31
|
+
float bLow = floor(scaled);
|
|
32
|
+
float bHigh = min(bLow + 1.0, n - 1.0);
|
|
33
|
+
float bFrac = scaled - bLow;
|
|
34
|
+
float invN2 = 1.0 / (n * n);
|
|
35
|
+
float invN = 1.0 / n;
|
|
36
|
+
float halfPx = 0.5 / (n * n);
|
|
37
|
+
float halfRow = 0.5 / n;
|
|
38
|
+
float rOff = clamp(c.r, 0.0, 1.0) * (n - 1.0) * invN2;
|
|
39
|
+
float gOff = clamp(c.g, 0.0, 1.0) * (n - 1.0) * invN + halfRow;
|
|
40
|
+
float uLow = bLow * invN + rOff + halfPx;
|
|
41
|
+
float uHigh = bHigh * invN + rOff + halfPx;
|
|
42
|
+
vec3 lo = texture(uLut, vec2(uLow, gOff)).rgb;
|
|
43
|
+
vec3 hi = texture(uLut, vec2(uHigh, gOff)).rgb;
|
|
44
|
+
return mix(lo, hi, bFrac);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
void main() {
|
|
48
|
+
vec4 src = texture(uTexture, vUv);
|
|
49
|
+
fragColor = vec4(sampleLut3d(src.rgb), src.a);
|
|
50
|
+
}
|
|
51
|
+
`;
|
|
52
|
+
const wgsl1dFragment = `
|
|
53
|
+
@group(0) @binding(1) var uTexture: texture_2d<f32>;
|
|
54
|
+
@group(0) @binding(2) var uSampler: sampler;
|
|
55
|
+
@group(1) @binding(1) var uLut: texture_2d<f32>;
|
|
56
|
+
|
|
57
|
+
@fragment
|
|
58
|
+
fn fragMain(@location(0) vUv: vec2<f32>) -> @location(0) vec4<f32> {
|
|
59
|
+
let src = textureSample(uTexture, uSampler, vUv);
|
|
60
|
+
let graded = textureSample(uLut, uSampler, vec2<f32>(src.r, 0.5)).rgb;
|
|
61
|
+
return vec4<f32>(graded, src.a);
|
|
62
|
+
}
|
|
63
|
+
`;
|
|
64
|
+
const wgsl3dFragment = `
|
|
65
|
+
struct Uniforms {
|
|
66
|
+
uLutSize: f32,
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
@group(0) @binding(1) var uTexture: texture_2d<f32>;
|
|
70
|
+
@group(0) @binding(2) var uSampler: sampler;
|
|
71
|
+
@group(1) @binding(0) var<uniform> uniforms: Uniforms;
|
|
72
|
+
@group(1) @binding(1) var uLut: texture_2d<f32>;
|
|
73
|
+
|
|
74
|
+
fn sampleLut3d(c: vec3<f32>) -> vec3<f32> {
|
|
75
|
+
let n = uniforms.uLutSize;
|
|
76
|
+
let scaled = clamp(c.b, 0.0, 1.0) * (n - 1.0);
|
|
77
|
+
let bLow = floor(scaled);
|
|
78
|
+
let bHigh = min(bLow + 1.0, n - 1.0);
|
|
79
|
+
let bFrac = scaled - bLow;
|
|
80
|
+
let invN2 = 1.0 / (n * n);
|
|
81
|
+
let invN = 1.0 / n;
|
|
82
|
+
let halfPx = 0.5 / (n * n);
|
|
83
|
+
let halfRow = 0.5 / n;
|
|
84
|
+
let rOff = clamp(c.r, 0.0, 1.0) * (n - 1.0) * invN2;
|
|
85
|
+
let gOff = clamp(c.g, 0.0, 1.0) * (n - 1.0) * invN + halfRow;
|
|
86
|
+
let uLow = bLow * invN + rOff + halfPx;
|
|
87
|
+
let uHigh = bHigh * invN + rOff + halfPx;
|
|
88
|
+
let lo = textureSample(uLut, uSampler, vec2<f32>(uLow, gOff)).rgb;
|
|
89
|
+
let hi = textureSample(uLut, uSampler, vec2<f32>(uHigh, gOff)).rgb;
|
|
90
|
+
return mix(lo, hi, bFrac);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
@fragment
|
|
94
|
+
fn fragMain(@location(0) vUv: vec2<f32>) -> @location(0) vec4<f32> {
|
|
95
|
+
let src = textureSample(uTexture, uSampler, vUv);
|
|
96
|
+
return vec4<f32>(sampleLut3d(src.rgb), src.a);
|
|
97
|
+
}
|
|
98
|
+
`;
|
|
99
|
+
/**
|
|
100
|
+
* A {@link Filter} that maps every pixel of the input through a Look-Up Table texture.
|
|
101
|
+
*
|
|
102
|
+
* Two storage modes:
|
|
103
|
+
* - **1D LUT** (`N×1`, default `N=256`): indexed by the source's red channel only. Used for palette cycling, indexed-colour effects, and luminance-based recoloring.
|
|
104
|
+
* - **3D LUT** (`N²×N` unwrapped cube): indexed by the full source RGB with trilinear interpolation between slices. Used for cinematic colour grading, tone mapping, film stock emulation, accessibility filters (color-blindness simulation), and similar standard colour-pipeline tasks. `N=17` matches DaVinci/OBS export defaults.
|
|
105
|
+
*
|
|
106
|
+
* ## Quick start
|
|
107
|
+
*
|
|
108
|
+
* ```ts
|
|
109
|
+
* // Color-graded look from a 17³ LUT exported by your DCC/grading tool:
|
|
110
|
+
* const lut = LutFilter.fromImage(myLutImage); // 289×17 PNG
|
|
111
|
+
* const filter = new LutFilter({ mode: '3d', size: 17 }).setLut(lut);
|
|
112
|
+
* sprite.filters = [filter];
|
|
113
|
+
*
|
|
114
|
+
* // Palette cycling — rotate a 1D palette every frame:
|
|
115
|
+
* const palette = LutFilter.identityLut1D();
|
|
116
|
+
* const filter = new LutFilter({ mode: '1d' }).setLut(palette);
|
|
117
|
+
* // Replace `palette.source` per frame with a shifted copy.
|
|
118
|
+
* ```
|
|
119
|
+
*
|
|
120
|
+
* Internally creates a {@link WebGl2ShaderFilter} or {@link WebGpuShaderFilter} on first
|
|
121
|
+
* apply, depending on the active backend.
|
|
122
|
+
*/
|
|
123
|
+
class LutFilter extends Filter {
|
|
124
|
+
/**
|
|
125
|
+
* Build a 1D identity LUT (`N×1` texture with smooth grayscale gradient).
|
|
126
|
+
*
|
|
127
|
+
* Useful as a starting point: applying this LUT is a no-op, mutate
|
|
128
|
+
* `texture.source` to derive cycling palettes, posterization, sepia,
|
|
129
|
+
* grayscale, etc.
|
|
130
|
+
*/
|
|
131
|
+
static identityLut1D(size = 256) {
|
|
132
|
+
const canvas = document.createElement('canvas');
|
|
133
|
+
canvas.width = size;
|
|
134
|
+
canvas.height = 1;
|
|
135
|
+
const ctx = canvas.getContext('2d');
|
|
136
|
+
if (ctx === null) {
|
|
137
|
+
throw new Error('LutFilter.identityLut1D: 2D canvas context unavailable.');
|
|
138
|
+
}
|
|
139
|
+
const image = ctx.createImageData(size, 1);
|
|
140
|
+
for (let i = 0; i < size; i++) {
|
|
141
|
+
const v = Math.round((i / (size - 1)) * 255);
|
|
142
|
+
const offset = i * 4;
|
|
143
|
+
image.data[offset] = v;
|
|
144
|
+
image.data[offset + 1] = v;
|
|
145
|
+
image.data[offset + 2] = v;
|
|
146
|
+
image.data[offset + 3] = 255;
|
|
147
|
+
}
|
|
148
|
+
ctx.putImageData(image, 0, 0);
|
|
149
|
+
return new Texture(canvas, { scaleMode: ScaleModes.Linear, wrapMode: WrapModes.ClampToEdge, generateMipMap: false });
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Build a 3D identity LUT (`N²×N` unwrapped cube texture).
|
|
153
|
+
*
|
|
154
|
+
* Applying this LUT is a no-op for any RGB input. Use as a starting point
|
|
155
|
+
* for procedural grading or as a fallback when a real LUT image hasn't
|
|
156
|
+
* loaded yet.
|
|
157
|
+
*/
|
|
158
|
+
static identityLut3D(size = 17) {
|
|
159
|
+
const width = size * size;
|
|
160
|
+
const canvas = document.createElement('canvas');
|
|
161
|
+
canvas.width = width;
|
|
162
|
+
canvas.height = size;
|
|
163
|
+
const ctx = canvas.getContext('2d');
|
|
164
|
+
if (ctx === null) {
|
|
165
|
+
throw new Error('LutFilter.identityLut3D: 2D canvas context unavailable.');
|
|
166
|
+
}
|
|
167
|
+
const image = ctx.createImageData(width, size);
|
|
168
|
+
const max = size - 1;
|
|
169
|
+
for (let bIndex = 0; bIndex < size; bIndex++) {
|
|
170
|
+
const b = Math.round((bIndex / max) * 255);
|
|
171
|
+
for (let g = 0; g < size; g++) {
|
|
172
|
+
const gVal = Math.round((g / max) * 255);
|
|
173
|
+
for (let r = 0; r < size; r++) {
|
|
174
|
+
const rVal = Math.round((r / max) * 255);
|
|
175
|
+
const x = bIndex * size + r;
|
|
176
|
+
const y = g;
|
|
177
|
+
const offset = (y * width + x) * 4;
|
|
178
|
+
image.data[offset] = rVal;
|
|
179
|
+
image.data[offset + 1] = gVal;
|
|
180
|
+
image.data[offset + 2] = b;
|
|
181
|
+
image.data[offset + 3] = 255;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
ctx.putImageData(image, 0, 0);
|
|
186
|
+
return new Texture(canvas, { scaleMode: ScaleModes.Linear, wrapMode: WrapModes.ClampToEdge, generateMipMap: false });
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Wrap an image element as a LUT texture with the right sampler defaults
|
|
190
|
+
* (linear filtering, clamp-to-edge, no mipmaps).
|
|
191
|
+
*
|
|
192
|
+
* Accepts the standard LUT image conventions exported by Photoshop,
|
|
193
|
+
* DaVinci Resolve, OBS, and similar tools — typically a `289×17` or
|
|
194
|
+
* `1024×32` strip for 3D LUTs, or a `256×1` strip for 1D.
|
|
195
|
+
*/
|
|
196
|
+
static fromImage(image) {
|
|
197
|
+
return new Texture(image, { scaleMode: ScaleModes.Linear, wrapMode: WrapModes.ClampToEdge, generateMipMap: false });
|
|
198
|
+
}
|
|
199
|
+
_mode;
|
|
200
|
+
_size;
|
|
201
|
+
_lut;
|
|
202
|
+
_backendFilter = null;
|
|
203
|
+
constructor(options = {}) {
|
|
204
|
+
super();
|
|
205
|
+
this._mode = options.mode ?? '3d';
|
|
206
|
+
this._size = Math.max(2, Math.floor(options.size ?? 17));
|
|
207
|
+
this._lut = this._mode === '1d' ? LutFilter.identityLut1D() : LutFilter.identityLut3D(this._size);
|
|
208
|
+
}
|
|
209
|
+
/** The LUT mode this filter was constructed with. */
|
|
210
|
+
get mode() {
|
|
211
|
+
return this._mode;
|
|
212
|
+
}
|
|
213
|
+
/** The cube edge size (3D only). For 1D this returns the constructor-time size hint. */
|
|
214
|
+
get size() {
|
|
215
|
+
return this._size;
|
|
216
|
+
}
|
|
217
|
+
/** The current LUT texture. */
|
|
218
|
+
get lut() {
|
|
219
|
+
return this._lut;
|
|
220
|
+
}
|
|
221
|
+
/** Replace the LUT texture. Returns `this` for chaining. */
|
|
222
|
+
setLut(lut) {
|
|
223
|
+
this._lut = lut;
|
|
224
|
+
if (this._backendFilter !== null) {
|
|
225
|
+
this._backendFilter.uniforms.uLut = lut;
|
|
226
|
+
}
|
|
227
|
+
return this;
|
|
228
|
+
}
|
|
229
|
+
apply(backend, input, output) {
|
|
230
|
+
if (this._backendFilter === null) {
|
|
231
|
+
this._backendFilter = this._createBackendFilter(backend);
|
|
232
|
+
}
|
|
233
|
+
this._backendFilter.apply(backend, input, output);
|
|
234
|
+
}
|
|
235
|
+
destroy() {
|
|
236
|
+
if (this._backendFilter !== null) {
|
|
237
|
+
this._backendFilter.destroy();
|
|
238
|
+
this._backendFilter = null;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
_createBackendFilter(backend) {
|
|
242
|
+
const is3d = this._mode === '3d';
|
|
243
|
+
const uniforms = { uLut: this._lut };
|
|
244
|
+
if (is3d) {
|
|
245
|
+
uniforms.uLutSize = this._size;
|
|
246
|
+
}
|
|
247
|
+
if (backend.backendType === RenderBackendType.WebGpu) {
|
|
248
|
+
return new WebGpuShaderFilter({
|
|
249
|
+
fragmentSource: is3d ? wgsl3dFragment : wgsl1dFragment,
|
|
250
|
+
uniforms,
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
return new WebGl2ShaderFilter({
|
|
254
|
+
fragmentSource: is3d ? glsl3dFragment : glsl1dFragment,
|
|
255
|
+
uniforms,
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
export { LutFilter };
|
|
261
|
+
//# sourceMappingURL=LutFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LutFilter.js","sources":["../../../../../src/rendering/filters/LutFilter.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Texture } from '@/rendering/texture/Texture';
|
|
2
|
-
import type { RenderTexture } from '@/rendering/texture/RenderTexture';
|
|
3
1
|
import type { RenderBackend } from '@/rendering/RenderBackend';
|
|
2
|
+
import type { RenderTexture } from '@/rendering/texture/RenderTexture';
|
|
3
|
+
import { Texture } from '@/rendering/texture/Texture';
|
|
4
4
|
import { Filter } from './Filter';
|
|
5
5
|
/**
|
|
6
6
|
* A scalar number, vector tuple, typed array, or texture. Both
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Color } from '../../core/Color.js';
|
|
2
|
-
import { Shader } from '../shader/Shader.js';
|
|
3
2
|
import { RenderBackendType } from '../RenderBackendType.js';
|
|
4
3
|
import { RenderTargetPass } from '../RenderTargetPass.js';
|
|
4
|
+
import { Shader } from '../shader/Shader.js';
|
|
5
|
+
import { upgradeFragmentShaderToGl300 } from '../shader/upgradeFragmentShaderToGl300.js';
|
|
6
|
+
import { Texture } from '../texture/Texture.js';
|
|
5
7
|
import { RenderingPrimitives, BufferTypes, BufferUsage } from '../types.js';
|
|
6
|
-
import { createWebGl2ShaderProgram } from '../webgl2/WebGl2ShaderProgram.js';
|
|
7
8
|
import { WebGl2RenderBuffer } from '../webgl2/WebGl2RenderBuffer.js';
|
|
9
|
+
import { createWebGl2ShaderProgram } from '../webgl2/WebGl2ShaderProgram.js';
|
|
8
10
|
import { WebGl2VertexArrayObject } from '../webgl2/WebGl2VertexArrayObject.js';
|
|
9
|
-
import { Texture } from '../texture/Texture.js';
|
|
10
|
-
import { upgradeFragmentShaderToGl300 } from '../shader/upgradeFragmentShaderToGl300.js';
|
|
11
11
|
import { Filter } from './Filter.js';
|
|
12
12
|
|
|
13
13
|
/**
|
|
@@ -33,12 +33,7 @@ void main() {
|
|
|
33
33
|
* 2: top-left (-1, 1, 0, 1)
|
|
34
34
|
* 3: top-right ( 1, 1, 1, 1)
|
|
35
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
|
-
]);
|
|
36
|
+
const quadVertices = new Float32Array([-1, -1, 0, 0, 1, -1, 1, 0, -1, 1, 0, 1, 1, 1, 1, 1]);
|
|
42
37
|
/** Bytes per vertex: 2 floats position + 2 floats UV = 16 bytes */
|
|
43
38
|
const vertexStride = 16;
|
|
44
39
|
/**
|
|
@@ -95,9 +90,7 @@ class WebGl2ShaderFilter extends Filter {
|
|
|
95
90
|
throw new Error('WebGl2ShaderFilter requires fragmentSource for the WebGL2 backend.');
|
|
96
91
|
}
|
|
97
92
|
const autoUpgrade = options.autoUpgrade !== false;
|
|
98
|
-
this._fragmentSource = autoUpgrade
|
|
99
|
-
? upgradeFragmentShaderToGl300(options.fragmentSource)
|
|
100
|
-
: options.fragmentSource;
|
|
93
|
+
this._fragmentSource = autoUpgrade ? upgradeFragmentShaderToGl300(options.fragmentSource) : options.fragmentSource;
|
|
101
94
|
this._vertexSource = options.vertexSource ?? defaultVertexSource;
|
|
102
95
|
this.uniforms = { ...(options.uniforms ?? {}) };
|
|
103
96
|
}
|
|
@@ -113,7 +106,7 @@ class WebGl2ShaderFilter extends Filter {
|
|
|
113
106
|
const gl2Backend = backend;
|
|
114
107
|
this._ensureConnected(gl2Backend);
|
|
115
108
|
const shader = this._shader;
|
|
116
|
-
backend.execute(new RenderTargetPass(
|
|
109
|
+
backend.execute(new RenderTargetPass(b => {
|
|
117
110
|
const gl2 = b;
|
|
118
111
|
// Bind shader (calls ShaderProgram.bind → gl.useProgram + sync dirty uniforms)
|
|
119
112
|
gl2.bindShader(shader);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebGl2ShaderFilter.js","sources":["../../../../../src/rendering/filters/WebGl2ShaderFilter.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"WebGl2ShaderFilter.js","sources":["../../../../../src/rendering/filters/WebGl2ShaderFilter.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { RenderTexture } from '@/rendering/texture/RenderTexture';
|
|
2
1
|
import type { RenderBackend } from '@/rendering/RenderBackend';
|
|
2
|
+
import type { RenderTexture } from '@/rendering/texture/RenderTexture';
|
|
3
3
|
import { Filter } from './Filter';
|
|
4
4
|
import type { ShaderFilterUniformValue } from './WebGl2ShaderFilter';
|
|
5
5
|
export type { ShaderFilterUniformValue };
|
|
@@ -33,20 +33,21 @@ fn main(@location(0) aPosition: vec2<f32>, @location(1) aUv: vec2<f32>) -> VsOut
|
|
|
33
33
|
* 2: top-left (-1, 1, 0, 1)
|
|
34
34
|
* 3: top-right ( 1, 1, 1, 1)
|
|
35
35
|
*/
|
|
36
|
-
const quadVertexData = new Float32Array([
|
|
37
|
-
-1, -1, 0, 0,
|
|
38
|
-
1, -1, 1, 0,
|
|
39
|
-
-1, 1, 0, 1,
|
|
40
|
-
1, 1, 1, 1,
|
|
41
|
-
]);
|
|
36
|
+
const quadVertexData = new Float32Array([-1, -1, 0, 0, 1, -1, 1, 0, -1, 1, 0, 1, 1, 1, 1, 1]);
|
|
42
37
|
/** Bytes per vertex: 2 floats position + 2 floats UV = 16 bytes */
|
|
43
38
|
const vertexStrideBytes = 16;
|
|
44
39
|
/** Resolution uniform buffer size: vec2<f32> = 8 bytes, padded to 16 */
|
|
45
40
|
const resolutionBufferBytes = 16;
|
|
46
41
|
/** Returns true when the value is a texture (goes into a bind group, not a UBO). */
|
|
47
42
|
function isTextureValue(value) {
|
|
48
|
-
return value instanceof Texture
|
|
49
|
-
|
|
43
|
+
return (value instanceof Texture ||
|
|
44
|
+
(typeof value === 'object' &&
|
|
45
|
+
value !== null &&
|
|
46
|
+
'width' in value &&
|
|
47
|
+
'height' in value &&
|
|
48
|
+
!(value instanceof Float32Array) &&
|
|
49
|
+
!(value instanceof Int32Array) &&
|
|
50
|
+
!Array.isArray(value)));
|
|
50
51
|
}
|
|
51
52
|
/**
|
|
52
53
|
* A high-level {@link Filter} subclass that renders the input texture through
|
|
@@ -124,7 +125,7 @@ class WebGpuShaderFilter extends Filter {
|
|
|
124
125
|
const gpuBackend = backend;
|
|
125
126
|
this._ensureConnected(gpuBackend, output);
|
|
126
127
|
const conn = this._connection;
|
|
127
|
-
backend.execute(new RenderTargetPass(
|
|
128
|
+
backend.execute(new RenderTargetPass(b => {
|
|
128
129
|
const gpu = b;
|
|
129
130
|
const device = conn.device;
|
|
130
131
|
// ---- Update auto-bound resolution uniform ----
|
|
@@ -143,10 +144,14 @@ class WebGpuShaderFilter extends Filter {
|
|
|
143
144
|
// ---- Build user bind group (group 1) ----
|
|
144
145
|
const userBindGroup = this._buildUserBindGroup(gpu, conn);
|
|
145
146
|
// ---- Encode render pass ----
|
|
147
|
+
// Labels are picked up by Spector.js and Chrome DevTools' WebGPU
|
|
148
|
+
// panel and displayed as the pass name in capture views; ignored
|
|
149
|
+
// by WebGPU at runtime so they cost nothing in release builds.
|
|
146
150
|
const device2 = gpu.device;
|
|
147
|
-
const encoder = device2.createCommandEncoder();
|
|
151
|
+
const encoder = device2.createCommandEncoder({ label: 'WebGpuShaderFilter' });
|
|
148
152
|
const pass = encoder.beginRenderPass({
|
|
149
153
|
colorAttachments: [gpu.createColorAttachment()],
|
|
154
|
+
label: 'WebGpuShaderFilter pass',
|
|
150
155
|
});
|
|
151
156
|
gpu.stats.renderPasses++;
|
|
152
157
|
pass.setPipeline(conn.pipeline);
|
|
@@ -275,7 +280,7 @@ class WebGpuShaderFilter extends Filter {
|
|
|
275
280
|
*/
|
|
276
281
|
_buildUserBindGroupLayout(device) {
|
|
277
282
|
const entries = [];
|
|
278
|
-
const hasScalarUniforms = Object.values(this.uniforms).some(
|
|
283
|
+
const hasScalarUniforms = Object.values(this.uniforms).some(v => !isTextureValue(v));
|
|
279
284
|
if (hasScalarUniforms) {
|
|
280
285
|
entries.push({
|
|
281
286
|
binding: 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebGpuShaderFilter.js","sources":["../../../../../src/rendering/filters/WebGpuShaderFilter.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAAA;
|
|
1
|
+
{"version":3,"file":"WebGpuShaderFilter.js","sources":["../../../../../src/rendering/filters/WebGpuShaderFilter.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|