@codexo/exojs 0.8.4 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +99 -0
- package/README.md +34 -13
- package/dist/esm/animation/Tween.d.ts +20 -3
- package/dist/esm/animation/Tween.js +16 -8
- package/dist/esm/animation/Tween.js.map +1 -1
- package/dist/esm/animation/TweenManager.d.ts +16 -1
- package/dist/esm/animation/TweenManager.js +27 -2
- package/dist/esm/animation/TweenManager.js.map +1 -1
- package/dist/esm/audio/AudioAnalyser.d.ts +2 -0
- package/dist/esm/audio/AudioAnalyser.js +24 -9
- package/dist/esm/audio/AudioAnalyser.js.map +1 -1
- package/dist/esm/audio/AudioBus.d.ts +1 -0
- package/dist/esm/audio/AudioBus.js +8 -4
- package/dist/esm/audio/AudioBus.js.map +1 -1
- package/dist/esm/audio/AudioListener.d.ts +1 -0
- package/dist/esm/audio/AudioListener.js +7 -5
- package/dist/esm/audio/AudioListener.js.map +1 -1
- package/dist/esm/audio/AudioManager.d.ts +8 -2
- package/dist/esm/audio/AudioManager.js +14 -1
- package/dist/esm/audio/AudioManager.js.map +1 -1
- package/dist/esm/audio/BeatDetector.d.ts +2 -0
- package/dist/esm/audio/BeatDetector.js +27 -661
- package/dist/esm/audio/BeatDetector.js.map +1 -1
- package/dist/esm/audio/Music.d.ts +1 -0
- package/dist/esm/audio/Music.js +7 -3
- package/dist/esm/audio/Music.js.map +1 -1
- package/dist/esm/audio/OscillatorSound.d.ts +1 -0
- package/dist/esm/audio/OscillatorSound.js +7 -3
- package/dist/esm/audio/OscillatorSound.js.map +1 -1
- package/dist/esm/audio/Sound.d.ts +1 -0
- package/dist/esm/audio/Sound.js +7 -3
- package/dist/esm/audio/Sound.js.map +1 -1
- package/dist/esm/audio/audio-context.d.ts +2 -2
- package/dist/esm/audio/audio-context.js +4 -4
- package/dist/esm/audio/audio-context.js.map +1 -1
- package/dist/esm/audio/filters/ChorusFilter.d.ts +1 -0
- package/dist/esm/audio/filters/ChorusFilter.js +7 -3
- package/dist/esm/audio/filters/ChorusFilter.js.map +1 -1
- package/dist/esm/audio/filters/CompressorFilter.d.ts +1 -0
- package/dist/esm/audio/filters/CompressorFilter.js +7 -3
- package/dist/esm/audio/filters/CompressorFilter.js.map +1 -1
- package/dist/esm/audio/filters/DelayFilter.d.ts +1 -0
- package/dist/esm/audio/filters/DelayFilter.js +7 -3
- package/dist/esm/audio/filters/DelayFilter.js.map +1 -1
- package/dist/esm/audio/filters/EqualizerFilter.d.ts +1 -0
- package/dist/esm/audio/filters/EqualizerFilter.js +7 -3
- package/dist/esm/audio/filters/EqualizerFilter.js.map +1 -1
- package/dist/esm/audio/filters/GranularFilter.js +1 -86
- package/dist/esm/audio/filters/GranularFilter.js.map +1 -1
- package/dist/esm/audio/filters/HighpassFilter.d.ts +1 -0
- package/dist/esm/audio/filters/HighpassFilter.js +7 -3
- package/dist/esm/audio/filters/HighpassFilter.js.map +1 -1
- package/dist/esm/audio/filters/LowpassFilter.d.ts +1 -0
- package/dist/esm/audio/filters/LowpassFilter.js +7 -3
- package/dist/esm/audio/filters/LowpassFilter.js.map +1 -1
- package/dist/esm/audio/filters/PitchShiftFilter.js +1 -71
- package/dist/esm/audio/filters/PitchShiftFilter.js.map +1 -1
- package/dist/esm/audio/filters/ReverbFilter.d.ts +1 -0
- package/dist/esm/audio/filters/ReverbFilter.js +7 -3
- package/dist/esm/audio/filters/ReverbFilter.js.map +1 -1
- package/dist/esm/audio/filters/VocoderFilter.js +1 -89
- package/dist/esm/audio/filters/VocoderFilter.js.map +1 -1
- package/dist/esm/audio/filters/WorkletFilter.d.ts +2 -0
- package/dist/esm/audio/filters/WorkletFilter.js +10 -5
- package/dist/esm/audio/filters/WorkletFilter.js.map +1 -1
- package/dist/esm/audio/index.d.ts +15 -10
- package/dist/esm/audio/worklet/registerWorklet.d.ts +1 -1
- package/dist/esm/audio/worklet/registerWorklet.js +2 -2
- package/dist/esm/audio/worklet/registerWorklet.js.map +1 -1
- package/dist/esm/audio/worklets/beat-detector.worklet.d.ts +1 -0
- package/dist/esm/audio/worklets/beat-detector.worklet.js +647 -0
- package/dist/esm/audio/worklets/beat-detector.worklet.js.map +1 -0
- package/dist/esm/audio/worklets/granular.worklet.d.ts +1 -0
- package/dist/esm/audio/worklets/granular.worklet.js +89 -0
- package/dist/esm/audio/worklets/granular.worklet.js.map +1 -0
- package/dist/esm/audio/worklets/pitch-shift.worklet.d.ts +1 -0
- package/dist/esm/audio/worklets/pitch-shift.worklet.js +74 -0
- package/dist/esm/audio/worklets/pitch-shift.worklet.js.map +1 -0
- package/dist/esm/audio/worklets/vocoder.worklet.d.ts +1 -0
- package/dist/esm/audio/worklets/vocoder.worklet.js +92 -0
- package/dist/esm/audio/worklets/vocoder.worklet.js.map +1 -0
- package/dist/esm/core/Application.d.ts +86 -29
- package/dist/esm/core/Application.js +157 -47
- package/dist/esm/core/Application.js.map +1 -1
- package/dist/esm/core/Color.d.ts +0 -8
- package/dist/esm/core/Color.js +0 -24
- package/dist/esm/core/Color.js.map +1 -1
- package/dist/esm/core/Perf.d.ts +23 -0
- package/dist/esm/core/Perf.js +49 -0
- package/dist/esm/core/Perf.js.map +1 -0
- package/dist/esm/core/Scene.d.ts +40 -80
- package/dist/esm/core/Scene.js +63 -43
- package/dist/esm/core/Scene.js.map +1 -1
- package/dist/esm/core/SceneManager.d.ts +11 -25
- package/dist/esm/core/SceneManager.js +37 -100
- package/dist/esm/core/SceneManager.js.map +1 -1
- package/dist/esm/core/SceneNode.d.ts +28 -17
- package/dist/esm/core/SceneNode.js +66 -42
- package/dist/esm/core/SceneNode.js.map +1 -1
- package/dist/esm/core/Signal.d.ts +24 -28
- package/dist/esm/core/Signal.js +64 -50
- package/dist/esm/core/Signal.js.map +1 -1
- package/dist/esm/core/Timer.d.ts +1 -0
- package/dist/esm/core/Timer.js +3 -0
- package/dist/esm/core/Timer.js.map +1 -1
- package/dist/esm/core/capabilities.d.ts +2 -0
- package/dist/esm/core/capabilities.js +15 -0
- package/dist/esm/core/capabilities.js.map +1 -1
- package/dist/esm/core/index.d.ts +1 -0
- package/dist/esm/core/types.d.ts +1 -1
- package/dist/esm/core/utils.d.ts +12 -0
- package/dist/esm/core/utils.js +18 -1
- package/dist/esm/core/utils.js.map +1 -1
- package/dist/esm/debug/BoundingBoxesLayer.js +1 -1
- package/dist/esm/debug/BoundingBoxesLayer.js.map +1 -1
- package/dist/esm/debug/HitTestLayer.js +1 -1
- package/dist/esm/debug/HitTestLayer.js.map +1 -1
- package/dist/esm/debug/PerformanceLayer.js +1 -2
- package/dist/esm/debug/PerformanceLayer.js.map +1 -1
- package/dist/esm/debug/PointerStackLayer.js +1 -2
- package/dist/esm/debug/PointerStackLayer.js.map +1 -1
- package/dist/esm/debug/RenderPassInspectorLayer.js +1 -2
- package/dist/esm/debug/RenderPassInspectorLayer.js.map +1 -1
- package/dist/esm/index.js +37 -10
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/input/InputManager.d.ts +1 -0
- package/dist/esm/input/InputManager.js +30 -3
- package/dist/esm/input/InputManager.js.map +1 -1
- package/dist/esm/input/InteractionManager.d.ts +5 -2
- package/dist/esm/input/InteractionManager.js +29 -18
- package/dist/esm/input/InteractionManager.js.map +1 -1
- package/dist/esm/input/Pointer.js +3 -2
- package/dist/esm/input/Pointer.js.map +1 -1
- package/dist/esm/input/internal/interactionManagerRegistry.d.ts +9 -0
- package/dist/esm/input/internal/interactionManagerRegistry.js +10 -0
- package/dist/esm/input/internal/interactionManagerRegistry.js.map +1 -0
- package/dist/esm/math/AbstractVector.d.ts +1 -7
- package/dist/esm/math/AbstractVector.js +6 -20
- package/dist/esm/math/AbstractVector.js.map +1 -1
- package/dist/esm/math/Circle.js +0 -2
- package/dist/esm/math/Circle.js.map +1 -1
- package/dist/esm/math/Collision.d.ts +9 -3
- package/dist/esm/math/Ellipse.d.ts +2 -5
- package/dist/esm/math/Ellipse.js +10 -7
- package/dist/esm/math/Ellipse.js.map +1 -1
- package/dist/esm/math/ObservableVector.d.ts +1 -1
- package/dist/esm/math/ObservableVector.js +3 -3
- package/dist/esm/math/ObservableVector.js.map +1 -1
- package/dist/esm/math/Polygon.d.ts +0 -2
- package/dist/esm/math/Polygon.js +1 -9
- package/dist/esm/math/Polygon.js.map +1 -1
- package/dist/esm/math/Rectangle.js +0 -2
- package/dist/esm/math/Rectangle.js.map +1 -1
- package/dist/esm/math/collision-detection.d.ts +19 -4
- package/dist/esm/math/collision-detection.js +61 -4
- package/dist/esm/math/collision-detection.js.map +1 -1
- package/dist/esm/math/swept-collision.d.ts +16 -12
- package/dist/esm/math/swept-collision.js +109 -19
- package/dist/esm/math/swept-collision.js.map +1 -1
- package/dist/esm/particles/ParticleSystem.d.ts +8 -5
- package/dist/esm/particles/ParticleSystem.js +10 -6
- package/dist/esm/particles/ParticleSystem.js.map +1 -1
- package/dist/esm/particles/distributions/{Gradient.d.ts → ColorGradient.d.ts} +5 -5
- package/dist/esm/particles/distributions/{Gradient.js → ColorGradient.js} +5 -5
- package/dist/esm/particles/distributions/ColorGradient.js.map +1 -0
- package/dist/esm/particles/distributions/Distribution.d.ts +2 -2
- package/dist/esm/particles/distributions/index.d.ts +2 -2
- package/dist/esm/particles/gpu/ParticleGpuState.js +1 -1
- package/dist/esm/particles/index.d.ts +1 -0
- package/dist/esm/particles/modules/ColorOverLifetime.d.ts +3 -3
- package/dist/esm/particles/modules/ColorOverLifetime.js.map +1 -1
- package/dist/esm/particles/modules/ColorOverSpeed.d.ts +3 -3
- package/dist/esm/particles/modules/ColorOverSpeed.js.map +1 -1
- package/dist/esm/particles/modules/UpdateModule.d.ts +2 -2
- package/dist/esm/particles/modules/UpdateModule.js +1 -1
- package/dist/esm/particles/modules/WgslContribution.d.ts +2 -2
- package/dist/esm/rendering/CallbackRenderPass.d.ts +1 -0
- package/dist/esm/rendering/CallbackRenderPass.js +1 -0
- package/dist/esm/rendering/CallbackRenderPass.js.map +1 -1
- package/dist/esm/rendering/Camera.d.ts +33 -0
- package/dist/esm/rendering/Camera.js +38 -0
- package/dist/esm/rendering/Camera.js.map +1 -0
- package/dist/esm/rendering/Container.d.ts +7 -25
- package/dist/esm/rendering/Container.js +25 -87
- package/dist/esm/rendering/Container.js.map +1 -1
- package/dist/esm/rendering/Drawable.d.ts +8 -10
- package/dist/esm/rendering/Drawable.js +12 -20
- package/dist/esm/rendering/Drawable.js.map +1 -1
- package/dist/esm/rendering/RenderBackend.d.ts +19 -0
- package/dist/esm/rendering/RenderNode.d.ts +82 -11
- package/dist/esm/rendering/RenderNode.js +133 -163
- package/dist/esm/rendering/RenderNode.js.map +1 -1
- package/dist/esm/rendering/RenderPass.d.ts +1 -0
- package/dist/esm/rendering/RenderStats.d.ts +9 -0
- package/dist/esm/rendering/RenderStats.js +2 -0
- package/dist/esm/rendering/RenderStats.js.map +1 -1
- package/dist/esm/rendering/RenderTarget.d.ts +13 -0
- package/dist/esm/rendering/RenderTarget.js +13 -0
- package/dist/esm/rendering/RenderTarget.js.map +1 -1
- package/dist/esm/rendering/RenderTargetPass.js +17 -0
- package/dist/esm/rendering/RenderTargetPass.js.map +1 -1
- package/dist/esm/rendering/RendererRegistry.d.ts +1 -0
- package/dist/esm/rendering/RendererRegistry.js +1 -0
- package/dist/esm/rendering/RendererRegistry.js.map +1 -1
- package/dist/esm/rendering/RenderingContext.d.ts +87 -0
- package/dist/esm/rendering/RenderingContext.js +157 -0
- package/dist/esm/rendering/RenderingContext.js.map +1 -0
- package/dist/esm/rendering/TransformBuffer.d.ts +38 -0
- package/dist/esm/rendering/TransformBuffer.js +116 -0
- package/dist/esm/rendering/TransformBuffer.js.map +1 -0
- package/dist/esm/rendering/View.d.ts +23 -0
- package/dist/esm/rendering/View.js +42 -0
- package/dist/esm/rendering/View.js.map +1 -1
- package/dist/esm/rendering/filters/WebGpuShaderFilter.js +5 -12
- package/dist/esm/rendering/filters/WebGpuShaderFilter.js.map +1 -1
- package/dist/esm/rendering/geometry/Geometry.d.ts +40 -0
- package/dist/esm/rendering/geometry/Geometry.js +228 -0
- package/dist/esm/rendering/geometry/Geometry.js.map +1 -0
- package/dist/esm/rendering/geometry/GeometryAttribute.d.ts +32 -0
- package/dist/esm/rendering/geometry/QuadGeometry.d.ts +5 -0
- package/dist/esm/rendering/gradient/Gradient.d.ts +34 -0
- package/dist/esm/rendering/gradient/Gradient.js +114 -0
- package/dist/esm/rendering/gradient/Gradient.js.map +1 -0
- package/dist/esm/rendering/gradient/LinearGradient.d.ts +10 -0
- package/dist/esm/rendering/gradient/LinearGradient.js +26 -0
- package/dist/esm/rendering/gradient/LinearGradient.js.map +1 -0
- package/dist/esm/rendering/gradient/RadialGradient.d.ts +10 -0
- package/dist/esm/rendering/gradient/RadialGradient.js +25 -0
- package/dist/esm/rendering/gradient/RadialGradient.js.map +1 -0
- package/dist/esm/rendering/index.d.ts +103 -59
- package/dist/esm/rendering/material/Material.d.ts +114 -0
- package/dist/esm/rendering/material/Material.js +111 -0
- package/dist/esm/rendering/material/Material.js.map +1 -0
- package/dist/esm/rendering/material/MaterialKey.d.ts +18 -0
- package/dist/esm/rendering/material/MaterialKey.js +82 -0
- package/dist/esm/rendering/material/MaterialKey.js.map +1 -0
- package/dist/esm/rendering/material/MeshMaterial.d.ts +16 -0
- package/dist/esm/rendering/material/MeshMaterial.js +21 -0
- package/dist/esm/rendering/material/MeshMaterial.js.map +1 -0
- package/dist/esm/rendering/{mesh/MeshShader.d.ts → material/ShaderSource.d.ts} +30 -62
- package/dist/esm/rendering/{mesh/MeshShader.js → material/ShaderSource.js} +36 -62
- package/dist/esm/rendering/material/ShaderSource.js.map +1 -0
- package/dist/esm/rendering/material/SpriteMaterial.d.ts +15 -0
- package/dist/esm/rendering/material/SpriteMaterial.js +20 -0
- package/dist/esm/rendering/material/SpriteMaterial.js.map +1 -0
- package/dist/esm/rendering/mesh/Mesh.d.ts +29 -12
- package/dist/esm/rendering/mesh/Mesh.js +123 -4
- package/dist/esm/rendering/mesh/Mesh.js.map +1 -1
- package/dist/esm/rendering/pass/RenderPassCoordinator.d.ts +63 -0
- package/dist/esm/rendering/pass/RenderPassDescriptor.d.ts +48 -0
- package/dist/esm/rendering/pass/RenderPassDescriptor.js +16 -0
- package/dist/esm/rendering/pass/RenderPassDescriptor.js.map +1 -0
- package/dist/esm/rendering/plan/RenderCommand.d.ts +67 -0
- package/dist/esm/rendering/plan/RenderCommand.js +94 -0
- package/dist/esm/rendering/plan/RenderCommand.js.map +1 -0
- package/dist/esm/rendering/plan/RenderEffectExecutor.d.ts +10 -0
- package/dist/esm/rendering/plan/RenderEffectExecutor.js +159 -0
- package/dist/esm/rendering/plan/RenderEffectExecutor.js.map +1 -0
- package/dist/esm/rendering/plan/RenderPlan.d.ts +23 -0
- package/dist/esm/rendering/plan/RenderPlan.js +12 -0
- package/dist/esm/rendering/plan/RenderPlan.js.map +1 -0
- package/dist/esm/rendering/plan/RenderPlanBuilder.d.ts +31 -0
- package/dist/esm/rendering/plan/RenderPlanBuilder.js +242 -0
- package/dist/esm/rendering/plan/RenderPlanBuilder.js.map +1 -0
- package/dist/esm/rendering/plan/RenderPlanOptimizer.d.ts +10 -0
- package/dist/esm/rendering/plan/RenderPlanOptimizer.js +180 -0
- package/dist/esm/rendering/plan/RenderPlanOptimizer.js.map +1 -0
- package/dist/esm/rendering/plan/RenderPlanPlayer.d.ts +9 -0
- package/dist/esm/rendering/plan/RenderPlanPlayer.js +56 -0
- package/dist/esm/rendering/plan/RenderPlanPlayer.js.map +1 -0
- package/dist/esm/rendering/plan/RenderScope.d.ts +70 -0
- package/dist/esm/rendering/plan/RenderScope.js +16 -0
- package/dist/esm/rendering/plan/RenderScope.js.map +1 -0
- package/dist/esm/rendering/plan/playRenderTree.d.ts +4 -0
- package/dist/esm/rendering/plan/playRenderTree.js +19 -0
- package/dist/esm/rendering/plan/playRenderTree.js.map +1 -0
- package/dist/esm/rendering/shader/Shader.d.ts +1 -0
- package/dist/esm/rendering/shader/Shader.js +1 -0
- package/dist/esm/rendering/shader/Shader.js.map +1 -1
- package/dist/esm/rendering/shader/ShaderUniform.d.ts +1 -0
- package/dist/esm/rendering/shader/ShaderUniform.js +1 -0
- package/dist/esm/rendering/shader/ShaderUniform.js.map +1 -1
- package/dist/esm/rendering/sprite/Sprite.d.ts +25 -3
- package/dist/esm/rendering/sprite/Sprite.js +48 -15
- package/dist/esm/rendering/sprite/Sprite.js.map +1 -1
- package/dist/esm/rendering/sprite/spriteMaterialSources.d.ts +36 -0
- package/dist/esm/rendering/sprite/spriteMaterialSources.js +128 -0
- package/dist/esm/rendering/sprite/spriteMaterialSources.js.map +1 -0
- package/dist/esm/rendering/text/AbstractText.d.ts +36 -0
- package/dist/esm/rendering/text/AbstractText.js +49 -0
- package/dist/esm/rendering/text/AbstractText.js.map +1 -0
- package/dist/esm/rendering/text/BitmapText.d.ts +97 -0
- package/dist/esm/rendering/text/BitmapText.js +220 -0
- package/dist/esm/rendering/text/BitmapText.js.map +1 -0
- package/dist/esm/rendering/text/BmFont.d.ts +50 -0
- package/dist/esm/rendering/text/BmFont.js +24 -0
- package/dist/esm/rendering/text/BmFont.js.map +1 -0
- package/dist/esm/rendering/text/GlyphAtlas.d.ts +104 -0
- package/dist/esm/rendering/text/GlyphAtlas.js +347 -0
- package/dist/esm/rendering/text/GlyphAtlas.js.map +1 -0
- package/dist/esm/rendering/text/GlyphAtlasPool.d.ts +40 -0
- package/dist/esm/rendering/text/GlyphAtlasPool.js +67 -0
- package/dist/esm/rendering/text/GlyphAtlasPool.js.map +1 -0
- package/dist/esm/rendering/text/GlyphSdf.d.ts +92 -0
- package/dist/esm/rendering/text/GlyphSdf.js +220 -0
- package/dist/esm/rendering/text/GlyphSdf.js.map +1 -0
- package/dist/esm/rendering/text/HTMLText.d.ts +107 -0
- package/dist/esm/rendering/text/HTMLText.js +284 -0
- package/dist/esm/rendering/text/HTMLText.js.map +1 -0
- package/dist/esm/rendering/text/LayoutOptions.d.ts +30 -0
- package/dist/esm/rendering/text/Text.d.ts +89 -20
- package/dist/esm/rendering/text/Text.js +176 -101
- package/dist/esm/rendering/text/Text.js.map +1 -1
- package/dist/esm/rendering/text/TextLayout.d.ts +20 -8
- package/dist/esm/rendering/text/TextLayout.js +234 -25
- package/dist/esm/rendering/text/TextLayout.js.map +1 -1
- package/dist/esm/rendering/text/TextStyle.d.ts +154 -87
- package/dist/esm/rendering/text/TextStyle.js +257 -203
- package/dist/esm/rendering/text/TextStyle.js.map +1 -1
- package/dist/esm/rendering/text/types.d.ts +73 -13
- package/dist/esm/rendering/texture/DataTexture.d.ts +5 -0
- package/dist/esm/rendering/texture/DataTexture.js +7 -0
- package/dist/esm/rendering/texture/DataTexture.js.map +1 -1
- package/dist/esm/rendering/texture/Texture.d.ts +1 -0
- package/dist/esm/rendering/texture/Texture.js +1 -0
- package/dist/esm/rendering/texture/Texture.js.map +1 -1
- package/dist/esm/rendering/types.d.ts +3 -1
- package/dist/esm/rendering/types.js +2 -0
- package/dist/esm/rendering/types.js.map +1 -1
- package/dist/esm/rendering/video/Video.d.ts +5 -8
- package/dist/esm/rendering/video/Video.js +12 -13
- package/dist/esm/rendering/video/Video.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts +40 -0
- package/dist/esm/rendering/webgl2/WebGl2Backend.js +344 -27
- package/dist/esm/rendering/webgl2/WebGl2Backend.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.d.ts +22 -2
- package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.js +404 -112
- package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2PassCoordinator.d.ts +57 -0
- package/dist/esm/rendering/webgl2/WebGl2PassCoordinator.js +79 -0
- package/dist/esm/rendering/webgl2/WebGl2PassCoordinator.js.map +1 -0
- package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.d.ts +12 -0
- package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js +214 -58
- package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2StencilClipper.d.ts +34 -0
- package/dist/esm/rendering/webgl2/WebGl2StencilClipper.js +169 -0
- package/dist/esm/rendering/webgl2/WebGl2StencilClipper.js.map +1 -0
- package/dist/esm/rendering/webgl2/WebGl2TextRenderer.d.ts +56 -0
- package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js +486 -0
- package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js.map +1 -0
- package/dist/esm/rendering/webgl2/glsl/mesh.frag.js +1 -1
- package/dist/esm/rendering/webgl2/glsl/mesh.vert.js +1 -1
- package/dist/esm/rendering/webgl2/glsl/stencil-clip.frag.js +4 -0
- package/dist/esm/rendering/webgl2/glsl/stencil-clip.frag.js.map +1 -0
- package/dist/esm/rendering/webgl2/glsl/stencil-clip.vert.js +4 -0
- package/dist/esm/rendering/webgl2/glsl/stencil-clip.vert.js.map +1 -0
- package/dist/esm/rendering/webgl2/glsl/text-color.frag.js +4 -0
- package/dist/esm/rendering/webgl2/glsl/text-color.frag.js.map +1 -0
- package/dist/esm/rendering/webgl2/glsl/text-msdf.frag.js +4 -0
- package/dist/esm/rendering/webgl2/glsl/text-msdf.frag.js.map +1 -0
- package/dist/esm/rendering/webgl2/glsl/text-sdf.frag.js +4 -0
- package/dist/esm/rendering/webgl2/glsl/text-sdf.frag.js.map +1 -0
- package/dist/esm/rendering/webgl2/glsl/text.vert.js +4 -0
- package/dist/esm/rendering/webgl2/glsl/text.vert.js.map +1 -0
- package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts +50 -0
- package/dist/esm/rendering/webgpu/WebGpuBackend.js +151 -27
- package/dist/esm/rendering/webgpu/WebGpuBackend.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBlendState.js +26 -0
- package/dist/esm/rendering/webgpu/WebGpuBlendState.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.js +22 -17
- package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.d.ts +26 -2
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js +511 -89
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js +13 -17
- package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.d.ts +141 -0
- package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.js +270 -0
- package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.js.map +1 -0
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.d.ts +16 -0
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js +344 -27
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuStencilClipper.d.ts +57 -0
- package/dist/esm/rendering/webgpu/WebGpuStencilClipper.js +257 -0
- package/dist/esm/rendering/webgpu/WebGpuStencilClipper.js.map +1 -0
- package/dist/esm/rendering/webgpu/WebGpuStencilState.d.ts +14 -0
- package/dist/esm/rendering/webgpu/WebGpuStencilState.js +36 -0
- package/dist/esm/rendering/webgpu/WebGpuStencilState.js.map +1 -0
- package/dist/esm/rendering/webgpu/WebGpuTextRenderer.d.ts +70 -0
- package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js +775 -0
- package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js.map +1 -0
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.d.ts +16 -0
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js +57 -0
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js.map +1 -0
- package/dist/esm/rendering/webgpu/compute/WebGpuComputePipeline.js +96 -0
- package/dist/esm/rendering/webgpu/compute/WebGpuComputePipeline.js.map +1 -0
- package/dist/esm/rendering/webgpu/compute/WebGpuStorageBuffer.js +68 -0
- package/dist/esm/rendering/webgpu/compute/WebGpuStorageBuffer.js.map +1 -0
- package/dist/esm/resources/Asset.d.ts +23 -0
- package/dist/esm/resources/Asset.js +23 -0
- package/dist/esm/resources/Asset.js.map +1 -0
- package/dist/esm/resources/AssetDefinitions.d.ts +137 -0
- package/dist/esm/resources/Assets.d.ts +35 -0
- package/dist/esm/resources/Assets.js +32 -0
- package/dist/esm/resources/Assets.js.map +1 -0
- package/dist/esm/resources/IndexedDbDatabase.js +17 -1
- package/dist/esm/resources/IndexedDbDatabase.js.map +1 -1
- package/dist/esm/resources/IndexedDbStore.js +17 -1
- package/dist/esm/resources/IndexedDbStore.js.map +1 -1
- package/dist/esm/resources/JsonStore.d.ts +18 -0
- package/dist/esm/resources/JsonStore.js +62 -0
- package/dist/esm/resources/JsonStore.js.map +1 -0
- package/dist/esm/resources/Loader.d.ts +244 -18
- package/dist/esm/resources/Loader.js +456 -50
- package/dist/esm/resources/Loader.js.map +1 -1
- package/dist/esm/resources/LoadingQueue.d.ts +28 -0
- package/dist/esm/resources/LoadingQueue.js +59 -0
- package/dist/esm/resources/LoadingQueue.js.map +1 -0
- package/dist/esm/resources/factories/BmFontFactory.d.ts +25 -0
- package/dist/esm/resources/factories/BmFontFactory.js +96 -0
- package/dist/esm/resources/factories/BmFontFactory.js.map +1 -0
- package/dist/esm/resources/factories/CsvFactory.d.ts +35 -0
- package/dist/esm/resources/factories/CsvFactory.js +87 -0
- package/dist/esm/resources/factories/CsvFactory.js.map +1 -0
- package/dist/esm/resources/factories/ImageFactory.d.ts +14 -8
- package/dist/esm/resources/factories/ImageFactory.js +13 -6
- package/dist/esm/resources/factories/ImageFactory.js.map +1 -1
- package/dist/esm/resources/factories/MusicFactory.d.ts +8 -2
- package/dist/esm/resources/factories/MusicFactory.js +25 -14
- package/dist/esm/resources/factories/MusicFactory.js.map +1 -1
- package/dist/esm/resources/factories/SoundFactory.d.ts +2 -2
- package/dist/esm/resources/factories/SoundFactory.js.map +1 -1
- package/dist/esm/resources/factories/SubtitleFactory.d.ts +28 -0
- package/dist/esm/resources/factories/SubtitleFactory.js +203 -0
- package/dist/esm/resources/factories/SubtitleFactory.js.map +1 -0
- package/dist/esm/resources/factories/SvgFactory.d.ts +18 -1
- package/dist/esm/resources/factories/SvgFactory.js +21 -2
- package/dist/esm/resources/factories/SvgFactory.js.map +1 -1
- package/dist/esm/resources/factories/TextureFactory.d.ts +4 -4
- package/dist/esm/resources/factories/TextureFactory.js +8 -4
- package/dist/esm/resources/factories/TextureFactory.js.map +1 -1
- package/dist/esm/resources/factories/VideoFactory.d.ts +8 -2
- package/dist/esm/resources/factories/VideoFactory.js +27 -20
- package/dist/esm/resources/factories/VideoFactory.js.map +1 -1
- package/dist/esm/resources/factories/XmlFactory.d.ts +24 -0
- package/dist/esm/resources/factories/XmlFactory.js +37 -0
- package/dist/esm/resources/factories/XmlFactory.js.map +1 -0
- package/dist/esm/resources/index.d.ts +9 -1
- package/dist/esm/resources/tokens.d.ts +49 -3
- package/dist/esm/resources/tokens.js +50 -4
- package/dist/esm/resources/tokens.js.map +1 -1
- package/dist/exo.esm.js +15382 -8078
- package/dist/exo.esm.js.map +1 -1
- package/package.json +34 -16
- package/dist/esm/input/interaction-hooks.d.ts +0 -34
- package/dist/esm/input/interaction-hooks.js +0 -35
- package/dist/esm/input/interaction-hooks.js.map +0 -1
- package/dist/esm/particles/distributions/Gradient.js.map +0 -1
- package/dist/esm/rendering/mesh/MeshShader.js.map +0 -1
- package/dist/esm/rendering/text/DynamicGlyphAtlas.d.ts +0 -33
- package/dist/esm/rendering/text/DynamicGlyphAtlas.js +0 -134
- package/dist/esm/rendering/text/DynamicGlyphAtlas.js.map +0 -1
- package/dist/esm/rendering/text/atlas-singleton.d.ts +0 -7
- package/dist/esm/rendering/text/atlas-singleton.js +0 -17
- package/dist/esm/rendering/text/atlas-singleton.js.map +0 -1
- package/dist/esm/resources/factories/VttFactory.d.ts +0 -24
- package/dist/esm/resources/factories/VttFactory.js +0 -158
- package/dist/esm/resources/factories/VttFactory.js.map +0 -1
- package/dist/esm/vendor/webgl-debug.js +0 -1160
- package/dist/esm/vendor/webgl-debug.js.map +0 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Per-frame rendering counters collected by the backend each tick.
|
|
3
3
|
* Expose live performance data for debugging and profiling tools.
|
|
4
|
+
* @advanced
|
|
4
5
|
*/
|
|
5
6
|
export interface RenderStats {
|
|
6
7
|
/** Monotonically increasing frame index, incremented by {@link resetRenderStats}. */
|
|
@@ -19,6 +20,14 @@ export interface RenderStats {
|
|
|
19
20
|
renderTargetChanges: number;
|
|
20
21
|
/** Wall-clock duration of the frame in milliseconds. */
|
|
21
22
|
frameTimeMs: number;
|
|
23
|
+
/**
|
|
24
|
+
* Raw wall-clock delta between this frame and the previous one, in
|
|
25
|
+
* milliseconds. May exceed the clamped simulation delta when the engine's
|
|
26
|
+
* internal `MAX_DELTA_MS` guard activates (e.g. after a debugger pause or
|
|
27
|
+
* device sleep/resume). Use this for profiling to distinguish actual elapsed
|
|
28
|
+
* time from the clamped simulation delta passed to update recipients.
|
|
29
|
+
*/
|
|
30
|
+
rawFrameDeltaMs: number;
|
|
22
31
|
}
|
|
23
32
|
/**
|
|
24
33
|
* Allocate a zeroed {@link RenderStats} object for the first frame.
|
|
@@ -10,6 +10,7 @@ const createRenderStats = () => ({
|
|
|
10
10
|
renderPasses: 0,
|
|
11
11
|
renderTargetChanges: 0,
|
|
12
12
|
frameTimeMs: 0,
|
|
13
|
+
rawFrameDeltaMs: 0,
|
|
13
14
|
});
|
|
14
15
|
/**
|
|
15
16
|
* Advance the frame counter and zero all per-frame accumulators in place.
|
|
@@ -24,6 +25,7 @@ const resetRenderStats = (stats) => {
|
|
|
24
25
|
stats.renderPasses = 0;
|
|
25
26
|
stats.renderTargetChanges = 0;
|
|
26
27
|
stats.frameTimeMs = 0;
|
|
28
|
+
stats.rawFrameDeltaMs = 0;
|
|
27
29
|
return stats;
|
|
28
30
|
};
|
|
29
31
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenderStats.js","sources":["../../../../src/rendering/RenderStats.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RenderStats.js","sources":["../../../../src/rendering/RenderStats.ts"],"sourcesContent":[null],"names":[],"mappings":"AAgCA;;AAEG;AACI,MAAM,iBAAiB,GAAG,OAAoB;AACnD,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,cAAc,EAAE,CAAC;AACjB,IAAA,WAAW,EAAE,CAAC;AACd,IAAA,SAAS,EAAE,CAAC;AACZ,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,YAAY,EAAE,CAAC;AACf,IAAA,mBAAmB,EAAE,CAAC;AACtB,IAAA,WAAW,EAAE,CAAC;AACd,IAAA,eAAe,EAAE,CAAC;AACnB,CAAA;AAED;;;AAGG;AACI,MAAM,gBAAgB,GAAG,CAAC,KAAkB,KAAiB;IAClE,KAAK,CAAC,KAAK,EAAE;AACb,IAAA,KAAK,CAAC,cAAc,GAAG,CAAC;AACxB,IAAA,KAAK,CAAC,WAAW,GAAG,CAAC;AACrB,IAAA,KAAK,CAAC,SAAS,GAAG,CAAC;AACnB,IAAA,KAAK,CAAC,OAAO,GAAG,CAAC;AACjB,IAAA,KAAK,CAAC,YAAY,GAAG,CAAC;AACtB,IAAA,KAAK,CAAC,mBAAmB,GAAG,CAAC;AAC7B,IAAA,KAAK,CAAC,WAAW,GAAG,CAAC;AACrB,IAAA,KAAK,CAAC,eAAe,GAAG,CAAC;AAEzB,IAAA,OAAO,KAAK;AACd;;;;"}
|
|
@@ -13,6 +13,19 @@ import { View } from './View';
|
|
|
13
13
|
* the underlying canvas / texture dimensions change.
|
|
14
14
|
*/
|
|
15
15
|
export declare class RenderTarget {
|
|
16
|
+
/**
|
|
17
|
+
* Whether this target needs a stencil attachment for geometric stencil
|
|
18
|
+
* clipping ({@link RenderNode.clip} with a `Geometry` `clipShape`). Set by the
|
|
19
|
+
* WebGL2 backend when such a clip is rendered into an offscreen
|
|
20
|
+
* {@link RenderTexture}, so its framebuffer gets a depth/stencil renderbuffer;
|
|
21
|
+
* the WebGL2 on-screen root uses the default framebuffer's stencil (requested
|
|
22
|
+
* at context creation), so the flag only affects offscreen WebGL2 targets.
|
|
23
|
+
*
|
|
24
|
+
* The WebGPU backend does not consult this flag: it allocates a separate
|
|
25
|
+
* `depth24plus-stencil8` attachment per clipped target (root included) on
|
|
26
|
+
* demand, sized to the colour attachment's physical pixels.
|
|
27
|
+
*/
|
|
28
|
+
needsStencil: boolean;
|
|
16
29
|
private readonly _root;
|
|
17
30
|
private readonly _destroyListeners;
|
|
18
31
|
private _version;
|
|
@@ -14,6 +14,19 @@ import { View } from './View.js';
|
|
|
14
14
|
* the underlying canvas / texture dimensions change.
|
|
15
15
|
*/
|
|
16
16
|
class RenderTarget {
|
|
17
|
+
/**
|
|
18
|
+
* Whether this target needs a stencil attachment for geometric stencil
|
|
19
|
+
* clipping ({@link RenderNode.clip} with a `Geometry` `clipShape`). Set by the
|
|
20
|
+
* WebGL2 backend when such a clip is rendered into an offscreen
|
|
21
|
+
* {@link RenderTexture}, so its framebuffer gets a depth/stencil renderbuffer;
|
|
22
|
+
* the WebGL2 on-screen root uses the default framebuffer's stencil (requested
|
|
23
|
+
* at context creation), so the flag only affects offscreen WebGL2 targets.
|
|
24
|
+
*
|
|
25
|
+
* The WebGPU backend does not consult this flag: it allocates a separate
|
|
26
|
+
* `depth24plus-stencil8` attachment per clipped target (root included) on
|
|
27
|
+
* demand, sized to the colour attachment's physical pixels.
|
|
28
|
+
*/
|
|
29
|
+
needsStencil = false;
|
|
17
30
|
_root;
|
|
18
31
|
_destroyListeners = new Set();
|
|
19
32
|
_version = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenderTarget.js","sources":["../../../../src/rendering/RenderTarget.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAMA;;;;;;;;;AASG;MACU,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"RenderTarget.js","sources":["../../../../src/rendering/RenderTarget.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { StencilAttachmentMode } from './pass/RenderPassDescriptor.js';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* A {@link RenderPass} that redirects rendering into an off-screen {@link RenderTarget}.
|
|
3
5
|
*
|
|
@@ -17,6 +19,21 @@ class RenderTargetPass {
|
|
|
17
19
|
this._clearColor = options.clearColor ?? null;
|
|
18
20
|
}
|
|
19
21
|
execute(backend) {
|
|
22
|
+
const coordinator = backend._passCoordinator;
|
|
23
|
+
if (coordinator) {
|
|
24
|
+
coordinator.withChildPass({
|
|
25
|
+
target: this._target,
|
|
26
|
+
view: this._view,
|
|
27
|
+
load: this._clearColor !== null ? 'clear' : 'load',
|
|
28
|
+
clearColor: this._clearColor,
|
|
29
|
+
stencil: StencilAttachmentMode.None,
|
|
30
|
+
}, () => {
|
|
31
|
+
this._callback(backend);
|
|
32
|
+
});
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
// Legacy fallback for backends without a pass coordinator (e.g. test stubs):
|
|
36
|
+
// save the target/view, run the callback, then restore — even if it throws.
|
|
20
37
|
const previousTarget = backend.renderTarget;
|
|
21
38
|
const previousView = backend.view;
|
|
22
39
|
backend.setRenderTarget(this._target);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenderTargetPass.js","sources":["../../../../src/rendering/RenderTargetPass.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RenderTargetPass.js","sources":["../../../../src/rendering/RenderTargetPass.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAmBA;;;;;;AAMG;MACU,gBAAgB,CAAA;AACV,IAAA,SAAS;AACT,IAAA,OAAO;AACP,IAAA,KAAK;AACL,IAAA,WAAW;IAE5B,WAAA,CAAmB,QAA0C,EAAE,OAAA,GAAmC,EAAE,EAAA;AAClG,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI;QACrC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI;QACjC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI;IAC/C;AAEO,IAAA,OAAO,CAAC,OAAsB,EAAA;AACnC,QAAA,MAAM,WAAW,GAAI,OAA8D,CAAC,gBAAgB;QAEpG,IAAI,WAAW,EAAE;YACf,WAAW,CAAC,aAAa,CACvB;gBACE,MAAM,EAAE,IAAI,CAAC,OAAO;gBACpB,IAAI,EAAE,IAAI,CAAC,KAAK;AAChB,gBAAA,IAAI,EAAE,IAAI,CAAC,WAAW,KAAK,IAAI,GAAG,OAAO,GAAG,MAAM;gBAClD,UAAU,EAAE,IAAI,CAAC,WAAW;gBAC5B,OAAO,EAAE,qBAAqB,CAAC,IAAI;AACpC,aAAA,EACD,MAAK;AACH,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AACzB,YAAA,CAAC,CACF;YAED;QACF;;;AAIA,QAAA,MAAM,cAAc,GAAG,OAAO,CAAC,YAAY;AAC3C,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI;AAEjC,QAAA,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;AACrC,QAAA,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AAE3B,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE;AAC7B,YAAA,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;QACjC;AAEA,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QACzB;gBAAU;AACR,YAAA,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC;AACvC,YAAA,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;QAC/B;IACF;AACD;;;;"}
|
|
@@ -13,6 +13,7 @@ import type { DrawableConstructor, Renderer } from './Renderer';
|
|
|
13
13
|
*
|
|
14
14
|
* Used internally by backend managers. Exposed publicly for advanced
|
|
15
15
|
* custom renderer registration.
|
|
16
|
+
* @advanced
|
|
16
17
|
*/
|
|
17
18
|
export declare class RendererRegistry<Runtime extends RenderBackend> {
|
|
18
19
|
private readonly _renderers;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RendererRegistry.js","sources":["../../../../src/rendering/RendererRegistry.ts"],"sourcesContent":[null],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"RendererRegistry.js","sources":["../../../../src/rendering/RendererRegistry.ts"],"sourcesContent":[null],"names":[],"mappings":"AAIA;;;;;;;;;;;;;AAaG;MACU,gBAAgB,CAAA;AACV,IAAA,UAAU,GAAG,IAAI,GAAG,EAA0C;IACvE,QAAQ,GAAmB,IAAI;AAEvC;;;;;;;;AAQG;IACI,gBAAgB,CAA0B,YAAyC,EAAE,QAAmC,EAAA;QAC7H,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;YACrC,MAAM,IAAI,KAAK,CAAC,CAAA,qCAAA,EAAwC,YAAY,CAAC,IAAI,CAAA,CAAA,CAAG,CAAC;QAC/E;;;QAIA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC;AAE3C,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE;AACzB,YAAA,QAA8B,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;QACxD;IACF;AAEA;;;;AAIG;IACI,SAAS,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;IACjC;AAEA;;;;;;AAMG;AACI,IAAA,OAAO,CAAC,QAAkB,EAAA;AAC/B,QAAA,IAAI,WAAW,GAAG,QAAQ,CAAC,WAAyC;AACpE,QAAA,IAAI,QAAuC;AAE3C,QAAA,OAAO,WAAW,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;YACxC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC;YAE3C,IAAI,CAAC,QAAQ,EAAE;gBACb,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,CAAiD;AAE9G,gBAAA,WAAW,GAAG,SAAS,EAAE,WAAW,IAAI,IAAI;YAC9C;QACF;QAEA,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,MAAM,IAAI,KAAK,CACb,CAAA,2BAAA,EAA8B,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAA,EAAA,CAAI,GAAG,2EAA2E,CAC1I;QACH;AAEA,QAAA,OAAO,QAAQ;IACjB;AAEA;;AAEG;AACI,IAAA,OAAO,CAAC,OAAgB,EAAA;AAC7B,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;QAEvB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE;AAC/C,YAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;QAC3B;IACF;AAEA;;AAEG;IACI,UAAU,GAAA;QACf,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE;YAC/C,QAAQ,CAAC,UAAU,EAAE;QACvB;AAEA,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACtB;AAEA;;AAEG;IACI,OAAO,GAAA;QACZ,IAAI,CAAC,UAAU,EAAE;QAEjB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE;YAC/C,IAAI,SAAS,IAAI,QAAQ,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,UAAU,EAAE;gBAClE,QAAoD,CAAC,OAAO,EAAE;YACjE;QACF;AAEA,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;IACzB;AACD;;;;"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { Color } from '@/core/Color';
|
|
2
|
+
import { type RenderBackend } from '@/rendering/RenderBackend';
|
|
3
|
+
import { type RenderNode } from '@/rendering/RenderNode';
|
|
4
|
+
import { type RenderStats } from '@/rendering/RenderStats';
|
|
5
|
+
import { RenderTexture } from '@/rendering/texture/RenderTexture';
|
|
6
|
+
import { View } from '@/rendering/View';
|
|
7
|
+
import { Camera } from './Camera';
|
|
8
|
+
export interface RenderToOptions {
|
|
9
|
+
width: number;
|
|
10
|
+
height: number;
|
|
11
|
+
clearColor?: Color;
|
|
12
|
+
}
|
|
13
|
+
export interface RenderOptions {
|
|
14
|
+
/** Override the view used for this render call. Defaults to the context's active camera. */
|
|
15
|
+
view?: View;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Owns rendering orchestration: builds, optimizes and plays the internal
|
|
19
|
+
* RenderPlan for a RenderNode subtree, manages render-target/view state for
|
|
20
|
+
* off-screen capture, and exposes the low-level backend as an escape hatch.
|
|
21
|
+
*
|
|
22
|
+
* The conceptual model is "the context renders the node":
|
|
23
|
+
* context.render(node) // into the active target (canvas by default)
|
|
24
|
+
* context.render(node, { view }) // override view (camera, screenView, etc.)
|
|
25
|
+
* context.renderTo(node, opts) // into an off-screen RenderTexture
|
|
26
|
+
* @stable
|
|
27
|
+
*/
|
|
28
|
+
export declare class RenderingContext {
|
|
29
|
+
private readonly _backend;
|
|
30
|
+
private _camera;
|
|
31
|
+
private readonly _screenView;
|
|
32
|
+
constructor(backend: RenderBackend);
|
|
33
|
+
/**
|
|
34
|
+
* The active camera. Defaults to a camera that matches the initial
|
|
35
|
+
* backend view. Replace with a custom `Camera` instance for follow,
|
|
36
|
+
* zoom, bounds, or split-screen viewport behavior.
|
|
37
|
+
*/
|
|
38
|
+
get camera(): Camera;
|
|
39
|
+
set camera(camera: Camera);
|
|
40
|
+
/**
|
|
41
|
+
* A RenderingContext-managed screen-space {@link View} suitable for UI
|
|
42
|
+
* overlays. Center and size are reset to match canvas logical dimensions
|
|
43
|
+
* on each {@link resize} call. The returned reference is stable (the same
|
|
44
|
+
* View object across frames), but its properties may change.
|
|
45
|
+
*
|
|
46
|
+
* Never follows, shakes, or rotates by default.
|
|
47
|
+
*/
|
|
48
|
+
get screenView(): View;
|
|
49
|
+
/** Backward-compatible alias — returns the active {@link camera}. */
|
|
50
|
+
get view(): View;
|
|
51
|
+
/**
|
|
52
|
+
* Advance follow, shake, and bounds-constraint animations on the
|
|
53
|
+
* active camera. Call once per frame before rendering.
|
|
54
|
+
*/
|
|
55
|
+
update(deltaMs: number): void;
|
|
56
|
+
/**
|
|
57
|
+
* Resize the camera and screen view to match new canvas dimensions.
|
|
58
|
+
* Preserves the camera's center and zoom; only the visible area size changes.
|
|
59
|
+
*/
|
|
60
|
+
resize(width: number, height: number): void;
|
|
61
|
+
/**
|
|
62
|
+
* Render `node` into the active render target.
|
|
63
|
+
*
|
|
64
|
+
* Sets the backend's active view to `options.view` (or the default camera)
|
|
65
|
+
* before building and playing the render plan. This is the recommended
|
|
66
|
+
* high-level rendering entry point.
|
|
67
|
+
*/
|
|
68
|
+
render(node: RenderNode, options?: RenderOptions): void;
|
|
69
|
+
/**
|
|
70
|
+
* Renders `node` into an off-screen {@link RenderTexture} and returns it.
|
|
71
|
+
*
|
|
72
|
+
* The View is centered at `(width / 2, height / 2)` so that the origin
|
|
73
|
+
* of the node's local space sits at the center of the render texture.
|
|
74
|
+
*
|
|
75
|
+
* Saves and restores the active render target and view so the caller's
|
|
76
|
+
* rendering state is undisturbed.
|
|
77
|
+
*/
|
|
78
|
+
renderTo(node: RenderNode, options: RenderToOptions): RenderTexture;
|
|
79
|
+
/** Per-frame render counters. Convenience over backend.stats. */
|
|
80
|
+
get stats(): RenderStats;
|
|
81
|
+
/**
|
|
82
|
+
* Low-level backend (draw primitives, flush, target/scissor/stencil state,
|
|
83
|
+
* GPU specifics). Escape hatch for custom passes / custom renderers.
|
|
84
|
+
* @advanced
|
|
85
|
+
*/
|
|
86
|
+
get backend(): RenderBackend;
|
|
87
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import '../core/Color.js';
|
|
2
|
+
import '../core/SceneNode.js';
|
|
3
|
+
import '../core/Time.js';
|
|
4
|
+
import '../math/Size.js';
|
|
5
|
+
import '../math/Rectangle.js';
|
|
6
|
+
import { playRenderTree } from './plan/playRenderTree.js';
|
|
7
|
+
import './plan/RenderCommand.js';
|
|
8
|
+
import './plan/RenderScope.js';
|
|
9
|
+
import { StencilAttachmentMode } from './pass/RenderPassDescriptor.js';
|
|
10
|
+
import { RenderTexture } from './texture/RenderTexture.js';
|
|
11
|
+
import './types.js';
|
|
12
|
+
import { View } from './View.js';
|
|
13
|
+
import { Camera } from './Camera.js';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Owns rendering orchestration: builds, optimizes and plays the internal
|
|
17
|
+
* RenderPlan for a RenderNode subtree, manages render-target/view state for
|
|
18
|
+
* off-screen capture, and exposes the low-level backend as an escape hatch.
|
|
19
|
+
*
|
|
20
|
+
* The conceptual model is "the context renders the node":
|
|
21
|
+
* context.render(node) // into the active target (canvas by default)
|
|
22
|
+
* context.render(node, { view }) // override view (camera, screenView, etc.)
|
|
23
|
+
* context.renderTo(node, opts) // into an off-screen RenderTexture
|
|
24
|
+
* @stable
|
|
25
|
+
*/
|
|
26
|
+
class RenderingContext {
|
|
27
|
+
_backend;
|
|
28
|
+
_camera;
|
|
29
|
+
_screenView;
|
|
30
|
+
constructor(backend) {
|
|
31
|
+
this._backend = backend;
|
|
32
|
+
const viewWidth = backend.view?.width ?? 0;
|
|
33
|
+
const viewHeight = backend.view?.height ?? 0;
|
|
34
|
+
const viewCenterX = backend.view?.center?.x ?? viewWidth / 2;
|
|
35
|
+
const viewCenterY = backend.view?.center?.y ?? viewHeight / 2;
|
|
36
|
+
this._camera = new Camera({
|
|
37
|
+
center: { x: viewCenterX, y: viewCenterY },
|
|
38
|
+
size: { width: viewWidth, height: viewHeight },
|
|
39
|
+
});
|
|
40
|
+
this._screenView = new View(viewCenterX, viewCenterY, viewWidth, viewHeight);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* The active camera. Defaults to a camera that matches the initial
|
|
44
|
+
* backend view. Replace with a custom `Camera` instance for follow,
|
|
45
|
+
* zoom, bounds, or split-screen viewport behavior.
|
|
46
|
+
*/
|
|
47
|
+
get camera() {
|
|
48
|
+
return this._camera;
|
|
49
|
+
}
|
|
50
|
+
set camera(camera) {
|
|
51
|
+
const previousCamera = this._camera;
|
|
52
|
+
this._camera = camera;
|
|
53
|
+
if (previousCamera !== camera) {
|
|
54
|
+
previousCamera.destroy();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* A RenderingContext-managed screen-space {@link View} suitable for UI
|
|
59
|
+
* overlays. Center and size are reset to match canvas logical dimensions
|
|
60
|
+
* on each {@link resize} call. The returned reference is stable (the same
|
|
61
|
+
* View object across frames), but its properties may change.
|
|
62
|
+
*
|
|
63
|
+
* Never follows, shakes, or rotates by default.
|
|
64
|
+
*/
|
|
65
|
+
get screenView() {
|
|
66
|
+
return this._screenView;
|
|
67
|
+
}
|
|
68
|
+
/** Backward-compatible alias — returns the active {@link camera}. */
|
|
69
|
+
get view() {
|
|
70
|
+
return this._camera;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Advance follow, shake, and bounds-constraint animations on the
|
|
74
|
+
* active camera. Call once per frame before rendering.
|
|
75
|
+
*/
|
|
76
|
+
update(deltaMs) {
|
|
77
|
+
this._camera.update(deltaMs);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Resize the camera and screen view to match new canvas dimensions.
|
|
81
|
+
* Preserves the camera's center and zoom; only the visible area size changes.
|
|
82
|
+
*/
|
|
83
|
+
resize(width, height) {
|
|
84
|
+
this._camera.resize(width, height);
|
|
85
|
+
this._screenView.resize(width, height);
|
|
86
|
+
this._screenView.setCenter(width / 2, height / 2);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Render `node` into the active render target.
|
|
90
|
+
*
|
|
91
|
+
* Sets the backend's active view to `options.view` (or the default camera)
|
|
92
|
+
* before building and playing the render plan. This is the recommended
|
|
93
|
+
* high-level rendering entry point.
|
|
94
|
+
*/
|
|
95
|
+
render(node, options = {}) {
|
|
96
|
+
const view = options.view ?? this._camera;
|
|
97
|
+
this._backend.setView(view);
|
|
98
|
+
playRenderTree(node, this._backend);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Renders `node` into an off-screen {@link RenderTexture} and returns it.
|
|
102
|
+
*
|
|
103
|
+
* The View is centered at `(width / 2, height / 2)` so that the origin
|
|
104
|
+
* of the node's local space sits at the center of the render texture.
|
|
105
|
+
*
|
|
106
|
+
* Saves and restores the active render target and view so the caller's
|
|
107
|
+
* rendering state is undisturbed.
|
|
108
|
+
*/
|
|
109
|
+
renderTo(node, options) {
|
|
110
|
+
const target = new RenderTexture(options.width, options.height);
|
|
111
|
+
const view = new View(options.width / 2, options.height / 2, options.width, options.height);
|
|
112
|
+
const coordinator = this._backend._passCoordinator;
|
|
113
|
+
if (coordinator) {
|
|
114
|
+
coordinator.withChildPass({
|
|
115
|
+
target,
|
|
116
|
+
view,
|
|
117
|
+
load: options.clearColor !== undefined ? 'clear' : 'load',
|
|
118
|
+
clearColor: options.clearColor ?? null,
|
|
119
|
+
stencil: StencilAttachmentMode.None,
|
|
120
|
+
}, () => {
|
|
121
|
+
playRenderTree(node, this._backend);
|
|
122
|
+
});
|
|
123
|
+
return target;
|
|
124
|
+
}
|
|
125
|
+
// Legacy fallback for backends without a pass coordinator (e.g. test stubs).
|
|
126
|
+
const previousTarget = this._backend.renderTarget;
|
|
127
|
+
const previousView = this._backend.view;
|
|
128
|
+
this._backend.setRenderTarget(target);
|
|
129
|
+
this._backend.setView(view);
|
|
130
|
+
if (options.clearColor !== undefined) {
|
|
131
|
+
this._backend.clear(options.clearColor);
|
|
132
|
+
}
|
|
133
|
+
try {
|
|
134
|
+
playRenderTree(node, this._backend);
|
|
135
|
+
}
|
|
136
|
+
finally {
|
|
137
|
+
this._backend.setRenderTarget(previousTarget);
|
|
138
|
+
this._backend.setView(previousView);
|
|
139
|
+
}
|
|
140
|
+
return target;
|
|
141
|
+
}
|
|
142
|
+
/** Per-frame render counters. Convenience over backend.stats. */
|
|
143
|
+
get stats() {
|
|
144
|
+
return this._backend.stats;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Low-level backend (draw primitives, flush, target/scissor/stencil state,
|
|
148
|
+
* GPU specifics). Escape hatch for custom passes / custom renderers.
|
|
149
|
+
* @advanced
|
|
150
|
+
*/
|
|
151
|
+
get backend() {
|
|
152
|
+
return this._backend;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
export { RenderingContext };
|
|
157
|
+
//# sourceMappingURL=RenderingContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RenderingContext.js","sources":["../../../../src/rendering/RenderingContext.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { Color } from '@/core/Color';
|
|
2
|
+
import type { Matrix } from '@/math/Matrix';
|
|
3
|
+
/** @internal */
|
|
4
|
+
export interface TransformBufferFrameSnapshot {
|
|
5
|
+
readonly count: number;
|
|
6
|
+
readonly hash: number;
|
|
7
|
+
readonly changed: boolean;
|
|
8
|
+
readonly version: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Internal per-frame transform+tint storage for draw-command node indices.
|
|
12
|
+
*
|
|
13
|
+
* Slot layout (12 floats):
|
|
14
|
+
* - 0..3: (a, b, c, d)
|
|
15
|
+
* - 4..7: (tx, ty, 0, 0)
|
|
16
|
+
* - 8..11: (tintR, tintG, tintB, tintA) with RGB in 0..1
|
|
17
|
+
*
|
|
18
|
+
* @internal
|
|
19
|
+
*/
|
|
20
|
+
export declare class TransformBuffer {
|
|
21
|
+
private _data;
|
|
22
|
+
private _count;
|
|
23
|
+
private _version;
|
|
24
|
+
private _frameHash;
|
|
25
|
+
private _lastCommittedHash;
|
|
26
|
+
private _lastCommittedCount;
|
|
27
|
+
get count(): number;
|
|
28
|
+
get capacity(): number;
|
|
29
|
+
get data(): Float32Array;
|
|
30
|
+
get version(): number;
|
|
31
|
+
begin(expectedCount?: number): this;
|
|
32
|
+
push(transform: Matrix, tint: Color): number;
|
|
33
|
+
write(slot: number, transform: Matrix, tint: Color): this;
|
|
34
|
+
commitSnapshot(minCount?: number): TransformBufferFrameSnapshot;
|
|
35
|
+
private _ensureCapacity;
|
|
36
|
+
private _hashFloat;
|
|
37
|
+
private _mix;
|
|
38
|
+
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
const floatsPerSlot = 12;
|
|
2
|
+
const initialCapacity = 16;
|
|
3
|
+
const hashPrime = 0x01000193;
|
|
4
|
+
const hashOffset = 0x811c9dc5;
|
|
5
|
+
const hashFloatScratch = new Float32Array(1);
|
|
6
|
+
const hashUintScratch = new Uint32Array(hashFloatScratch.buffer);
|
|
7
|
+
/**
|
|
8
|
+
* Internal per-frame transform+tint storage for draw-command node indices.
|
|
9
|
+
*
|
|
10
|
+
* Slot layout (12 floats):
|
|
11
|
+
* - 0..3: (a, b, c, d)
|
|
12
|
+
* - 4..7: (tx, ty, 0, 0)
|
|
13
|
+
* - 8..11: (tintR, tintG, tintB, tintA) with RGB in 0..1
|
|
14
|
+
*
|
|
15
|
+
* @internal
|
|
16
|
+
*/
|
|
17
|
+
class TransformBuffer {
|
|
18
|
+
_data = new Float32Array(initialCapacity * floatsPerSlot);
|
|
19
|
+
_count = 0;
|
|
20
|
+
_version = 0;
|
|
21
|
+
_frameHash = hashOffset >>> 0;
|
|
22
|
+
_lastCommittedHash = 0;
|
|
23
|
+
_lastCommittedCount = -1;
|
|
24
|
+
get count() {
|
|
25
|
+
return this._count;
|
|
26
|
+
}
|
|
27
|
+
get capacity() {
|
|
28
|
+
return this._data.length / floatsPerSlot;
|
|
29
|
+
}
|
|
30
|
+
get data() {
|
|
31
|
+
return this._data;
|
|
32
|
+
}
|
|
33
|
+
get version() {
|
|
34
|
+
return this._version;
|
|
35
|
+
}
|
|
36
|
+
begin(expectedCount = 0) {
|
|
37
|
+
if (expectedCount > 0) {
|
|
38
|
+
this._ensureCapacity(expectedCount);
|
|
39
|
+
}
|
|
40
|
+
this._count = 0;
|
|
41
|
+
this._frameHash = hashOffset >>> 0;
|
|
42
|
+
return this;
|
|
43
|
+
}
|
|
44
|
+
push(transform, tint) {
|
|
45
|
+
const slot = this._count;
|
|
46
|
+
this.write(slot, transform, tint);
|
|
47
|
+
return slot;
|
|
48
|
+
}
|
|
49
|
+
write(slot, transform, tint) {
|
|
50
|
+
if (!Number.isInteger(slot) || slot < 0) {
|
|
51
|
+
throw new Error(`TransformBuffer slot must be a non-negative integer (got ${slot}).`);
|
|
52
|
+
}
|
|
53
|
+
this._ensureCapacity(slot + 1);
|
|
54
|
+
const offset = slot * floatsPerSlot;
|
|
55
|
+
const data = this._data;
|
|
56
|
+
data[offset + 0] = transform.a;
|
|
57
|
+
data[offset + 1] = transform.b;
|
|
58
|
+
data[offset + 2] = transform.c;
|
|
59
|
+
data[offset + 3] = transform.d;
|
|
60
|
+
data[offset + 4] = transform.x;
|
|
61
|
+
data[offset + 5] = transform.y;
|
|
62
|
+
data[offset + 6] = 0;
|
|
63
|
+
data[offset + 7] = 0;
|
|
64
|
+
data[offset + 8] = tint.r / 255;
|
|
65
|
+
data[offset + 9] = tint.g / 255;
|
|
66
|
+
data[offset + 10] = tint.b / 255;
|
|
67
|
+
data[offset + 11] = tint.a;
|
|
68
|
+
if (slot >= this._count) {
|
|
69
|
+
this._count = slot + 1;
|
|
70
|
+
}
|
|
71
|
+
this._frameHash = this._mix(this._frameHash, slot);
|
|
72
|
+
for (let i = 0; i < floatsPerSlot; i++) {
|
|
73
|
+
this._frameHash = this._mix(this._frameHash, this._hashFloat(data[offset + i]));
|
|
74
|
+
}
|
|
75
|
+
return this;
|
|
76
|
+
}
|
|
77
|
+
commitSnapshot(minCount = 0) {
|
|
78
|
+
const count = Math.max(this._count, minCount);
|
|
79
|
+
const hash = this._mix(this._frameHash, count);
|
|
80
|
+
const changed = hash !== this._lastCommittedHash || count !== this._lastCommittedCount;
|
|
81
|
+
if (changed) {
|
|
82
|
+
this._version++;
|
|
83
|
+
this._lastCommittedHash = hash;
|
|
84
|
+
this._lastCommittedCount = count;
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
count,
|
|
88
|
+
hash,
|
|
89
|
+
changed,
|
|
90
|
+
version: this._version,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
_ensureCapacity(requiredSlots) {
|
|
94
|
+
const current = this.capacity;
|
|
95
|
+
if (requiredSlots <= current) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
let next = Math.max(current, initialCapacity);
|
|
99
|
+
while (next < requiredSlots) {
|
|
100
|
+
next *= 2;
|
|
101
|
+
}
|
|
102
|
+
const nextData = new Float32Array(next * floatsPerSlot);
|
|
103
|
+
nextData.set(this._data);
|
|
104
|
+
this._data = nextData;
|
|
105
|
+
}
|
|
106
|
+
_hashFloat(value) {
|
|
107
|
+
hashFloatScratch[0] = value;
|
|
108
|
+
return hashUintScratch[0] >>> 0;
|
|
109
|
+
}
|
|
110
|
+
_mix(hash, value) {
|
|
111
|
+
return Math.imul((hash ^ value) >>> 0, hashPrime) >>> 0;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export { TransformBuffer };
|
|
116
|
+
//# sourceMappingURL=TransformBuffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransformBuffer.js","sources":["../../../../src/rendering/TransformBuffer.ts"],"sourcesContent":[null],"names":[],"mappings":"AAGA,MAAM,aAAa,GAAG,EAAE;AACxB,MAAM,eAAe,GAAG,EAAE;AAC1B,MAAM,SAAS,GAAG,UAAU;AAC5B,MAAM,UAAU,GAAG,UAAU;AAE7B,MAAM,gBAAgB,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC;AAC5C,MAAM,eAAe,GAAG,IAAI,WAAW,CAAC,gBAAgB,CAAC,MAAM,CAAC;AAUhE;;;;;;;;;AASG;MACU,eAAe,CAAA;IAClB,KAAK,GAAiB,IAAI,YAAY,CAAC,eAAe,GAAG,aAAa,CAAC;IACvE,MAAM,GAAG,CAAC;IACV,QAAQ,GAAG,CAAC;AACZ,IAAA,UAAU,GAAG,UAAU,KAAK,CAAC;IAC7B,kBAAkB,GAAG,CAAC;IACtB,mBAAmB,GAAG,EAAE;AAEhC,IAAA,IAAW,KAAK,GAAA;QACd,OAAO,IAAI,CAAC,MAAM;IACpB;AAEA,IAAA,IAAW,QAAQ,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,aAAa;IAC1C;AAEA,IAAA,IAAW,IAAI,GAAA;QACb,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA,IAAA,IAAW,OAAO,GAAA;QAChB,OAAO,IAAI,CAAC,QAAQ;IACtB;IAEO,KAAK,CAAC,aAAa,GAAG,CAAC,EAAA;AAC5B,QAAA,IAAI,aAAa,GAAG,CAAC,EAAE;AACrB,YAAA,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;QACrC;AAEA,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC;AACf,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,KAAK,CAAC;AAElC,QAAA,OAAO,IAAI;IACb;IAEO,IAAI,CAAC,SAAiB,EAAE,IAAW,EAAA;AACxC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM;QAExB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC;AAEjC,QAAA,OAAO,IAAI;IACb;AAEO,IAAA,KAAK,CAAC,IAAY,EAAE,SAAiB,EAAE,IAAW,EAAA;AACvD,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE;AACvC,YAAA,MAAM,IAAI,KAAK,CAAC,4DAA4D,IAAI,CAAA,EAAA,CAAI,CAAC;QACvF;AAEA,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,CAAC;AAE9B,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,aAAa;AACnC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;QAEvB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC;AACpB,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,GAAG;QAC/B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,GAAG;QAC/B,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,GAAG;QAChC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;AAE1B,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;AACvB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC;QACxB;AAEA,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;AAElD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE;YACtC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACjF;AAEA,QAAA,OAAO,IAAI;IACb;IAEO,cAAc,CAAC,QAAQ,GAAG,CAAC,EAAA;AAChC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC;AAC7C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC;AAC9C,QAAA,MAAM,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC,kBAAkB,IAAI,KAAK,KAAK,IAAI,CAAC,mBAAmB;QAEtF,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,YAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;QAClC;QAEA,OAAO;YACL,KAAK;YACL,IAAI;YACJ,OAAO;YACP,OAAO,EAAE,IAAI,CAAC,QAAQ;SACvB;IACH;AAEQ,IAAA,eAAe,CAAC,aAAqB,EAAA;AAC3C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ;AAE7B,QAAA,IAAI,aAAa,IAAI,OAAO,EAAE;YAC5B;QACF;QAEA,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,CAAC;AAE7C,QAAA,OAAO,IAAI,GAAG,aAAa,EAAE;YAC3B,IAAI,IAAI,CAAC;QACX;QAEA,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,IAAI,GAAG,aAAa,CAAC;AAEvD,QAAA,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,QAAQ;IACvB;AAEQ,IAAA,UAAU,CAAC,KAAa,EAAA;AAC9B,QAAA,gBAAgB,CAAC,CAAC,CAAC,GAAG,KAAK;AAE3B,QAAA,OAAO,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC;IACjC;IAEQ,IAAI,CAAC,IAAY,EAAE,KAAa,EAAA;AACtC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,KAAK,MAAM,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC;IACzD;AACD;;;;"}
|
|
@@ -2,6 +2,7 @@ import { SceneNode } from '@/core/SceneNode';
|
|
|
2
2
|
import { Matrix } from '@/math/Matrix';
|
|
3
3
|
import { ObservableSize } from '@/math/ObservableSize';
|
|
4
4
|
import { ObservableVector } from '@/math/ObservableVector';
|
|
5
|
+
import type { PointLike } from '@/math/PointLike';
|
|
5
6
|
import { Rectangle } from '@/math/Rectangle';
|
|
6
7
|
/**
|
|
7
8
|
* Dirty-flag bits for lazy {@link View} transform and bounds recalculation.
|
|
@@ -48,6 +49,7 @@ export interface ViewShakeOptions {
|
|
|
48
49
|
* matrices, a follow-target system for tracking scene nodes, and a procedural
|
|
49
50
|
* screen-shake effect. Call {@link update} once per frame to advance follow and
|
|
50
51
|
* shake animations.
|
|
52
|
+
* @stable
|
|
51
53
|
*/
|
|
52
54
|
export declare class View {
|
|
53
55
|
private readonly _center;
|
|
@@ -152,6 +154,27 @@ export declare class View {
|
|
|
152
154
|
* Use this to convert screen-space coordinates (e.g. mouse position) to world space.
|
|
153
155
|
*/
|
|
154
156
|
getInverseTransform(): Matrix;
|
|
157
|
+
/**
|
|
158
|
+
* Convert a canvas pixel coordinate to a world-space position for this view.
|
|
159
|
+
* Accounts for the view's viewport rectangle, so it works correctly in
|
|
160
|
+
* multi-view / split-screen setups.
|
|
161
|
+
*
|
|
162
|
+
* @param screenX - X pixel relative to the canvas top-left corner.
|
|
163
|
+
* @param screenY - Y pixel relative to the canvas top-left corner.
|
|
164
|
+
* @param canvasWidth - Canvas width in pixels (e.g. `app.canvas.width`).
|
|
165
|
+
* @param canvasHeight - Canvas height in pixels (e.g. `app.canvas.height`).
|
|
166
|
+
*/
|
|
167
|
+
screenToWorld(screenX: number, screenY: number, canvasWidth: number, canvasHeight: number): PointLike;
|
|
168
|
+
/**
|
|
169
|
+
* Convert a world-space position to canvas pixel coordinates for this view.
|
|
170
|
+
* Accounts for the view's viewport rectangle.
|
|
171
|
+
*
|
|
172
|
+
* @param worldX - World X coordinate.
|
|
173
|
+
* @param worldY - World Y coordinate.
|
|
174
|
+
* @param canvasWidth - Canvas width in pixels (e.g. `app.canvas.width`).
|
|
175
|
+
* @param canvasHeight - Canvas height in pixels (e.g. `app.canvas.height`).
|
|
176
|
+
*/
|
|
177
|
+
worldToScreen(worldX: number, worldY: number, canvasWidth: number, canvasHeight: number): PointLike;
|
|
155
178
|
/**
|
|
156
179
|
* Return the world-space bounding rectangle of the currently visible area, recalculating if dirty.
|
|
157
180
|
* Used for frustum culling by {@link Drawable.render}.
|