@codexo/exojs 0.14.0 → 0.15.1
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 +183 -0
- package/README.md +2 -4
- package/dist/esm/animation/Tween.d.ts.map +1 -1
- package/dist/esm/animation/Tween.js +0 -1
- package/dist/esm/animation/Tween.js.map +1 -1
- package/dist/esm/animation/TweenManager.d.ts +44 -5
- package/dist/esm/animation/TweenManager.d.ts.map +1 -1
- package/dist/esm/animation/TweenManager.js +57 -5
- package/dist/esm/animation/TweenManager.js.map +1 -1
- package/dist/esm/animation/TweenSequencer.d.ts +139 -0
- package/dist/esm/animation/TweenSequencer.d.ts.map +1 -0
- package/dist/esm/animation/TweenSequencer.js +305 -0
- package/dist/esm/animation/TweenSequencer.js.map +1 -0
- package/dist/esm/animation/index.d.ts +1 -0
- package/dist/esm/animation/index.d.ts.map +1 -1
- package/dist/esm/audio/Playable.d.ts +6 -1
- package/dist/esm/audio/Playable.d.ts.map +1 -1
- package/dist/esm/audio/WorkletEffect.d.ts +34 -20
- package/dist/esm/audio/WorkletEffect.d.ts.map +1 -1
- package/dist/esm/audio/WorkletEffect.js +92 -25
- package/dist/esm/audio/WorkletEffect.js.map +1 -1
- package/dist/esm/core/Application.d.ts +43 -5
- package/dist/esm/core/Application.d.ts.map +1 -1
- package/dist/esm/core/Application.js +83 -9
- package/dist/esm/core/Application.js.map +1 -1
- package/dist/esm/core/BuildInfo.js +2 -2
- package/dist/esm/core/Codec.d.ts +41 -0
- package/dist/esm/core/Codec.d.ts.map +1 -0
- package/dist/esm/core/Codec.js +79 -0
- package/dist/esm/core/Codec.js.map +1 -0
- package/dist/esm/core/FixedTimestep.d.ts +28 -0
- package/dist/esm/core/FixedTimestep.d.ts.map +1 -0
- package/dist/esm/core/FixedTimestep.js +62 -0
- package/dist/esm/core/FixedTimestep.js.map +1 -0
- package/dist/esm/core/Scene.d.ts +14 -0
- package/dist/esm/core/Scene.d.ts.map +1 -1
- package/dist/esm/core/Scene.js +18 -0
- package/dist/esm/core/Scene.js.map +1 -1
- package/dist/esm/core/SceneManager.d.ts +7 -0
- package/dist/esm/core/SceneManager.d.ts.map +1 -1
- package/dist/esm/core/SceneManager.js +20 -4
- package/dist/esm/core/SceneManager.js.map +1 -1
- package/dist/esm/core/SceneNode.d.ts +46 -7
- package/dist/esm/core/SceneNode.d.ts.map +1 -1
- package/dist/esm/core/SceneNode.js +73 -12
- package/dist/esm/core/SceneNode.js.map +1 -1
- package/dist/esm/core/Stage.d.ts +7 -0
- package/dist/esm/core/Stage.d.ts.map +1 -1
- package/dist/esm/core/SystemRegistry.d.ts +5 -0
- package/dist/esm/core/SystemRegistry.d.ts.map +1 -1
- package/dist/esm/core/SystemRegistry.js +10 -0
- package/dist/esm/core/SystemRegistry.js.map +1 -1
- package/dist/esm/core/index.d.ts +4 -0
- package/dist/esm/core/index.d.ts.map +1 -1
- package/dist/esm/core/logging.d.ts +34 -0
- package/dist/esm/core/logging.d.ts.map +1 -0
- package/dist/esm/core/logging.js +59 -0
- package/dist/esm/core/logging.js.map +1 -0
- package/dist/esm/core/serialization/commonFields.d.ts.map +1 -1
- package/dist/esm/core/serialization/commonFields.js +6 -0
- package/dist/esm/core/serialization/commonFields.js.map +1 -1
- package/dist/esm/core/serialization/renderingSerializers.d.ts.map +1 -1
- package/dist/esm/core/serialization/renderingSerializers.js +14 -5
- package/dist/esm/core/serialization/renderingSerializers.js.map +1 -1
- package/dist/esm/debug/BoundingBoxesLayer.d.ts.map +1 -1
- package/dist/esm/debug/BoundingBoxesLayer.js +2 -1
- package/dist/esm/debug/BoundingBoxesLayer.js.map +1 -1
- package/dist/esm/debug/HitTestLayer.js +4 -4
- package/dist/esm/debug/HitTestLayer.js.map +1 -1
- package/dist/esm/debug/PerformanceLayer.js +1 -1
- package/dist/esm/debug/PerformanceLayer.js.map +1 -1
- package/dist/esm/debug/RenderPassInspectorLayer.js +2 -2
- package/dist/esm/debug/RenderPassInspectorLayer.js.map +1 -1
- package/dist/esm/index.js +7 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/input/Gamepad.d.ts +10 -0
- package/dist/esm/input/Gamepad.d.ts.map +1 -1
- package/dist/esm/input/Gamepad.js +12 -0
- package/dist/esm/input/Gamepad.js.map +1 -1
- package/dist/esm/input/InputManager.d.ts.map +1 -1
- package/dist/esm/input/InputManager.js +5 -0
- package/dist/esm/input/InputManager.js.map +1 -1
- package/dist/esm/input/InteractionManager.js +4 -4
- package/dist/esm/input/InteractionManager.js.map +1 -1
- package/dist/esm/math/AbstractVector.d.ts +4 -3
- package/dist/esm/math/AbstractVector.d.ts.map +1 -1
- package/dist/esm/math/AbstractVector.js +5 -4
- package/dist/esm/math/AbstractVector.js.map +1 -1
- package/dist/esm/math/ObservableVector.d.ts +2 -0
- package/dist/esm/math/ObservableVector.d.ts.map +1 -1
- package/dist/esm/math/ObservableVector.js +9 -0
- package/dist/esm/math/ObservableVector.js.map +1 -1
- package/dist/esm/math/Polygon.d.ts.map +1 -1
- package/dist/esm/math/Polygon.js +4 -1
- package/dist/esm/math/Polygon.js.map +1 -1
- package/dist/esm/math/collision-detection.d.ts.map +1 -1
- package/dist/esm/math/collision-detection.js +14 -14
- package/dist/esm/math/collision-detection.js.map +1 -1
- package/dist/esm/math/collision-primitives.d.ts +1 -1
- package/dist/esm/math/collision-primitives.d.ts.map +1 -1
- package/dist/esm/math/collision-primitives.js +4 -1
- package/dist/esm/math/collision-primitives.js.map +1 -1
- package/dist/esm/rendering/BackendTargetPass.d.ts +1 -1
- package/dist/esm/rendering/BackendTargetPass.d.ts.map +1 -1
- package/dist/esm/rendering/CallbackRenderPass.d.ts +14 -10
- package/dist/esm/rendering/CallbackRenderPass.d.ts.map +1 -1
- package/dist/esm/rendering/CallbackRenderPass.js +16 -11
- package/dist/esm/rendering/CallbackRenderPass.js.map +1 -1
- package/dist/esm/rendering/DrawContext.d.ts +48 -0
- package/dist/esm/rendering/DrawContext.d.ts.map +1 -0
- package/dist/esm/rendering/PassContext.d.ts +42 -0
- package/dist/esm/rendering/PassContext.d.ts.map +1 -0
- package/dist/esm/rendering/PassContext.js +48 -0
- package/dist/esm/rendering/PassContext.js.map +1 -0
- package/dist/esm/rendering/RenderBackend.d.ts +14 -0
- package/dist/esm/rendering/RenderBackend.d.ts.map +1 -1
- package/dist/esm/rendering/RenderNode.d.ts.map +1 -1
- package/dist/esm/rendering/RenderNode.js +2 -2
- package/dist/esm/rendering/RenderNode.js.map +1 -1
- package/dist/esm/rendering/RenderNodePass.d.ts +1 -1
- package/dist/esm/rendering/RenderNodePass.d.ts.map +1 -1
- package/dist/esm/rendering/RenderingContext.d.ts +47 -16
- package/dist/esm/rendering/RenderingContext.d.ts.map +1 -1
- package/dist/esm/rendering/RenderingContext.js +134 -36
- package/dist/esm/rendering/RenderingContext.js.map +1 -1
- package/dist/esm/rendering/TransformBuffer.d.ts +23 -0
- package/dist/esm/rendering/TransformBuffer.d.ts.map +1 -1
- package/dist/esm/rendering/TransformBuffer.js +58 -0
- package/dist/esm/rendering/TransformBuffer.js.map +1 -1
- package/dist/esm/rendering/View.d.ts +38 -0
- package/dist/esm/rendering/View.d.ts.map +1 -1
- package/dist/esm/rendering/View.js +37 -0
- package/dist/esm/rendering/View.js.map +1 -1
- package/dist/esm/rendering/filters/WebGpuShaderFilter.d.ts.map +1 -1
- package/dist/esm/rendering/filters/WebGpuShaderFilter.js +9 -2
- package/dist/esm/rendering/filters/WebGpuShaderFilter.js.map +1 -1
- package/dist/esm/rendering/material/MeshMaterial.d.ts +20 -1
- package/dist/esm/rendering/material/MeshMaterial.d.ts.map +1 -1
- package/dist/esm/rendering/material/MeshMaterial.js +17 -0
- package/dist/esm/rendering/material/MeshMaterial.js.map +1 -1
- package/dist/esm/rendering/material/SpriteMaterial.d.ts +20 -1
- package/dist/esm/rendering/material/SpriteMaterial.d.ts.map +1 -1
- package/dist/esm/rendering/material/SpriteMaterial.js +17 -0
- package/dist/esm/rendering/material/SpriteMaterial.js.map +1 -1
- package/dist/esm/rendering/plan/RenderEffectExecutor.d.ts.map +1 -1
- package/dist/esm/rendering/plan/RenderEffectExecutor.js +7 -2
- package/dist/esm/rendering/plan/RenderEffectExecutor.js.map +1 -1
- package/dist/esm/rendering/plan/RenderInstruction.d.ts +5 -2
- package/dist/esm/rendering/plan/RenderInstruction.d.ts.map +1 -1
- package/dist/esm/rendering/plan/RenderPlanBuilder.d.ts.map +1 -1
- package/dist/esm/rendering/plan/RenderPlanBuilder.js +23 -5
- package/dist/esm/rendering/plan/RenderPlanBuilder.js.map +1 -1
- package/dist/esm/rendering/plan/RenderScope.d.ts +7 -0
- package/dist/esm/rendering/plan/RenderScope.d.ts.map +1 -1
- package/dist/esm/rendering/primitives/Graphics.d.ts +17 -1
- package/dist/esm/rendering/primitives/Graphics.d.ts.map +1 -1
- package/dist/esm/rendering/primitives/Graphics.js +50 -15
- package/dist/esm/rendering/primitives/Graphics.js.map +1 -1
- package/dist/esm/rendering/public.d.ts +5 -5
- package/dist/esm/rendering/public.d.ts.map +1 -1
- package/dist/esm/rendering/sprite/AnimatedSprite.d.ts +57 -19
- package/dist/esm/rendering/sprite/AnimatedSprite.d.ts.map +1 -1
- package/dist/esm/rendering/sprite/AnimatedSprite.js +138 -31
- package/dist/esm/rendering/sprite/AnimatedSprite.js.map +1 -1
- package/dist/esm/rendering/sprite/Sprite.d.ts.map +1 -1
- package/dist/esm/rendering/sprite/Sprite.js +8 -0
- package/dist/esm/rendering/sprite/Sprite.js.map +1 -1
- package/dist/esm/rendering/text/BitmapText.d.ts.map +1 -1
- package/dist/esm/rendering/text/BitmapText.js +2 -0
- package/dist/esm/rendering/text/BitmapText.js.map +1 -1
- package/dist/esm/rendering/text/HTMLText.d.ts.map +1 -1
- package/dist/esm/rendering/text/HTMLText.js +2 -2
- package/dist/esm/rendering/text/HTMLText.js.map +1 -1
- package/dist/esm/rendering/text/Text.d.ts.map +1 -1
- package/dist/esm/rendering/text/Text.js +2 -0
- package/dist/esm/rendering/text/Text.js.map +1 -1
- package/dist/esm/rendering/text/TextLayout.d.ts.map +1 -1
- package/dist/esm/rendering/text/TextLayout.js +2 -3
- package/dist/esm/rendering/text/TextLayout.js.map +1 -1
- package/dist/esm/rendering/types.d.ts +37 -13
- package/dist/esm/rendering/types.d.ts.map +1 -1
- package/dist/esm/rendering/types.js +37 -13
- package/dist/esm/rendering/types.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2BackdropBlendCompositor.d.ts +41 -0
- package/dist/esm/rendering/webgl2/WebGl2BackdropBlendCompositor.d.ts.map +1 -0
- package/dist/esm/rendering/webgl2/WebGl2BackdropBlendCompositor.js +222 -0
- package/dist/esm/rendering/webgl2/WebGl2BackdropBlendCompositor.js.map +1 -0
- package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts +34 -1
- package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2Backend.js +108 -60
- package/dist/esm/rendering/webgl2/WebGl2Backend.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2TextRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js +50 -11
- package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js.map +1 -1
- package/dist/esm/rendering/webgl2/glsl/backdrop-blend.frag.js +4 -0
- package/dist/esm/rendering/webgl2/glsl/backdrop-blend.frag.js.map +1 -0
- package/dist/esm/rendering/webgl2/glsl/backdrop-blend.vert.js +4 -0
- package/dist/esm/rendering/webgl2/glsl/backdrop-blend.vert.js.map +1 -0
- package/dist/esm/rendering/webgl2/glsl/text.vert.js +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBackdropBlendCompositor.d.ts +72 -0
- package/dist/esm/rendering/webgpu/WebGpuBackdropBlendCompositor.d.ts.map +1 -0
- package/dist/esm/rendering/webgpu/WebGpuBackdropBlendCompositor.js +494 -0
- package/dist/esm/rendering/webgpu/WebGpuBackdropBlendCompositor.js.map +1 -0
- package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts +27 -0
- package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBackend.js +157 -60
- package/dist/esm/rendering/webgpu/WebGpuBackend.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBlendState.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBlendState.js +5 -29
- package/dist/esm/rendering/webgpu/WebGpuBlendState.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.d.ts +2 -0
- package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.js +2 -1
- package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.d.ts +4 -0
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js +3 -1
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.d.ts +2 -0
- package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.js +2 -1
- package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.d.ts +8 -0
- package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.js +20 -0
- package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.d.ts +6 -0
- package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.js +4 -1
- package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.d.ts +2 -0
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js +2 -1
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuStencilClipper.d.ts +2 -0
- package/dist/esm/rendering/webgpu/WebGpuStencilClipper.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuStencilClipper.js +2 -1
- package/dist/esm/rendering/webgpu/WebGpuStencilClipper.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuTextRenderer.d.ts +2 -0
- package/dist/esm/rendering/webgpu/WebGpuTextRenderer.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js +3 -2
- package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.d.ts +3 -1
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.d.ts.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js +29 -5
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js.map +1 -1
- package/dist/esm/resources/Loader.d.ts +13 -0
- package/dist/esm/resources/Loader.d.ts.map +1 -1
- package/dist/esm/resources/Loader.js +67 -7
- package/dist/esm/resources/Loader.js.map +1 -1
- package/dist/esm/resources/coreAssetBindings.d.ts +11 -0
- package/dist/esm/resources/coreAssetBindings.d.ts.map +1 -1
- package/dist/esm/resources/coreAssetBindings.js +10 -2
- package/dist/esm/resources/coreAssetBindings.js.map +1 -1
- package/dist/esm/ui/ScrollContainer.d.ts +63 -0
- package/dist/esm/ui/ScrollContainer.d.ts.map +1 -0
- package/dist/esm/ui/ScrollContainer.js +99 -0
- package/dist/esm/ui/ScrollContainer.js.map +1 -0
- package/dist/esm/ui/Tooltip.d.ts +67 -0
- package/dist/esm/ui/Tooltip.d.ts.map +1 -0
- package/dist/esm/ui/Tooltip.js +133 -0
- package/dist/esm/ui/Tooltip.js.map +1 -0
- package/dist/esm/ui/index.d.ts +4 -0
- package/dist/esm/ui/index.d.ts.map +1 -1
- package/dist/exo.debug.esm.js +1 -1
- package/dist/exo.debug.esm.js.map +1 -1
- package/dist/exo.esm.js +1 -1
- package/dist/exo.esm.js.map +1 -1
- package/dist/exo.iife.js +45273 -0
- package/dist/exo.iife.js.map +1 -0
- package/dist/exo.iife.min.js +2 -0
- package/dist/exo.iife.min.js.map +1 -0
- package/package.json +15 -3
- package/dist/esm/rendering/Camera.d.ts +0 -34
- package/dist/esm/rendering/Camera.d.ts.map +0 -1
- package/dist/esm/rendering/Camera.js +0 -38
- package/dist/esm/rendering/Camera.js.map +0 -1
|
@@ -2,15 +2,14 @@ import { ImmediateMesh } from './mesh/ImmediateMesh.js';
|
|
|
2
2
|
import { StencilAttachmentMode } from './pass/RenderPassDescriptor.js';
|
|
3
3
|
import { playRenderTree } from './plan/playRenderTree.js';
|
|
4
4
|
import { RenderTexture } from './texture/RenderTexture.js';
|
|
5
|
-
import { Camera } from './Camera.js';
|
|
6
5
|
import '../core/Color.js';
|
|
7
6
|
import '../math/Matrix.js';
|
|
8
7
|
import '../core/SceneNode.js';
|
|
9
8
|
import '../math/Size.js';
|
|
10
9
|
import '../math/Rectangle.js';
|
|
10
|
+
import './types.js';
|
|
11
11
|
import './plan/RenderCommand.js';
|
|
12
12
|
import './plan/RenderScope.js';
|
|
13
|
-
import './types.js';
|
|
14
13
|
import { View } from './View.js';
|
|
15
14
|
|
|
16
15
|
/**
|
|
@@ -20,45 +19,50 @@ import { View } from './View.js';
|
|
|
20
19
|
*
|
|
21
20
|
* The conceptual model is "the context renders the node":
|
|
22
21
|
* context.render(node) // into the active target (canvas by default)
|
|
23
|
-
* context.render(node, { view }) // override view (
|
|
24
|
-
* context.renderTo(node,
|
|
22
|
+
* context.render(node, { view }) // override view (the world view, screenView, etc.)
|
|
23
|
+
* context.renderTo(node, { target }) // into a caller-owned off-screen target (per-frame)
|
|
24
|
+
* context.capture(node, { width, height }) // into a freshly allocated RenderTexture
|
|
25
25
|
* @stable
|
|
26
26
|
*/
|
|
27
27
|
class RenderingContext {
|
|
28
28
|
/** App-systems tick band — rendering last (camera + render-plan prep). @internal */
|
|
29
29
|
order = 500;
|
|
30
30
|
_backend;
|
|
31
|
-
|
|
31
|
+
_view;
|
|
32
32
|
_screenView;
|
|
33
33
|
/** Lazily-created pooled drawable reused by every {@link drawGeometry} call. */
|
|
34
34
|
_immediateMesh = null;
|
|
35
35
|
/** Lazily-created pooled geometry/look source reused by every {@link drawBatch} call. */
|
|
36
36
|
_batchMesh = null;
|
|
37
|
+
/** Views explicitly pinned for per-frame update via {@link trackView} (escape hatch for views ticked but never rendered). */
|
|
38
|
+
_trackedViews = new Set();
|
|
39
|
+
/** Views rendered since the last {@link update} — auto-advanced then cleared each frame, so a custom view's follow/shake ticks with no manual bookkeeping. */
|
|
40
|
+
_renderedViews = new Set();
|
|
37
41
|
constructor(backend) {
|
|
38
42
|
this._backend = backend;
|
|
39
43
|
const viewWidth = backend.view?.width ?? 0;
|
|
40
44
|
const viewHeight = backend.view?.height ?? 0;
|
|
41
45
|
const viewCenterX = backend.view?.center?.x ?? viewWidth / 2;
|
|
42
46
|
const viewCenterY = backend.view?.center?.y ?? viewHeight / 2;
|
|
43
|
-
this.
|
|
47
|
+
this._view = View.from({
|
|
44
48
|
center: { x: viewCenterX, y: viewCenterY },
|
|
45
49
|
size: { width: viewWidth, height: viewHeight },
|
|
46
50
|
});
|
|
47
51
|
this._screenView = new View(viewCenterX, viewCenterY, viewWidth, viewHeight);
|
|
48
52
|
}
|
|
49
53
|
/**
|
|
50
|
-
* The active
|
|
51
|
-
* backend view. Replace with a custom `
|
|
52
|
-
* zoom, bounds, or split-screen viewport behavior.
|
|
54
|
+
* The active world {@link View} — the default for {@link render}. Defaults to
|
|
55
|
+
* a view matching the initial backend view. Replace with a custom `View` for
|
|
56
|
+
* follow, zoom, bounds, or split-screen viewport behavior.
|
|
53
57
|
*/
|
|
54
|
-
get
|
|
55
|
-
return this.
|
|
58
|
+
get view() {
|
|
59
|
+
return this._view;
|
|
56
60
|
}
|
|
57
|
-
set
|
|
58
|
-
const
|
|
59
|
-
this.
|
|
60
|
-
if (
|
|
61
|
-
|
|
61
|
+
set view(view) {
|
|
62
|
+
const previousView = this._view;
|
|
63
|
+
this._view = view;
|
|
64
|
+
if (previousView !== view) {
|
|
65
|
+
previousView.destroy();
|
|
62
66
|
}
|
|
63
67
|
}
|
|
64
68
|
/**
|
|
@@ -72,26 +76,57 @@ class RenderingContext {
|
|
|
72
76
|
get screenView() {
|
|
73
77
|
return this._screenView;
|
|
74
78
|
}
|
|
75
|
-
/**
|
|
76
|
-
|
|
77
|
-
|
|
79
|
+
/**
|
|
80
|
+
* Register a custom {@link View} (e.g. a picture-in-picture or minimap view)
|
|
81
|
+
* so {@link update} advances its `follow`/`shake`/bounds each frame, alongside
|
|
82
|
+
* the active {@link view}. The active view and {@link screenView} are managed
|
|
83
|
+
* automatically and need not be tracked.
|
|
84
|
+
*
|
|
85
|
+
* The view is caller-owned: call {@link untrackView} before discarding it,
|
|
86
|
+
* otherwise a `follow` target keeps it (and its target node) referenced.
|
|
87
|
+
*/
|
|
88
|
+
trackView(view) {
|
|
89
|
+
this._trackedViews.add(view);
|
|
90
|
+
}
|
|
91
|
+
/** Stop advancing a previously {@link trackView}-ed view. No-op if absent. */
|
|
92
|
+
untrackView(view) {
|
|
93
|
+
this._trackedViews.delete(view);
|
|
78
94
|
}
|
|
79
95
|
/**
|
|
80
96
|
* Advance follow, shake, and bounds-constraint animations on the active
|
|
81
|
-
*
|
|
97
|
+
* {@link view}, every view rendered last frame (automatic), and any
|
|
98
|
+
* {@link trackView}-ed view. Ticked once per frame via {@link Application.systems}.
|
|
82
99
|
*/
|
|
83
100
|
update(delta) {
|
|
84
|
-
|
|
101
|
+
const ms = delta.milliseconds;
|
|
102
|
+
this._view.update(ms);
|
|
103
|
+
// Auto-advance every view rendered last frame (so a custom view's follow/shake
|
|
104
|
+
// ticks with no manual bookkeeping) plus any explicitly tracked view; each view
|
|
105
|
+
// updates at most once per frame.
|
|
106
|
+
for (const view of this._trackedViews) {
|
|
107
|
+
if (view !== this._view) {
|
|
108
|
+
view.update(ms);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
for (const view of this._renderedViews) {
|
|
112
|
+
if (view !== this._view && !this._trackedViews.has(view)) {
|
|
113
|
+
view.update(ms);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// Render-usage is per-frame: clear so a view that stops being rendered stops ticking.
|
|
117
|
+
this._renderedViews.clear();
|
|
85
118
|
}
|
|
86
119
|
/**
|
|
87
|
-
* Destroy the resources this context owns — the active {@link
|
|
120
|
+
* Destroy the resources this context owns — the active {@link View} and the
|
|
88
121
|
* screen-space {@link View}. The {@link RenderBackend} is owned by the
|
|
89
122
|
* Application and destroyed separately.
|
|
90
123
|
* @internal — invoked via Application.systems on teardown.
|
|
91
124
|
*/
|
|
92
125
|
destroy() {
|
|
93
|
-
this.
|
|
126
|
+
this._view.destroy();
|
|
94
127
|
this._screenView.destroy();
|
|
128
|
+
this._trackedViews.clear();
|
|
129
|
+
this._renderedViews.clear();
|
|
95
130
|
this._immediateMesh?.destroy();
|
|
96
131
|
this._immediateMesh = null;
|
|
97
132
|
this._batchMesh?.destroy();
|
|
@@ -102,7 +137,7 @@ class RenderingContext {
|
|
|
102
137
|
* Preserves the camera's center and zoom; only the visible area size changes.
|
|
103
138
|
*/
|
|
104
139
|
resize(width, height) {
|
|
105
|
-
this.
|
|
140
|
+
this._view.resize(width, height);
|
|
106
141
|
this._screenView.resize(width, height);
|
|
107
142
|
this._screenView.setCenter(width / 2, height / 2);
|
|
108
143
|
}
|
|
@@ -114,7 +149,8 @@ class RenderingContext {
|
|
|
114
149
|
* high-level rendering entry point.
|
|
115
150
|
*/
|
|
116
151
|
render(node, options = {}) {
|
|
117
|
-
const view = options.view ?? this.
|
|
152
|
+
const view = options.view ?? this._view;
|
|
153
|
+
this._renderedViews.add(view);
|
|
118
154
|
this._backend.setView(view);
|
|
119
155
|
playRenderTree(node, this._backend);
|
|
120
156
|
}
|
|
@@ -127,7 +163,7 @@ class RenderingContext {
|
|
|
127
163
|
* Saves and restores the active render target and view so the caller's
|
|
128
164
|
* rendering state is undisturbed.
|
|
129
165
|
*/
|
|
130
|
-
|
|
166
|
+
capture(node, options) {
|
|
131
167
|
const target = new RenderTexture(options.width, options.height);
|
|
132
168
|
const view = new View(options.width / 2, options.height / 2, options.width, options.height);
|
|
133
169
|
const coordinator = this._backend._passCoordinator;
|
|
@@ -160,6 +196,65 @@ class RenderingContext {
|
|
|
160
196
|
}
|
|
161
197
|
return target;
|
|
162
198
|
}
|
|
199
|
+
/**
|
|
200
|
+
* Clear the active render target to `color`. Routes through the pass
|
|
201
|
+
* coordinator so it respects the clear-vs-load policy and never leaks the
|
|
202
|
+
* clear onto another target. Falls back to a raw backend clear when no
|
|
203
|
+
* coordinator is present (test stubs).
|
|
204
|
+
*/
|
|
205
|
+
clear(color) {
|
|
206
|
+
const coordinator = this._backend._passCoordinator;
|
|
207
|
+
if (coordinator) {
|
|
208
|
+
coordinator.withChildPass({
|
|
209
|
+
target: coordinator.activeTarget,
|
|
210
|
+
view: coordinator.activeView,
|
|
211
|
+
load: 'clear',
|
|
212
|
+
clearColor: color,
|
|
213
|
+
stencil: StencilAttachmentMode.None,
|
|
214
|
+
}, () => {
|
|
215
|
+
/* Clear is expressed entirely by the pass descriptor above; the pass body is intentionally empty. */
|
|
216
|
+
});
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
this._backend.clear(color);
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Render `node` into a caller-owned {@link RenderTexture} that is reused across
|
|
223
|
+
* frames — the per-frame, allocation-free counterpart to {@link capture}. The
|
|
224
|
+
* target and view are supplied by the caller; the view defaults to the
|
|
225
|
+
* target's own view. Save/restore is handled by the pass coordinator.
|
|
226
|
+
*/
|
|
227
|
+
renderTo(node, options) {
|
|
228
|
+
const view = options.view ?? options.target.view;
|
|
229
|
+
this._renderedViews.add(view);
|
|
230
|
+
const coordinator = this._backend._passCoordinator;
|
|
231
|
+
if (coordinator) {
|
|
232
|
+
coordinator.withChildPass({
|
|
233
|
+
target: options.target,
|
|
234
|
+
view,
|
|
235
|
+
load: options.clear !== undefined ? 'clear' : 'load',
|
|
236
|
+
clearColor: options.clear ?? null,
|
|
237
|
+
stencil: StencilAttachmentMode.None,
|
|
238
|
+
}, () => {
|
|
239
|
+
playRenderTree(node, this._backend);
|
|
240
|
+
});
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
const previousTarget = this._backend.renderTarget;
|
|
244
|
+
const previousView = this._backend.view;
|
|
245
|
+
this._backend.setRenderTarget(options.target);
|
|
246
|
+
this._backend.setView(view);
|
|
247
|
+
if (options.clear !== undefined) {
|
|
248
|
+
this._backend.clear(options.clear);
|
|
249
|
+
}
|
|
250
|
+
try {
|
|
251
|
+
playRenderTree(node, this._backend);
|
|
252
|
+
}
|
|
253
|
+
finally {
|
|
254
|
+
this._backend.setRenderTarget(previousTarget);
|
|
255
|
+
this._backend.setView(previousView);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
163
258
|
/**
|
|
164
259
|
* Immediately draw a single {@link Geometry} with `transform` as its world
|
|
165
260
|
* matrix — no retained {@link RenderNode} required. Useful for procedural or
|
|
@@ -194,13 +289,13 @@ class RenderingContext {
|
|
|
194
289
|
if (material !== null && material.target !== 'mesh') {
|
|
195
290
|
throw new Error(`drawGeometry material must target 'mesh' (got '${String(material.target)}').`);
|
|
196
291
|
}
|
|
197
|
-
const view = options.view ?? this.
|
|
292
|
+
const view = options.view ?? this._view;
|
|
293
|
+
this._renderedViews.add(view);
|
|
198
294
|
const mesh = (this._immediateMesh ??= new ImmediateMesh());
|
|
199
|
-
// Set the view first:
|
|
200
|
-
//
|
|
201
|
-
//
|
|
202
|
-
//
|
|
203
|
-
// pooled mesh through a still-deferred draw.
|
|
295
|
+
// Set the view first: setView now only flushes when the view actually changes
|
|
296
|
+
// (not unconditionally). Correctness here rests on (a) the trailing flush()
|
|
297
|
+
// below — so a later drawGeometry cannot observe this pooled mesh through a
|
|
298
|
+
// still-deferred draw — and (b) any renderer switch flushing its pending batch.
|
|
204
299
|
this._backend.setView(view);
|
|
205
300
|
mesh.configure(geometry, transform, material, options.tint ?? null);
|
|
206
301
|
this._backend.draw(mesh);
|
|
@@ -231,11 +326,14 @@ class RenderingContext {
|
|
|
231
326
|
if (batch.count === 0) {
|
|
232
327
|
return;
|
|
233
328
|
}
|
|
234
|
-
const view = options.view ?? this.
|
|
329
|
+
const view = options.view ?? this._view;
|
|
330
|
+
this._renderedViews.add(view);
|
|
235
331
|
const mesh = (this._batchMesh ??= new ImmediateMesh());
|
|
236
|
-
// Set the view first (
|
|
237
|
-
//
|
|
238
|
-
// batch
|
|
332
|
+
// Set the view first (setView only flushes when the view actually changes;
|
|
333
|
+
// correctness rests on the trailing flush() below and on any renderer switch
|
|
334
|
+
// flushing its pending batch), configure the pooled geometry/look source,
|
|
335
|
+
// then submit a single instanced draw over the batch's per-instance
|
|
336
|
+
// transforms/tints and flush it immediately.
|
|
239
337
|
this._backend.setView(view);
|
|
240
338
|
mesh.configureBatchSource(batch.geometry, batch.material);
|
|
241
339
|
this._backend.drawInstanced(mesh, batch._instanceTransforms, batch._instanceTints, batch.count);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenderingContext.js","sources":["../../../../src/rendering/RenderingContext.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RenderingContext.js","sources":["../../../../src/rendering/RenderingContext.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,8 @@ export declare class TransformBuffer {
|
|
|
28
28
|
private _skippedWriteCount;
|
|
29
29
|
private _uploadCount;
|
|
30
30
|
private _uploadedRecordCount;
|
|
31
|
+
private _dirtyMin;
|
|
32
|
+
private _dirtyMax;
|
|
31
33
|
get count(): number;
|
|
32
34
|
/**
|
|
33
35
|
* Number of transform rows written into the buffer (via {@link write} /
|
|
@@ -59,8 +61,29 @@ export declare class TransformBuffer {
|
|
|
59
61
|
get capacity(): number;
|
|
60
62
|
get data(): Float32Array;
|
|
61
63
|
get version(): number;
|
|
64
|
+
/** Running content hash of the rows written since begin(). @internal */
|
|
65
|
+
get frameHash(): number;
|
|
62
66
|
begin(expectedCount?: number): this;
|
|
63
67
|
push(transform: Matrix, tint: Color): number;
|
|
68
|
+
/**
|
|
69
|
+
* Rewind the write cursor to `count`, freeing the rows above it for reuse, and
|
|
70
|
+
* (optionally) restore the running content hash to its pre-rewind value so the
|
|
71
|
+
* freed rows' writes don't linger in the hash and trigger spurious re-uploads.
|
|
72
|
+
* Used by nested draw plans (filters / cacheAsBitmap) to isolate their slots.
|
|
73
|
+
* @internal
|
|
74
|
+
*/
|
|
75
|
+
rewindTo(count: number, frameHash?: number): this;
|
|
76
|
+
/**
|
|
77
|
+
* Consume the dirty row range written since the last upload, clamped to
|
|
78
|
+
* `[0, maxCount)`, and clear it. Returns the contiguous `[firstRow, firstRow +
|
|
79
|
+
* rowCount)` a delta upload should push (`rowCount === 0` when nothing is
|
|
80
|
+
* dirty). The backend calls this at its upload boundary.
|
|
81
|
+
* @internal
|
|
82
|
+
*/
|
|
83
|
+
consumeDirtyRange(maxCount: number): {
|
|
84
|
+
firstRow: number;
|
|
85
|
+
rowCount: number;
|
|
86
|
+
};
|
|
64
87
|
write(slot: number, transform: Matrix, tint: Color): this;
|
|
65
88
|
/**
|
|
66
89
|
* Record that a draw command's transform write was intentionally skipped
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransformBuffer.d.ts","sourceRoot":"","sources":["../../../src/rendering/TransformBuffer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAU3C,gBAAgB;AAChB,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;GASG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAAmE;IAChF,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,mBAAmB,CAAM;IACjC,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,oBAAoB,CAAK;
|
|
1
|
+
{"version":3,"file":"TransformBuffer.d.ts","sourceRoot":"","sources":["../../../src/rendering/TransformBuffer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAU3C,gBAAgB;AAChB,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;GASG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAAmE;IAChF,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,mBAAmB,CAAM;IACjC,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,oBAAoB,CAAK;IAKjC,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,SAAS,CAAM;IAEvB,IAAW,KAAK,IAAI,MAAM,CAEzB;IAED;;;;;OAKG;IACH,IAAW,UAAU,IAAI,MAAM,CAE9B;IAED;;;;;OAKG;IACH,IAAW,iBAAiB,IAAI,MAAM,CAErC;IAED;;;;;OAKG;IACH,IAAW,WAAW,IAAI,MAAM,CAE/B;IAED;;;;OAIG;IACH,IAAW,mBAAmB,IAAI,MAAM,CAEvC;IAED,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAED,IAAW,IAAI,IAAI,YAAY,CAE9B;IAED,IAAW,OAAO,IAAI,MAAM,CAE3B;IAED,wEAAwE;IACxE,IAAW,SAAS,IAAI,MAAM,CAE7B;IAEM,KAAK,CAAC,aAAa,SAAI,GAAG,IAAI;IAiB9B,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,MAAM;IAQnD;;;;;;OAMG;IACI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAYxD;;;;;;OAMG;IACI,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IAe3E,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,IAAI;IAiDhE;;;;;OAKG;IACI,kBAAkB,IAAI,IAAI;IAMjC;;;;OAIG;IACI,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAOvC,cAAc,CAAC,QAAQ,SAAI,GAAG,4BAA4B;IAmBjE,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,IAAI;CAGb"}
|
|
@@ -25,6 +25,12 @@ class TransformBuffer {
|
|
|
25
25
|
_skippedWriteCount = 0;
|
|
26
26
|
_uploadCount = 0;
|
|
27
27
|
_uploadedRecordCount = 0;
|
|
28
|
+
// Dirty row range [_dirtyMin, _dirtyMax] written since the last upload — the
|
|
29
|
+
// exact rows a delta upload must push. Empty when `_dirtyMax < _dirtyMin`.
|
|
30
|
+
// Tracked by slot (not a high-water mark) so a reused slot (nested-plan
|
|
31
|
+
// rewind, filter composite) is correctly re-uploaded.
|
|
32
|
+
_dirtyMin = 0;
|
|
33
|
+
_dirtyMax = -1;
|
|
28
34
|
get count() {
|
|
29
35
|
return this._count;
|
|
30
36
|
}
|
|
@@ -72,6 +78,10 @@ class TransformBuffer {
|
|
|
72
78
|
get version() {
|
|
73
79
|
return this._version;
|
|
74
80
|
}
|
|
81
|
+
/** Running content hash of the rows written since begin(). @internal */
|
|
82
|
+
get frameHash() {
|
|
83
|
+
return this._frameHash;
|
|
84
|
+
}
|
|
75
85
|
begin(expectedCount = 0) {
|
|
76
86
|
if (expectedCount > 0) {
|
|
77
87
|
this._ensureCapacity(expectedCount);
|
|
@@ -82,6 +92,8 @@ class TransformBuffer {
|
|
|
82
92
|
this._skippedWriteCount = 0;
|
|
83
93
|
this._uploadCount = 0;
|
|
84
94
|
this._uploadedRecordCount = 0;
|
|
95
|
+
this._dirtyMin = 0;
|
|
96
|
+
this._dirtyMax = -1;
|
|
85
97
|
return this;
|
|
86
98
|
}
|
|
87
99
|
push(transform, tint) {
|
|
@@ -89,6 +101,40 @@ class TransformBuffer {
|
|
|
89
101
|
this.write(slot, transform, tint);
|
|
90
102
|
return slot;
|
|
91
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* Rewind the write cursor to `count`, freeing the rows above it for reuse, and
|
|
106
|
+
* (optionally) restore the running content hash to its pre-rewind value so the
|
|
107
|
+
* freed rows' writes don't linger in the hash and trigger spurious re-uploads.
|
|
108
|
+
* Used by nested draw plans (filters / cacheAsBitmap) to isolate their slots.
|
|
109
|
+
* @internal
|
|
110
|
+
*/
|
|
111
|
+
rewindTo(count, frameHash) {
|
|
112
|
+
if (count >= 0 && count < this._count) {
|
|
113
|
+
this._count = count;
|
|
114
|
+
if (frameHash !== undefined) {
|
|
115
|
+
this._frameHash = frameHash >>> 0;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return this;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Consume the dirty row range written since the last upload, clamped to
|
|
122
|
+
* `[0, maxCount)`, and clear it. Returns the contiguous `[firstRow, firstRow +
|
|
123
|
+
* rowCount)` a delta upload should push (`rowCount === 0` when nothing is
|
|
124
|
+
* dirty). The backend calls this at its upload boundary.
|
|
125
|
+
* @internal
|
|
126
|
+
*/
|
|
127
|
+
consumeDirtyRange(maxCount) {
|
|
128
|
+
if (this._dirtyMax < this._dirtyMin) {
|
|
129
|
+
return { firstRow: 0, rowCount: 0 };
|
|
130
|
+
}
|
|
131
|
+
const firstRow = Math.max(0, this._dirtyMin);
|
|
132
|
+
const lastRow = Math.min(this._dirtyMax, maxCount - 1);
|
|
133
|
+
const rowCount = lastRow >= firstRow ? lastRow - firstRow + 1 : 0;
|
|
134
|
+
this._dirtyMin = 0;
|
|
135
|
+
this._dirtyMax = -1;
|
|
136
|
+
return { firstRow, rowCount };
|
|
137
|
+
}
|
|
92
138
|
write(slot, transform, tint) {
|
|
93
139
|
if (!Number.isInteger(slot) || slot < 0) {
|
|
94
140
|
throw new Error(`TransformBuffer slot must be a non-negative integer (got ${slot}).`);
|
|
@@ -111,6 +157,18 @@ class TransformBuffer {
|
|
|
111
157
|
if (slot >= this._count) {
|
|
112
158
|
this._count = slot + 1;
|
|
113
159
|
}
|
|
160
|
+
// Track the exact written-slot range so a delta upload pushes precisely the
|
|
161
|
+
// changed rows — including a slot reused below the high-water mark.
|
|
162
|
+
if (this._dirtyMax < this._dirtyMin) {
|
|
163
|
+
this._dirtyMin = slot;
|
|
164
|
+
this._dirtyMax = slot;
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
if (slot < this._dirtyMin)
|
|
168
|
+
this._dirtyMin = slot;
|
|
169
|
+
if (slot > this._dirtyMax)
|
|
170
|
+
this._dirtyMax = slot;
|
|
171
|
+
}
|
|
114
172
|
this._frameHash = this._mix(this._frameHash, slot);
|
|
115
173
|
for (let i = 0; i < floatsPerSlot; i++) {
|
|
116
174
|
// In-bounds: offset..offset+floatsPerSlot-1 is the just-written slot.
|
|
@@ -1 +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;IACxB,WAAW,GAAG,CAAC;IACf,kBAAkB,GAAG,CAAC;IACtB,YAAY,GAAG,CAAC;IAChB,oBAAoB,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"TransformBuffer.js","sources":["../../../../src/rendering/TransformBuffer.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -41,6 +41,25 @@ export interface ViewShakeOptions {
|
|
|
41
41
|
/** When `true` the amplitude decays linearly to zero over the shake duration. Defaults to `true`. */
|
|
42
42
|
decay?: boolean;
|
|
43
43
|
}
|
|
44
|
+
/** Options for {@link View.from}. */
|
|
45
|
+
export interface ViewOptions {
|
|
46
|
+
/** World-space center position. Defaults to `{ x: 0, y: 0 }`. */
|
|
47
|
+
center?: {
|
|
48
|
+
x: number;
|
|
49
|
+
y: number;
|
|
50
|
+
};
|
|
51
|
+
/** Visible area size in world units (before zoom is applied). Defaults to `{ width: 0, height: 0 }`. */
|
|
52
|
+
size?: {
|
|
53
|
+
width: number;
|
|
54
|
+
height: number;
|
|
55
|
+
};
|
|
56
|
+
/** Normalized (0..1) viewport rectangle within the canvas. Defaults to the full canvas `(0, 0, 1, 1)`. */
|
|
57
|
+
viewport?: Rectangle;
|
|
58
|
+
/** Initial rotation in degrees. Defaults to `0`. */
|
|
59
|
+
rotation?: number;
|
|
60
|
+
/** Initial zoom level. A value of `2` halves the visible area. Defaults to `1`. */
|
|
61
|
+
zoom?: number;
|
|
62
|
+
}
|
|
44
63
|
/**
|
|
45
64
|
* 2D camera that defines what region of the world is visible on screen.
|
|
46
65
|
*
|
|
@@ -80,6 +99,14 @@ export declare class View implements ObservableVectorOwner {
|
|
|
80
99
|
private _shakeOffsetY;
|
|
81
100
|
private _updateId;
|
|
82
101
|
constructor(centerX: number, centerY: number, width: number, height: number);
|
|
102
|
+
/**
|
|
103
|
+
* Create a {@link View} from a {@link ViewOptions} bag.
|
|
104
|
+
*
|
|
105
|
+
* All options are optional and default to the same values as a bare
|
|
106
|
+
* `new View(0, 0, 0, 0)` call with a full-canvas viewport and no rotation
|
|
107
|
+
* or zoom.
|
|
108
|
+
*/
|
|
109
|
+
static from(options?: ViewOptions): View;
|
|
83
110
|
/**
|
|
84
111
|
* Receives change notifications from the reactive `_center` vector and marks
|
|
85
112
|
* the view transform stale. (`_size` is an {@link ObservableSize}, which still
|
|
@@ -112,6 +139,17 @@ export declare class View implements ObservableVectorOwner {
|
|
|
112
139
|
*/
|
|
113
140
|
resize(width: number, height: number): this;
|
|
114
141
|
setRotation(degrees: number): this;
|
|
142
|
+
/**
|
|
143
|
+
* Set the normalized (0..1) viewport rectangle fluently.
|
|
144
|
+
* Mirrors the `set viewport` property setter without allocating a
|
|
145
|
+
* {@link Rectangle} — pass the four components directly.
|
|
146
|
+
*
|
|
147
|
+
* @param x - Left edge as a fraction of the canvas width.
|
|
148
|
+
* @param y - Top edge as a fraction of the canvas height.
|
|
149
|
+
* @param width - Width as a fraction of the canvas width.
|
|
150
|
+
* @param height - Height as a fraction of the canvas height.
|
|
151
|
+
*/
|
|
152
|
+
setViewport(x: number, y: number, width: number, height: number): this;
|
|
115
153
|
move(x: number, y: number): this;
|
|
116
154
|
zoom(factor: number): this;
|
|
117
155
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"View.d.ts","sourceRoot":"","sources":["../../../src/rendering/View.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACtF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C;;;GAGG;AACH,oBAAY,SAAS;IACnB,IAAI,IAAO;IACX,WAAW,IAAO;IAClB,QAAQ,IAAO;IACf,OAAO,IAAO;IACd,MAAM,IAAO;IACb,SAAS,KAAO;IAChB,gBAAgB,KAAO;IACvB,WAAW,KAAO;IAClB,aAAa,KAAO;IACpB,UAAU,MAAO;CAClB;AAED,2GAA2G;AAC3G,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC;AAE3E,uCAAuC;AACvC,MAAM,WAAW,iBAAiB;IAChC,4GAA4G;IAC5G,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,sCAAsC;AACtC,MAAM,WAAW,gBAAgB;IAC/B,+FAA+F;IAC/F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qGAAqG;IACrG,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;GASG;AACH,qBAAa,IAAK,YAAW,qBAAqB;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiB;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwC;IAClE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwB;IACnD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAwB;IAC1D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4C;IACnE,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,iBAAiB,CAA0B;IACnD,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,eAAe,CAAM;IAC7B,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,SAAS,CAAK;gBAEH,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAQlF;;;;;OAKG;IACI,mBAAmB,IAAI,IAAI;IAIlC,IAAW,MAAM,IAAI,gBAAgB,CAEpC;IAED,IAAW,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAEzC;IAED,IAAW,IAAI,IAAI,cAAc,CAEhC;IAED,IAAW,IAAI,CAAC,IAAI,EAAE,cAAc,EAEnC;IAED,IAAW,KAAK,IAAI,MAAM,CAEzB;IAED,IAAW,KAAK,CAAC,KAAK,EAAE,MAAM,EAE7B;IAED,IAAW,MAAM,IAAI,MAAM,CAE1B;IAED,IAAW,MAAM,CAAC,MAAM,EAAE,MAAM,EAE/B;IAED,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAED,IAAW,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAEnC;IAED,IAAW,QAAQ,IAAI,SAAS,CAE/B;IAED,IAAW,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAKtC;IAED;;;OAGG;IACH,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAED,IAAW,SAAS,IAAI,MAAM,CAE7B;IAEM,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAM5C;;;OAGG;IACI,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAS3C,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"View.d.ts","sourceRoot":"","sources":["../../../src/rendering/View.ts"],"names":[],"mappings":"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"}
|
|
@@ -69,6 +69,26 @@ class View {
|
|
|
69
69
|
this._zoomBaseHeight = height;
|
|
70
70
|
this._flags.push(ViewFlags.Transform, ViewFlags.TransformInverse, ViewFlags.BoundingBox);
|
|
71
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* Create a {@link View} from a {@link ViewOptions} bag.
|
|
74
|
+
*
|
|
75
|
+
* All options are optional and default to the same values as a bare
|
|
76
|
+
* `new View(0, 0, 0, 0)` call with a full-canvas viewport and no rotation
|
|
77
|
+
* or zoom.
|
|
78
|
+
*/
|
|
79
|
+
static from(options = {}) {
|
|
80
|
+
const view = new View(options.center?.x ?? 0, options.center?.y ?? 0, options.size?.width ?? 0, options.size?.height ?? 0);
|
|
81
|
+
if (options.viewport) {
|
|
82
|
+
view.viewport = options.viewport;
|
|
83
|
+
}
|
|
84
|
+
if (options.rotation && options.rotation !== 0) {
|
|
85
|
+
view.rotation = options.rotation;
|
|
86
|
+
}
|
|
87
|
+
if (options.zoom !== undefined && options.zoom !== 1) {
|
|
88
|
+
view.setZoom(options.zoom);
|
|
89
|
+
}
|
|
90
|
+
return view;
|
|
91
|
+
}
|
|
72
92
|
/**
|
|
73
93
|
* Receives change notifications from the reactive `_center` vector and marks
|
|
74
94
|
* the view transform stale. (`_size` is an {@link ObservableSize}, which still
|
|
@@ -150,6 +170,23 @@ class View {
|
|
|
150
170
|
}
|
|
151
171
|
return this;
|
|
152
172
|
}
|
|
173
|
+
/**
|
|
174
|
+
* Set the normalized (0..1) viewport rectangle fluently.
|
|
175
|
+
* Mirrors the `set viewport` property setter without allocating a
|
|
176
|
+
* {@link Rectangle} — pass the four components directly.
|
|
177
|
+
*
|
|
178
|
+
* @param x - Left edge as a fraction of the canvas width.
|
|
179
|
+
* @param y - Top edge as a fraction of the canvas height.
|
|
180
|
+
* @param width - Width as a fraction of the canvas width.
|
|
181
|
+
* @param height - Height as a fraction of the canvas height.
|
|
182
|
+
*/
|
|
183
|
+
setViewport(x, y, width, height) {
|
|
184
|
+
if (this._viewport.x !== x || this._viewport.y !== y || this._viewport.width !== width || this._viewport.height !== height) {
|
|
185
|
+
this._viewport.set(x, y, width, height);
|
|
186
|
+
this._setDirty();
|
|
187
|
+
}
|
|
188
|
+
return this;
|
|
189
|
+
}
|
|
153
190
|
move(x, y) {
|
|
154
191
|
this.setCenter(this._center.x + x, this._center.y + y);
|
|
155
192
|
return this;
|