@codexo/exojs 0.9.0 → 0.11.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 +127 -0
- package/README.md +14 -14
- package/dist/esm/core/Application.d.ts +25 -6
- package/dist/esm/core/Application.js +42 -8
- package/dist/esm/core/Application.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 +8 -8
- package/dist/esm/core/Scene.js +7 -7
- package/dist/esm/core/Scene.js.map +1 -1
- package/dist/esm/core/SceneManager.js +2 -2
- package/dist/esm/core/SceneManager.js.map +1 -1
- package/dist/esm/core/SceneNode.d.ts +0 -3
- package/dist/esm/core/SceneNode.js +0 -9
- package/dist/esm/core/SceneNode.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/dev.d.ts +21 -0
- package/dist/esm/core/dev.js +18 -0
- package/dist/esm/core/dev.js.map +1 -0
- 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/index.js +14 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/particles/ParticleSystem.d.ts +8 -5
- package/dist/esm/particles/ParticleSystem.js +9 -5
- 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/modules/AlphaFadeOverLifetime.d.ts +2 -2
- package/dist/esm/particles/modules/AlphaFadeOverLifetime.js +5 -1
- package/dist/esm/particles/modules/AlphaFadeOverLifetime.js.map +1 -1
- 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/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 +5 -24
- package/dist/esm/rendering/Container.js +8 -71
- 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 +18 -0
- package/dist/esm/rendering/RenderNode.d.ts +81 -8
- package/dist/esm/rendering/RenderNode.js +121 -144
- package/dist/esm/rendering/RenderNode.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/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 +82 -0
- package/dist/esm/rendering/TransformBuffer.js +180 -0
- package/dist/esm/rendering/TransformBuffer.js.map +1 -0
- 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 +67 -0
- package/dist/esm/rendering/gradient/Gradient.js +160 -0
- package/dist/esm/rendering/gradient/Gradient.js.map +1 -0
- package/dist/esm/rendering/gradient/LinearGradient.d.ts +18 -0
- package/dist/esm/rendering/gradient/LinearGradient.js +49 -0
- package/dist/esm/rendering/gradient/LinearGradient.js.map +1 -0
- package/dist/esm/rendering/gradient/RadialGradient.d.ts +18 -0
- package/dist/esm/rendering/gradient/RadialGradient.js +44 -0
- package/dist/esm/rendering/gradient/RadialGradient.js.map +1 -0
- package/dist/esm/rendering/index.d.ts +16 -2
- 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} +29 -62
- package/dist/esm/rendering/{mesh/MeshShader.js → material/ShaderSource.js} +35 -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 +122 -3
- 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 +86 -0
- package/dist/esm/rendering/plan/RenderCommand.js +127 -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/RenderInstruction.d.ts +51 -0
- package/dist/esm/rendering/plan/RenderInstruction.js +45 -0
- package/dist/esm/rendering/plan/RenderInstruction.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 +13 -0
- package/dist/esm/rendering/plan/RenderPlanPlayer.js +107 -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/primitives/Graphics.d.ts +70 -5
- package/dist/esm/rendering/primitives/Graphics.js +172 -14
- package/dist/esm/rendering/primitives/Graphics.js.map +1 -1
- package/dist/esm/rendering/sprite/Sprite.d.ts +22 -1
- package/dist/esm/rendering/sprite/Sprite.js +33 -2
- package/dist/esm/rendering/sprite/Sprite.js.map +1 -1
- package/dist/esm/rendering/sprite/spriteMaterialSources.d.ts +41 -0
- package/dist/esm/rendering/sprite/spriteMaterialSources.js +149 -0
- package/dist/esm/rendering/sprite/spriteMaterialSources.js.map +1 -0
- package/dist/esm/rendering/text/BitmapText.d.ts +2 -0
- package/dist/esm/rendering/text/BitmapText.js +8 -1
- package/dist/esm/rendering/text/BitmapText.js.map +1 -1
- package/dist/esm/rendering/text/BmFont.js +3 -0
- package/dist/esm/rendering/text/BmFont.js.map +1 -1
- package/dist/esm/rendering/text/GlyphSdf.d.ts +14 -0
- package/dist/esm/rendering/text/GlyphSdf.js +41 -11
- package/dist/esm/rendering/text/GlyphSdf.js.map +1 -1
- package/dist/esm/rendering/text/TextStyle.d.ts +6 -1
- package/dist/esm/rendering/text/TextStyle.js +1 -1
- package/dist/esm/rendering/text/TextStyle.js.map +1 -1
- 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/RenderTexture.js.map +1 -1
- package/dist/esm/rendering/video/Video.d.ts +3 -7
- package/dist/esm/rendering/video/Video.js +3 -8
- package/dist/esm/rendering/video/Video.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts +62 -0
- package/dist/esm/rendering/webgl2/WebGl2Backend.js +352 -21
- 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/WebGl2ParticleRenderer.d.ts +8 -0
- package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.js +8 -0
- package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.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 +14 -0
- package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js +257 -78
- 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 +7 -0
- package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js +11 -0
- package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js.map +1 -1
- 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/sprite.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 +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts +63 -0
- package/dist/esm/rendering/webgpu/WebGpuBackend.js +180 -19
- package/dist/esm/rendering/webgpu/WebGpuBackend.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 +24 -0
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js +524 -98
- package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.d.ts +7 -0
- package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js +24 -22
- 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 +25 -1
- package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js +430 -76
- 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 +7 -0
- package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js +30 -19
- package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.d.ts +48 -0
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js +103 -0
- package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js.map +1 -0
- 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.js +1 -1
- package/dist/esm/resources/Loader.js.map +1 -1
- 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/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/index.d.ts +1 -0
- package/dist/exo.esm.js +6326 -2350
- package/dist/exo.esm.js.map +1 -1
- package/package.json +34 -24
- package/dist/esm/particles/distributions/Gradient.js.map +0 -1
- package/dist/esm/rendering/mesh/MeshShader.js.map +0 -1
- package/dist/esm/vendor/webgl-debug.js +0 -1160
- package/dist/esm/vendor/webgl-debug.js.map +0 -1
|
@@ -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;;;;"}
|
|
@@ -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,82 @@
|
|
|
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
|
+
private _writeCount;
|
|
28
|
+
private _skippedWriteCount;
|
|
29
|
+
private _uploadCount;
|
|
30
|
+
private _uploadedRecordCount;
|
|
31
|
+
get count(): number;
|
|
32
|
+
/**
|
|
33
|
+
* Number of transform rows written into the buffer (via {@link write} /
|
|
34
|
+
* {@link push}) since the last {@link begin}. Internal stat for profiling and
|
|
35
|
+
* regression guards; does not affect packing.
|
|
36
|
+
* @internal
|
|
37
|
+
*/
|
|
38
|
+
get writeCount(): number;
|
|
39
|
+
/**
|
|
40
|
+
* Number of draw commands whose transform write was skipped since the last
|
|
41
|
+
* {@link begin} — recorded by the backend for renderers that opt out of the
|
|
42
|
+
* shared transform storage (`_consumesSharedTransform === false`).
|
|
43
|
+
* @internal
|
|
44
|
+
*/
|
|
45
|
+
get skippedWriteCount(): number;
|
|
46
|
+
/**
|
|
47
|
+
* Number of GPU uploads (texture / storage writes) issued for this buffer
|
|
48
|
+
* since the last {@link begin}. Recorded by the backend at its upload
|
|
49
|
+
* boundary; an unchanged frame uploads zero times.
|
|
50
|
+
* @internal
|
|
51
|
+
*/
|
|
52
|
+
get uploadCount(): number;
|
|
53
|
+
/**
|
|
54
|
+
* Total transform rows pushed to the GPU across all uploads since the last
|
|
55
|
+
* {@link begin}.
|
|
56
|
+
* @internal
|
|
57
|
+
*/
|
|
58
|
+
get uploadedRecordCount(): number;
|
|
59
|
+
get capacity(): number;
|
|
60
|
+
get data(): Float32Array;
|
|
61
|
+
get version(): number;
|
|
62
|
+
begin(expectedCount?: number): this;
|
|
63
|
+
push(transform: Matrix, tint: Color): number;
|
|
64
|
+
write(slot: number, transform: Matrix, tint: Color): this;
|
|
65
|
+
/**
|
|
66
|
+
* Record that a draw command's transform write was intentionally skipped
|
|
67
|
+
* because its renderer opts out of the shared transform storage. Counts
|
|
68
|
+
* toward {@link skippedWriteCount} only — buffer contents are untouched.
|
|
69
|
+
* @internal
|
|
70
|
+
*/
|
|
71
|
+
recordSkippedWrite(): this;
|
|
72
|
+
/**
|
|
73
|
+
* Record a GPU upload of `recordCount` transform rows. Called by the backend
|
|
74
|
+
* at its upload boundary after committing a snapshot; affects stats only.
|
|
75
|
+
* @internal
|
|
76
|
+
*/
|
|
77
|
+
recordUpload(recordCount: number): this;
|
|
78
|
+
commitSnapshot(minCount?: number): TransformBufferFrameSnapshot;
|
|
79
|
+
private _ensureCapacity;
|
|
80
|
+
private _hashFloat;
|
|
81
|
+
private _mix;
|
|
82
|
+
}
|
|
@@ -0,0 +1,180 @@
|
|
|
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
|
+
_writeCount = 0;
|
|
25
|
+
_skippedWriteCount = 0;
|
|
26
|
+
_uploadCount = 0;
|
|
27
|
+
_uploadedRecordCount = 0;
|
|
28
|
+
get count() {
|
|
29
|
+
return this._count;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Number of transform rows written into the buffer (via {@link write} /
|
|
33
|
+
* {@link push}) since the last {@link begin}. Internal stat for profiling and
|
|
34
|
+
* regression guards; does not affect packing.
|
|
35
|
+
* @internal
|
|
36
|
+
*/
|
|
37
|
+
get writeCount() {
|
|
38
|
+
return this._writeCount;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Number of draw commands whose transform write was skipped since the last
|
|
42
|
+
* {@link begin} — recorded by the backend for renderers that opt out of the
|
|
43
|
+
* shared transform storage (`_consumesSharedTransform === false`).
|
|
44
|
+
* @internal
|
|
45
|
+
*/
|
|
46
|
+
get skippedWriteCount() {
|
|
47
|
+
return this._skippedWriteCount;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Number of GPU uploads (texture / storage writes) issued for this buffer
|
|
51
|
+
* since the last {@link begin}. Recorded by the backend at its upload
|
|
52
|
+
* boundary; an unchanged frame uploads zero times.
|
|
53
|
+
* @internal
|
|
54
|
+
*/
|
|
55
|
+
get uploadCount() {
|
|
56
|
+
return this._uploadCount;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Total transform rows pushed to the GPU across all uploads since the last
|
|
60
|
+
* {@link begin}.
|
|
61
|
+
* @internal
|
|
62
|
+
*/
|
|
63
|
+
get uploadedRecordCount() {
|
|
64
|
+
return this._uploadedRecordCount;
|
|
65
|
+
}
|
|
66
|
+
get capacity() {
|
|
67
|
+
return this._data.length / floatsPerSlot;
|
|
68
|
+
}
|
|
69
|
+
get data() {
|
|
70
|
+
return this._data;
|
|
71
|
+
}
|
|
72
|
+
get version() {
|
|
73
|
+
return this._version;
|
|
74
|
+
}
|
|
75
|
+
begin(expectedCount = 0) {
|
|
76
|
+
if (expectedCount > 0) {
|
|
77
|
+
this._ensureCapacity(expectedCount);
|
|
78
|
+
}
|
|
79
|
+
this._count = 0;
|
|
80
|
+
this._frameHash = hashOffset >>> 0;
|
|
81
|
+
this._writeCount = 0;
|
|
82
|
+
this._skippedWriteCount = 0;
|
|
83
|
+
this._uploadCount = 0;
|
|
84
|
+
this._uploadedRecordCount = 0;
|
|
85
|
+
return this;
|
|
86
|
+
}
|
|
87
|
+
push(transform, tint) {
|
|
88
|
+
const slot = this._count;
|
|
89
|
+
this.write(slot, transform, tint);
|
|
90
|
+
return slot;
|
|
91
|
+
}
|
|
92
|
+
write(slot, transform, tint) {
|
|
93
|
+
if (!Number.isInteger(slot) || slot < 0) {
|
|
94
|
+
throw new Error(`TransformBuffer slot must be a non-negative integer (got ${slot}).`);
|
|
95
|
+
}
|
|
96
|
+
this._ensureCapacity(slot + 1);
|
|
97
|
+
const offset = slot * floatsPerSlot;
|
|
98
|
+
const data = this._data;
|
|
99
|
+
data[offset + 0] = transform.a;
|
|
100
|
+
data[offset + 1] = transform.b;
|
|
101
|
+
data[offset + 2] = transform.c;
|
|
102
|
+
data[offset + 3] = transform.d;
|
|
103
|
+
data[offset + 4] = transform.x;
|
|
104
|
+
data[offset + 5] = transform.y;
|
|
105
|
+
data[offset + 6] = 0;
|
|
106
|
+
data[offset + 7] = 0;
|
|
107
|
+
data[offset + 8] = tint.r / 255;
|
|
108
|
+
data[offset + 9] = tint.g / 255;
|
|
109
|
+
data[offset + 10] = tint.b / 255;
|
|
110
|
+
data[offset + 11] = tint.a;
|
|
111
|
+
if (slot >= this._count) {
|
|
112
|
+
this._count = slot + 1;
|
|
113
|
+
}
|
|
114
|
+
this._frameHash = this._mix(this._frameHash, slot);
|
|
115
|
+
for (let i = 0; i < floatsPerSlot; i++) {
|
|
116
|
+
this._frameHash = this._mix(this._frameHash, this._hashFloat(data[offset + i]));
|
|
117
|
+
}
|
|
118
|
+
this._writeCount++;
|
|
119
|
+
return this;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Record that a draw command's transform write was intentionally skipped
|
|
123
|
+
* because its renderer opts out of the shared transform storage. Counts
|
|
124
|
+
* toward {@link skippedWriteCount} only — buffer contents are untouched.
|
|
125
|
+
* @internal
|
|
126
|
+
*/
|
|
127
|
+
recordSkippedWrite() {
|
|
128
|
+
this._skippedWriteCount++;
|
|
129
|
+
return this;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Record a GPU upload of `recordCount` transform rows. Called by the backend
|
|
133
|
+
* at its upload boundary after committing a snapshot; affects stats only.
|
|
134
|
+
* @internal
|
|
135
|
+
*/
|
|
136
|
+
recordUpload(recordCount) {
|
|
137
|
+
this._uploadCount++;
|
|
138
|
+
this._uploadedRecordCount += recordCount;
|
|
139
|
+
return this;
|
|
140
|
+
}
|
|
141
|
+
commitSnapshot(minCount = 0) {
|
|
142
|
+
const count = Math.max(this._count, minCount);
|
|
143
|
+
const hash = this._mix(this._frameHash, count);
|
|
144
|
+
const changed = hash !== this._lastCommittedHash || count !== this._lastCommittedCount;
|
|
145
|
+
if (changed) {
|
|
146
|
+
this._version++;
|
|
147
|
+
this._lastCommittedHash = hash;
|
|
148
|
+
this._lastCommittedCount = count;
|
|
149
|
+
}
|
|
150
|
+
return {
|
|
151
|
+
count,
|
|
152
|
+
hash,
|
|
153
|
+
changed,
|
|
154
|
+
version: this._version,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
_ensureCapacity(requiredSlots) {
|
|
158
|
+
const current = this.capacity;
|
|
159
|
+
if (requiredSlots <= current) {
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
let next = Math.max(current, initialCapacity);
|
|
163
|
+
while (next < requiredSlots) {
|
|
164
|
+
next *= 2;
|
|
165
|
+
}
|
|
166
|
+
const nextData = new Float32Array(next * floatsPerSlot);
|
|
167
|
+
nextData.set(this._data);
|
|
168
|
+
this._data = nextData;
|
|
169
|
+
}
|
|
170
|
+
_hashFloat(value) {
|
|
171
|
+
hashFloatScratch[0] = value;
|
|
172
|
+
return hashUintScratch[0] >>> 0;
|
|
173
|
+
}
|
|
174
|
+
_mix(hash, value) {
|
|
175
|
+
return Math.imul((hash ^ value) >>> 0, hashPrime) >>> 0;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
export { TransformBuffer };
|
|
180
|
+
//# sourceMappingURL=TransformBuffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransformBuffer.js","sources":["../../../../src/rendering/TransformBuffer.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -144,24 +144,17 @@ class WebGpuShaderFilter extends Filter {
|
|
|
144
144
|
// ---- Build user bind group (group 1) ----
|
|
145
145
|
const userBindGroup = this._buildUserBindGroup(gpu, conn);
|
|
146
146
|
// ---- Encode render pass ----
|
|
147
|
-
//
|
|
148
|
-
//
|
|
149
|
-
//
|
|
150
|
-
const
|
|
151
|
-
const encoder = device2.createCommandEncoder({ label: 'WebGpuShaderFilter' });
|
|
152
|
-
const pass = encoder.beginRenderPass({
|
|
153
|
-
colorAttachments: [gpu.createColorAttachment()],
|
|
154
|
-
label: 'WebGpuShaderFilter pass',
|
|
155
|
-
});
|
|
156
|
-
gpu.stats.renderPasses++;
|
|
147
|
+
// The coordinator owns the GPU pass (it runs inside the surrounding
|
|
148
|
+
// RenderTargetPass child pass, so load/clear is already resolved to
|
|
149
|
+
// a clear of the output target) and ends + submits it below.
|
|
150
|
+
const pass = gpu._passCoordinator.acquirePass().pass;
|
|
157
151
|
pass.setPipeline(conn.pipeline);
|
|
158
152
|
pass.setVertexBuffer(0, conn.vertexBuffer);
|
|
159
153
|
pass.setBindGroup(0, autoBindGroup);
|
|
160
154
|
pass.setBindGroup(1, userBindGroup);
|
|
161
155
|
pass.draw(4);
|
|
162
156
|
gpu.stats.drawCalls++;
|
|
163
|
-
|
|
164
|
-
gpu.submit(encoder.finish());
|
|
157
|
+
gpu._passCoordinator.endPass();
|
|
165
158
|
}, {
|
|
166
159
|
target: output,
|
|
167
160
|
view: output.view,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebGpuShaderFilter.js","sources":["../../../../../src/rendering/filters/WebGpuShaderFilter.ts"],"sourcesContent":[null],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"WebGpuShaderFilter.js","sources":["../../../../../src/rendering/filters/WebGpuShaderFilter.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Rectangle } from '@/math/Rectangle';
|
|
2
|
+
import type { GeometryAttribute, GeometryOptions, GeometryUsage, Topology } from './GeometryAttribute';
|
|
3
|
+
/**
|
|
4
|
+
* Non-renderable geometry data object used by advanced rendering paths.
|
|
5
|
+
*
|
|
6
|
+
* Geometry owns only vertex/index data and its layout metadata; it is not a
|
|
7
|
+
* scene node, has no transform state, and cannot render itself.
|
|
8
|
+
* @advanced
|
|
9
|
+
*/
|
|
10
|
+
export declare class Geometry {
|
|
11
|
+
readonly attributes: readonly GeometryAttribute[];
|
|
12
|
+
readonly stride: number;
|
|
13
|
+
readonly topology: Topology;
|
|
14
|
+
readonly usage: GeometryUsage;
|
|
15
|
+
readonly indices: Uint16Array | Uint32Array | null;
|
|
16
|
+
vertexData: Float32Array | ArrayBuffer;
|
|
17
|
+
private _version;
|
|
18
|
+
private _localBounds;
|
|
19
|
+
private _localBoundsDirty;
|
|
20
|
+
private readonly _positionAttribute;
|
|
21
|
+
private readonly _disposeCallbacks;
|
|
22
|
+
constructor(options: GeometryOptions);
|
|
23
|
+
get vertexCount(): number;
|
|
24
|
+
get indexCount(): number;
|
|
25
|
+
get version(): number;
|
|
26
|
+
get id(): number;
|
|
27
|
+
/** Mark vertex data as mutated in place so backends can re-upload GPU buffers. */
|
|
28
|
+
invalidate(): this;
|
|
29
|
+
/** Return local-space bounds; when `out` is provided it is populated and returned. */
|
|
30
|
+
getLocalBounds(out?: Rectangle): Rectangle;
|
|
31
|
+
/** Force local-space AABB recomputation from the current position attribute data. */
|
|
32
|
+
recomputeLocalBounds(): this;
|
|
33
|
+
/** Release backend-owned resources associated with this geometry instance. */
|
|
34
|
+
destroy(): void;
|
|
35
|
+
/**
|
|
36
|
+
* Internal backend hook used to register per-geometry cleanup callbacks.
|
|
37
|
+
* @internal
|
|
38
|
+
*/
|
|
39
|
+
_onDispose(callback: () => void): void;
|
|
40
|
+
}
|