@aura3d/rendering 4.0.3 → 4.0.4
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/dist/EnvironmentPlatform.d.ts.map +1 -1
- package/dist/EnvironmentPlatform.js +6 -2
- package/dist/EnvironmentPlatform.js.map +1 -1
- package/dist/ForwardPass.d.ts +2 -0
- package/dist/ForwardPass.d.ts.map +1 -1
- package/dist/ForwardPass.js +70 -5
- package/dist/ForwardPass.js.map +1 -1
- package/dist/Geometry.d.ts +40 -0
- package/dist/Geometry.d.ts.map +1 -1
- package/dist/Geometry.js +39 -2
- package/dist/Geometry.js.map +1 -1
- package/dist/IndexBuffer.d.ts +16 -1
- package/dist/IndexBuffer.d.ts.map +1 -1
- package/dist/IndexBuffer.js +46 -1
- package/dist/IndexBuffer.js.map +1 -1
- package/dist/InstancedPBRMaterial.d.ts +2 -0
- package/dist/InstancedPBRMaterial.d.ts.map +1 -1
- package/dist/InstancedPBRMaterial.js +1 -0
- package/dist/InstancedPBRMaterial.js.map +1 -1
- package/dist/Material.d.ts +9 -0
- package/dist/Material.d.ts.map +1 -1
- package/dist/Material.js +3 -0
- package/dist/Material.js.map +1 -1
- package/dist/PBRMaterial.d.ts +2 -0
- package/dist/PBRMaterial.d.ts.map +1 -1
- package/dist/PBRMaterial.js +1 -0
- package/dist/PBRMaterial.js.map +1 -1
- package/dist/PortableShaderMaterial.d.ts +13 -3
- package/dist/PortableShaderMaterial.d.ts.map +1 -1
- package/dist/PortableShaderMaterial.js +24 -12
- package/dist/PortableShaderMaterial.js.map +1 -1
- package/dist/RenderDevice.d.ts +98 -0
- package/dist/RenderDevice.d.ts.map +1 -1
- package/dist/RenderDevice.js +129 -0
- package/dist/RenderDevice.js.map +1 -1
- package/dist/Renderer.d.ts +94 -0
- package/dist/Renderer.d.ts.map +1 -1
- package/dist/Renderer.js +321 -26
- package/dist/Renderer.js.map +1 -1
- package/dist/Sampler.d.ts +35 -0
- package/dist/Sampler.d.ts.map +1 -1
- package/dist/Sampler.js +96 -0
- package/dist/Sampler.js.map +1 -1
- package/dist/ShaderLibraryCore.d.ts +14 -0
- package/dist/ShaderLibraryCore.d.ts.map +1 -1
- package/dist/ShaderLibraryCore.js +94 -4
- package/dist/ShaderLibraryCore.js.map +1 -1
- package/dist/Texture.d.ts +53 -1
- package/dist/Texture.d.ts.map +1 -1
- package/dist/Texture.js +53 -2
- package/dist/Texture.js.map +1 -1
- package/dist/UnlitMaterial.d.ts +46 -0
- package/dist/UnlitMaterial.d.ts.map +1 -1
- package/dist/UnlitMaterial.js +32 -3
- package/dist/UnlitMaterial.js.map +1 -1
- package/dist/VertexFormat.d.ts +19 -1
- package/dist/VertexFormat.d.ts.map +1 -1
- package/dist/VertexFormat.js +40 -1
- package/dist/VertexFormat.js.map +1 -1
- package/dist/WebGL2Device.d.ts +16 -0
- package/dist/WebGL2Device.d.ts.map +1 -1
- package/dist/WebGL2Device.js +31 -6
- package/dist/WebGL2Device.js.map +1 -1
- package/dist/WebGPUDevice.d.ts +92 -1
- package/dist/WebGPUDevice.d.ts.map +1 -1
- package/dist/WebGPUDevice.js +417 -44
- package/dist/WebGPUDevice.js.map +1 -1
- package/dist/batching/BatchedGeometryPool.d.ts +22 -1
- package/dist/batching/BatchedGeometryPool.d.ts.map +1 -1
- package/dist/batching/BatchedGeometryPool.js +50 -2
- package/dist/batching/BatchedGeometryPool.js.map +1 -1
- package/dist/batching/DrawDataTexture.d.ts +21 -1
- package/dist/batching/DrawDataTexture.d.ts.map +1 -1
- package/dist/batching/DrawDataTexture.js +30 -4
- package/dist/batching/DrawDataTexture.js.map +1 -1
- package/dist/batching/MultiDrawBatch.d.ts +26 -0
- package/dist/batching/MultiDrawBatch.d.ts.map +1 -1
- package/dist/batching/MultiDrawBatch.js +64 -2
- package/dist/batching/MultiDrawBatch.js.map +1 -1
- package/dist/batching/index.d.ts +2 -2
- package/dist/batching/index.d.ts.map +1 -1
- package/dist/batching/index.js +2 -2
- package/dist/batching/index.js.map +1 -1
- package/dist/compute/ComputeContext.d.ts +84 -0
- package/dist/compute/ComputeContext.d.ts.map +1 -0
- package/dist/compute/ComputeContext.js +371 -0
- package/dist/compute/ComputeContext.js.map +1 -0
- package/dist/compute/index.d.ts +4 -0
- package/dist/compute/index.d.ts.map +1 -0
- package/dist/compute/index.js +3 -0
- package/dist/compute/index.js.map +1 -0
- package/dist/compute/types.d.ts +108 -0
- package/dist/compute/types.d.ts.map +1 -0
- package/dist/compute/types.js +25 -0
- package/dist/compute/types.js.map +1 -0
- package/dist/contracts/core.d.ts +1 -1
- package/dist/contracts/core.d.ts.map +1 -1
- package/dist/contracts/core.js.map +1 -1
- package/dist/contracts/flags.state.d.ts.map +1 -1
- package/dist/contracts/flags.state.js +20 -1
- package/dist/contracts/flags.state.js.map +1 -1
- package/dist/contracts/output.d.ts +1 -1
- package/dist/contracts/output.d.ts.map +1 -1
- package/dist/contracts/output.js.map +1 -1
- package/dist/contracts/post.d.ts +7 -0
- package/dist/contracts/post.d.ts.map +1 -1
- package/dist/contracts/post.js.map +1 -1
- package/dist/contracts/renderItem.d.ts +15 -0
- package/dist/contracts/renderItem.d.ts.map +1 -1
- package/dist/contracts/renderSource.d.ts +3 -1
- package/dist/contracts/renderSource.d.ts.map +1 -1
- package/dist/contracts/sampling.d.ts +23 -0
- package/dist/contracts/sampling.d.ts.map +1 -1
- package/dist/contracts/sampling.js.map +1 -1
- package/dist/environment/EnvironmentCache.d.ts.map +1 -1
- package/dist/environment/EnvironmentCache.js +7 -3
- package/dist/environment/EnvironmentCache.js.map +1 -1
- package/dist/environment/RoomEnvironmentScene.d.ts +2 -2
- package/dist/environment/RoomEnvironmentScene.d.ts.map +1 -1
- package/dist/environment/RoomEnvironmentScene.js.map +1 -1
- package/dist/geometry/Circle.d.ts +14 -0
- package/dist/geometry/Circle.d.ts.map +1 -0
- package/dist/geometry/Circle.js +31 -0
- package/dist/geometry/Circle.js.map +1 -0
- package/dist/geometry/Cone.d.ts +37 -0
- package/dist/geometry/Cone.d.ts.map +1 -0
- package/dist/geometry/Cone.js +129 -0
- package/dist/geometry/Cone.js.map +1 -0
- package/dist/geometry/Convex.d.ts +19 -0
- package/dist/geometry/Convex.d.ts.map +1 -0
- package/dist/geometry/Convex.js +27 -0
- package/dist/geometry/Convex.js.map +1 -0
- package/dist/geometry/Edges.d.ts +15 -0
- package/dist/geometry/Edges.d.ts.map +1 -0
- package/dist/geometry/Edges.js +98 -0
- package/dist/geometry/Edges.js.map +1 -0
- package/dist/geometry/Extrude.d.ts +29 -0
- package/dist/geometry/Extrude.d.ts.map +1 -0
- package/dist/geometry/Extrude.js +403 -0
- package/dist/geometry/Extrude.js.map +1 -0
- package/dist/geometry/Lathe.d.ts +20 -0
- package/dist/geometry/Lathe.d.ts.map +1 -0
- package/dist/geometry/Lathe.js +94 -0
- package/dist/geometry/Lathe.js.map +1 -0
- package/dist/geometry/Polyhedron.d.ts +21 -0
- package/dist/geometry/Polyhedron.d.ts.map +1 -0
- package/dist/geometry/Polyhedron.js +201 -0
- package/dist/geometry/Polyhedron.js.map +1 -0
- package/dist/geometry/Primitives.d.ts +38 -2
- package/dist/geometry/Primitives.d.ts.map +1 -1
- package/dist/geometry/Primitives.js +114 -0
- package/dist/geometry/Primitives.js.map +1 -1
- package/dist/geometry/Ring.d.ts +16 -0
- package/dist/geometry/Ring.d.ts.map +1 -0
- package/dist/geometry/Ring.js +44 -0
- package/dist/geometry/Ring.js.map +1 -0
- package/dist/geometry/RoundedBox.d.ts +22 -0
- package/dist/geometry/RoundedBox.d.ts.map +1 -0
- package/dist/geometry/RoundedBox.js +191 -0
- package/dist/geometry/RoundedBox.js.map +1 -0
- package/dist/geometry/Shape.d.ts +15 -0
- package/dist/geometry/Shape.d.ts.map +1 -0
- package/dist/geometry/Shape.js +44 -0
- package/dist/geometry/Shape.js.map +1 -0
- package/dist/geometry/Support.d.ts +137 -0
- package/dist/geometry/Support.d.ts.map +1 -0
- package/dist/geometry/Support.js +1066 -0
- package/dist/geometry/Support.js.map +1 -0
- package/dist/geometry/TorusKnot.d.ts +18 -0
- package/dist/geometry/TorusKnot.d.ts.map +1 -0
- package/dist/geometry/TorusKnot.js +83 -0
- package/dist/geometry/TorusKnot.js.map +1 -0
- package/dist/geometry/Tube.d.ts +19 -0
- package/dist/geometry/Tube.d.ts.map +1 -0
- package/dist/geometry/Tube.js +70 -0
- package/dist/geometry/Tube.js.map +1 -0
- package/dist/geometry/Wireframe.d.ts +19 -0
- package/dist/geometry/Wireframe.d.ts.map +1 -0
- package/dist/geometry/Wireframe.js +63 -0
- package/dist/geometry/Wireframe.js.map +1 -0
- package/dist/index.d.ts +38 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -3
- package/dist/index.js.map +1 -1
- package/dist/lanes/prd11.js +1 -1
- package/dist/lanes/prd11.js.map +1 -1
- package/dist/output/ToneMappingOperators.glsl.d.ts +1 -1
- package/dist/output/ToneMappingOperators.glsl.d.ts.map +1 -1
- package/dist/output/ToneMappingOperators.glsl.js +9 -1
- package/dist/output/ToneMappingOperators.glsl.js.map +1 -1
- package/dist/post/v2Entry.d.ts +1 -0
- package/dist/post/v2Entry.d.ts.map +1 -1
- package/dist/post/v2Entry.js.map +1 -1
- package/dist/post/v2Stages.d.ts +30 -1
- package/dist/post/v2Stages.d.ts.map +1 -1
- package/dist/post/v2Stages.js +87 -21
- package/dist/post/v2Stages.js.map +1 -1
- package/dist/program/ProgramCache.d.ts.map +1 -1
- package/dist/program/ProgramCache.js +12 -0
- package/dist/program/ProgramCache.js.map +1 -1
- package/dist/program/ProgramGenerator.d.ts.map +1 -1
- package/dist/program/ProgramGenerator.js +3 -0
- package/dist/program/ProgramGenerator.js.map +1 -1
- package/dist/reference/PostProcessPass.d.ts +1 -1
- package/dist/reference/PostProcessPass.d.ts.map +1 -1
- package/dist/reference/PostProcessPass.js +8 -1
- package/dist/reference/PostProcessPass.js.map +1 -1
- package/dist/renderer/CullingBatching.d.ts +44 -2
- package/dist/renderer/CullingBatching.d.ts.map +1 -1
- package/dist/renderer/CullingBatching.js +66 -11
- package/dist/renderer/CullingBatching.js.map +1 -1
- package/dist/shaders/chunks/lighting_mirrors.d.ts +2 -2
- package/dist/shaders/chunks/lighting_mirrors.d.ts.map +1 -1
- package/dist/shaders/chunks/lighting_mirrors.js.map +1 -1
- package/dist/shadows/DirectionalCascadeFitter.d.ts +8 -8
- package/dist/shadows/DirectionalCascadeFitter.d.ts.map +1 -1
- package/dist/shadows/DirectionalCascadeFitter.js.map +1 -1
- package/dist/shadows/ShadowAtlas.d.ts +5 -5
- package/dist/shadows/ShadowAtlas.d.ts.map +1 -1
- package/dist/shadows/ShadowAtlas.js.map +1 -1
- package/dist/vfx/ProceduralVolumeEmitter.d.ts +11 -0
- package/dist/vfx/ProceduralVolumeEmitter.d.ts.map +1 -1
- package/dist/vfx/ProceduralVolumeEmitter.js +20 -6
- package/dist/vfx/ProceduralVolumeEmitter.js.map +1 -1
- package/dist/webgl2/ContextLifecycle.d.ts +36 -0
- package/dist/webgl2/ContextLifecycle.d.ts.map +1 -1
- package/dist/webgl2/ContextLifecycle.js +110 -2
- package/dist/webgl2/ContextLifecycle.js.map +1 -1
- package/dist/webgl2/LegacyPost.d.ts +16 -1
- package/dist/webgl2/LegacyPost.d.ts.map +1 -1
- package/dist/webgl2/LegacyPost.js +49 -16
- package/dist/webgl2/LegacyPost.js.map +1 -1
- package/dist/webgl2/MultiDraw.d.ts.map +1 -1
- package/dist/webgl2/MultiDraw.js +42 -2
- package/dist/webgl2/MultiDraw.js.map +1 -1
- package/dist/webgl2/TextureUpload.d.ts +7 -0
- package/dist/webgl2/TextureUpload.d.ts.map +1 -1
- package/dist/webgl2/TextureUpload.js +54 -10
- package/dist/webgl2/TextureUpload.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BatchedGeometryPool.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/batching/BatchedGeometryPool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"BatchedGeometryPool.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/batching/BatchedGeometryPool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAElE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,wEAAwE;IACxE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,8FAA8F;IAC9F,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,2EAA2E;IAC3E,QAAQ,CAAC,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAC;CACzC;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,OAAO,CAA4C;IAC3D,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,KAAK,CAAS;IACtB,wDAAwD;IACxD,OAAO,CAAC,WAAW,CAAS;IAC5B,4EAA4E;IAC5E,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,iBAAiB,CAAS;IAElC;;;;OAIG;IACH,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,mBAAmB;IAyC7C,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,mBAAmB,GAAG,SAAS;IAO7D,qEAAqE;IACrE,UAAU,IAAI,SAAS,QAAQ,EAAE;IAIjC;;;;;;OAMG;IACH,UAAU,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,QAAQ;IAatC,OAAO,CAAC,YAAY,CAAyB;IAC7C,OAAO,CAAC,kBAAkB,CAAsB;IAEhD,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,WAAW;IAYnB,qEAAqE;IACrE,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG;QAAE,YAAY,EAAE,YAAY,CAAC;QAAC,WAAW,EAAE,YAAY,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;KAAE;IAmB9H;;;;OAIG;IACH,kBAAkB,CAAC,QAAQ,EAAE;QAAE,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;SAAE,GAAG,CAAC,CAAA;KAAE,GAAG,IAAI;IAanJ,IAAI,YAAY,IAAI,YAAY,GAAG,IAAI,CAEtC;IAED,KAAK,IAAI;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE;IAI5E,OAAO,IAAI,IAAI;CAehB"}
|
|
@@ -9,6 +9,9 @@
|
|
|
9
9
|
* The pool is a pure CPU structure until `upload(device)` materializes the
|
|
10
10
|
* arenas once per build — buffers are never re-uploaded per frame.
|
|
11
11
|
*/
|
|
12
|
+
import { Geometry } from "../Geometry.js";
|
|
13
|
+
import { IndexBuffer } from "../IndexBuffer.js";
|
|
14
|
+
import { VertexBuffer } from "../VertexBuffer.js";
|
|
12
15
|
export class BatchedGeometryPool {
|
|
13
16
|
vertexFloats = [];
|
|
14
17
|
indexData = [];
|
|
@@ -53,14 +56,14 @@ export class BatchedGeometryPool {
|
|
|
53
56
|
this.indexData.push(data[i] + baseVertex);
|
|
54
57
|
}
|
|
55
58
|
entry = {
|
|
56
|
-
geometry, firstIndex, indexCount: data.length,
|
|
59
|
+
geometry, geometryId: this.entries.size, firstIndex, indexCount: data.length,
|
|
57
60
|
baseVertex, vertexCount: geometry.vertexBuffer.vertexCount,
|
|
58
61
|
indexType: "uint16" // final type resolved at upload (needsUint32 upgrades all)
|
|
59
62
|
};
|
|
60
63
|
}
|
|
61
64
|
else {
|
|
62
65
|
entry = {
|
|
63
|
-
geometry, firstIndex: -1, indexCount: 0,
|
|
66
|
+
geometry, geometryId: this.entries.size, firstIndex: -1, indexCount: 0,
|
|
64
67
|
baseVertex, vertexCount: geometry.vertexBuffer.vertexCount,
|
|
65
68
|
indexType: "uint16"
|
|
66
69
|
};
|
|
@@ -68,6 +71,7 @@ export class BatchedGeometryPool {
|
|
|
68
71
|
this.entries.set(geometry, entry);
|
|
69
72
|
this.totalVertices += geometry.vertexBuffer.vertexCount;
|
|
70
73
|
this.dirty = true;
|
|
74
|
+
this.materialized = null; // arena contents changed — rematerialize on next asGeometry
|
|
71
75
|
return entry;
|
|
72
76
|
}
|
|
73
77
|
entryFor(geometry) {
|
|
@@ -76,6 +80,48 @@ export class BatchedGeometryPool {
|
|
|
76
80
|
? { ...entry, indexType: this.needsUint32 ? "uint32" : entry.indexType }
|
|
77
81
|
: undefined;
|
|
78
82
|
}
|
|
83
|
+
/** Packed members in insertion order (geometryId === list index). */
|
|
84
|
+
geometries() {
|
|
85
|
+
return [...this.entries.keys()];
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Materialize the shared arenas as a single `Geometry` — the shape a
|
|
89
|
+
* `RenderItem.geometry` needs. Member draws select their slice with
|
|
90
|
+
* `drawRange` (`firstIndex`/`indexCount` in the shared index arena, or
|
|
91
|
+
* `baseVertex`/`vertexCount` for unindexed members). Cached until the next
|
|
92
|
+
* `pack`; bounds default to the union of member bounds.
|
|
93
|
+
*/
|
|
94
|
+
asGeometry(bounds) {
|
|
95
|
+
if (this.materialized && this.materializedBounds === bounds)
|
|
96
|
+
return this.materialized;
|
|
97
|
+
if (!this.format || this.totalVertices === 0) {
|
|
98
|
+
throw new Error("BatchedGeometryPool.asGeometry: pool has no packed geometry");
|
|
99
|
+
}
|
|
100
|
+
const vertices = new VertexBuffer(this.format, this.totalVertices);
|
|
101
|
+
vertices.floats.set(this.vertexFloats);
|
|
102
|
+
const indexBuffer = this.indexData.length > 0 ? new IndexBuffer(this.indexData) : null;
|
|
103
|
+
this.materialized = new Geometry(vertices, indexBuffer, this.topologyOf() ?? "triangles", bounds ?? this.unionBounds());
|
|
104
|
+
this.materializedBounds = bounds;
|
|
105
|
+
return this.materialized;
|
|
106
|
+
}
|
|
107
|
+
materialized = null;
|
|
108
|
+
materializedBounds;
|
|
109
|
+
topologyOf() {
|
|
110
|
+
for (const geometry of this.entries.keys())
|
|
111
|
+
return geometry.topology;
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
unionBounds() {
|
|
115
|
+
const min = [Infinity, Infinity, Infinity];
|
|
116
|
+
const max = [-Infinity, -Infinity, -Infinity];
|
|
117
|
+
for (const geometry of this.entries.keys()) {
|
|
118
|
+
for (let axis = 0; axis < 3; axis += 1) {
|
|
119
|
+
min[axis] = Math.min(min[axis], geometry.bounds.min[axis]);
|
|
120
|
+
max[axis] = Math.max(max[axis], geometry.bounds.max[axis]);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return { min, max };
|
|
124
|
+
}
|
|
79
125
|
/** One upload per build; subsequent calls return the live arenas. */
|
|
80
126
|
upload(device) {
|
|
81
127
|
this.lastDevice = device;
|
|
@@ -133,6 +179,8 @@ export class BatchedGeometryPool {
|
|
|
133
179
|
this.needsUint32 = false;
|
|
134
180
|
this.format = null;
|
|
135
181
|
this.dirty = false;
|
|
182
|
+
this.materialized?.dispose();
|
|
183
|
+
this.materialized = null;
|
|
136
184
|
}
|
|
137
185
|
}
|
|
138
186
|
//# sourceMappingURL=BatchedGeometryPool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BatchedGeometryPool.js","sourceRoot":"","sources":["../../../../../packages/rendering/src/batching/BatchedGeometryPool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"BatchedGeometryPool.js","sourceRoot":"","sources":["../../../../../packages/rendering/src/batching/BatchedGeometryPool.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,22 @@
|
|
|
13
13
|
import { Texture, type TextureDescriptor } from "../Texture.js";
|
|
14
14
|
import type { UniformValue } from "../RenderDevice.js";
|
|
15
15
|
export declare const DRAW_DATA_TEXELS_PER_DRAW = 6;
|
|
16
|
+
/**
|
|
17
|
+
* Meta texel `.w` bit layout (parity-L5 / SG-02): bit 0 = visible, bits 1+
|
|
18
|
+
* = packed `PackedGeometryEntry.geometryId`. Shaders read
|
|
19
|
+
* `(floatBitsToUint(meta.w) & 1u) != 0u` for visibility and `meta.w >> 1`
|
|
20
|
+
* for the geometry id; `baseVertex`/`firstIndex`/`indexCount` stay in
|
|
21
|
+
* `meta.xyz` as floats.
|
|
22
|
+
*/
|
|
23
|
+
export declare const DRAW_DATA_VISIBLE_BIT = 1;
|
|
24
|
+
export declare const DRAW_DATA_GEOMETRY_ID_SHIFT = 1;
|
|
25
|
+
/** Pack `meta.w` for a draw row: bit 0 visible, upper bits the pooled geometry id. */
|
|
26
|
+
export declare function packDrawDataFlags(visible: boolean, geometryId?: number): number;
|
|
27
|
+
/** Inverse of {@link packDrawDataFlags} (tests + shader-side verification). */
|
|
28
|
+
export declare function unpackDrawDataFlags(flags: number): {
|
|
29
|
+
readonly visible: boolean;
|
|
30
|
+
readonly geometryId: number;
|
|
31
|
+
};
|
|
16
32
|
export interface DrawDataEntry {
|
|
17
33
|
/** Column-major mat4. */
|
|
18
34
|
readonly model: ArrayLike<number>;
|
|
@@ -31,7 +47,11 @@ export declare class DrawDataTexture {
|
|
|
31
47
|
/** Uniform snapshot for tests and the `u_drawId` loop path. */
|
|
32
48
|
drawTexels(drawIndex: number): Float32Array;
|
|
33
49
|
descriptor(): TextureDescriptor;
|
|
34
|
-
/**
|
|
50
|
+
/**
|
|
51
|
+
* Materializes once, then `update()`s in place on dirty rows — the returned
|
|
52
|
+
* `Texture` object is STABLE across row rewrites (markers/uniforms hold it
|
|
53
|
+
* by identity; the device re-uploads on `revision`).
|
|
54
|
+
*/
|
|
35
55
|
upload(): Texture;
|
|
36
56
|
/**
|
|
37
57
|
* PRD 11 Phase 5 (§6.9): register with the C-29 `ResourceRegistry` once.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DrawDataTexture.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/batching/DrawDataTexture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C,MAAM,WAAW,aAAa;IAC5B,yBAAyB;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACvC,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;CACnC;AAED,qBAAa,eAAe;IAMd,QAAQ,CAAC,QAAQ,EAAE,MAAM;IALrC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAe;IACpC,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,iBAAiB,CAAS;gBAEb,QAAQ,EAAE,MAAM;IAOrC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI;IAmBtD,+DAA+D;IAC/D,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY;IAK3C,UAAU,IAAI,iBAAiB;
|
|
1
|
+
{"version":3,"file":"DrawDataTexture.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/batching/DrawDataTexture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,IAAI,CAAC;AACvC,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAE7C,sFAAsF;AACtF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,SAAI,GAAG,MAAM,CAE1E;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAG7G;AAED,MAAM,WAAW,aAAa;IAC5B,yBAAyB;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACvC,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;CACnC;AAED,qBAAa,eAAe;IAMd,QAAQ,CAAC,QAAQ,EAAE,MAAM;IALrC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAe;IACpC,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,iBAAiB,CAAS;gBAEb,QAAQ,EAAE,MAAM;IAOrC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI;IAmBtD,+DAA+D;IAC/D,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY;IAK3C,UAAU,IAAI,iBAAiB;IAY/B;;;;OAIG;IACH,MAAM,IAAI,OAAO;IAWjB;;;;OAIG;IACH,kBAAkB,CAAC,QAAQ,EAAE;QAAE,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;SAAE,GAAG,CAAC,CAAA;KAAE,GAAG,IAAI;IAanJ,0EAA0E;IAC1E,SAAS,IAAI,YAAY;IAIzB,OAAO,IAAI,IAAI;CAIhB"}
|
|
@@ -13,6 +13,24 @@
|
|
|
13
13
|
import { Texture } from "../Texture.js";
|
|
14
14
|
import { TextureBinding } from "../TextureBinding.js";
|
|
15
15
|
export const DRAW_DATA_TEXELS_PER_DRAW = 6;
|
|
16
|
+
/**
|
|
17
|
+
* Meta texel `.w` bit layout (parity-L5 / SG-02): bit 0 = visible, bits 1+
|
|
18
|
+
* = packed `PackedGeometryEntry.geometryId`. Shaders read
|
|
19
|
+
* `(floatBitsToUint(meta.w) & 1u) != 0u` for visibility and `meta.w >> 1`
|
|
20
|
+
* for the geometry id; `baseVertex`/`firstIndex`/`indexCount` stay in
|
|
21
|
+
* `meta.xyz` as floats.
|
|
22
|
+
*/
|
|
23
|
+
export const DRAW_DATA_VISIBLE_BIT = 1;
|
|
24
|
+
export const DRAW_DATA_GEOMETRY_ID_SHIFT = 1;
|
|
25
|
+
/** Pack `meta.w` for a draw row: bit 0 visible, upper bits the pooled geometry id. */
|
|
26
|
+
export function packDrawDataFlags(visible, geometryId = 0) {
|
|
27
|
+
return (visible ? DRAW_DATA_VISIBLE_BIT : 0) | (Math.max(0, geometryId | 0) << DRAW_DATA_GEOMETRY_ID_SHIFT);
|
|
28
|
+
}
|
|
29
|
+
/** Inverse of {@link packDrawDataFlags} (tests + shader-side verification). */
|
|
30
|
+
export function unpackDrawDataFlags(flags) {
|
|
31
|
+
const bits = flags >>> 0;
|
|
32
|
+
return { visible: (bits & DRAW_DATA_VISIBLE_BIT) !== 0, geometryId: bits >>> DRAW_DATA_GEOMETRY_ID_SHIFT };
|
|
33
|
+
}
|
|
16
34
|
export class DrawDataTexture {
|
|
17
35
|
maxDraws;
|
|
18
36
|
data;
|
|
@@ -57,16 +75,24 @@ export class DrawDataTexture {
|
|
|
57
75
|
format: "rgba32f",
|
|
58
76
|
colorSpace: "linear",
|
|
59
77
|
label: "a3d-prd11-draw-data",
|
|
60
|
-
data: this.data
|
|
78
|
+
data: this.data,
|
|
79
|
+
dynamic: true // rows rewrite per frame — `update()`-driven re-upload (L5)
|
|
61
80
|
};
|
|
62
81
|
}
|
|
63
|
-
/**
|
|
82
|
+
/**
|
|
83
|
+
* Materializes once, then `update()`s in place on dirty rows — the returned
|
|
84
|
+
* `Texture` object is STABLE across row rewrites (markers/uniforms hold it
|
|
85
|
+
* by identity; the device re-uploads on `revision`).
|
|
86
|
+
*/
|
|
64
87
|
upload() {
|
|
65
|
-
if (!this.texture
|
|
66
|
-
this.texture?.dispose();
|
|
88
|
+
if (!this.texture) {
|
|
67
89
|
this.texture = new Texture(this.descriptor());
|
|
68
90
|
this.dirty = false;
|
|
69
91
|
}
|
|
92
|
+
else if (this.dirty) {
|
|
93
|
+
this.texture.update(this.data);
|
|
94
|
+
this.dirty = false;
|
|
95
|
+
}
|
|
70
96
|
return this.texture;
|
|
71
97
|
}
|
|
72
98
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DrawDataTexture.js","sourceRoot":"","sources":["../../../../../packages/rendering/src/batching/DrawDataTexture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAA0B,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGnD,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"DrawDataTexture.js","sourceRoot":"","sources":["../../../../../packages/rendering/src/batching/DrawDataTexture.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,6 +45,32 @@ export interface PackedDrawCommand {
|
|
|
45
45
|
* All members share `vertexLayoutKey`, so one pool per group is the norm.
|
|
46
46
|
*/
|
|
47
47
|
export declare function buildMultiDrawBatch(group: MultiDrawGroup, pool?: BatchedGeometryPool): MultiDrawBatch;
|
|
48
|
+
/**
|
|
49
|
+
* Signature-hit refresh (mirrors `refreshInstancedBatch`): member
|
|
50
|
+
* matrices/colours may change while the item SET is unchanged — rewrite the
|
|
51
|
+
* draw rows in place and let `upload()` mark the texture dirty for the next
|
|
52
|
+
* bind. Cheap: no re-pack, no texture object churn.
|
|
53
|
+
*/
|
|
54
|
+
export declare function refreshMultiDrawBatch(batch: MultiDrawBatch): void;
|
|
55
|
+
export interface SynthesizeMultiDrawItemsOptions {
|
|
56
|
+
/** Marker mode — `"multi-draw"` enqueues for `device.multiDrawElementsInstanced`; `"loop"` binds `u_drawId` per draw. */
|
|
57
|
+
readonly mode?: "multi-draw" | "loop";
|
|
58
|
+
/** Bounds override for the pooled `Geometry` (BatchedMesh supplies its own). */
|
|
59
|
+
readonly bounds?: {
|
|
60
|
+
readonly min: readonly [number, number, number];
|
|
61
|
+
readonly max: readonly [number, number, number];
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Synthesize the `RenderItem`s a `MultiDrawBatch` renders as: one item per
|
|
66
|
+
* member, all sharing the pool's materialized `Geometry`, each addressing its
|
|
67
|
+
* slice through `drawRange` and its per-draw data through the
|
|
68
|
+
* `multiDraw` marker (`drawIndex` selects the `DrawDataTexture` row). The
|
|
69
|
+
* shared `modelMatrix` is the folded node×instance transform — the value the
|
|
70
|
+
* uniform path needs — while the draw-data row carries the same matrix for
|
|
71
|
+
* the `a3d_draw_id` fetch.
|
|
72
|
+
*/
|
|
73
|
+
export declare function synthesizeMultiDrawItems(batch: MultiDrawBatch, options?: SynthesizeMultiDrawItemsOptions): RenderItem[];
|
|
48
74
|
/**
|
|
49
75
|
* One `DrawCommand`-shaped entry per member against the shared arenas. The
|
|
50
76
|
* `u_drawId` uniform loop binds `drawIndex` itself; the extension path reads
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiDrawBatch.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/batching/MultiDrawBatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAe,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACrI,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"MultiDrawBatch.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/batching/MultiDrawBatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* its shapes are exactly what the generated `prd11.drawId` program consumes.
|
|
12
12
|
*/
|
|
13
13
|
import { BatchedGeometryPool } from "./BatchedGeometryPool.js";
|
|
14
|
-
import { DrawDataTexture } from "./DrawDataTexture.js";
|
|
14
|
+
import { DrawDataTexture, packDrawDataFlags } from "./DrawDataTexture.js";
|
|
15
15
|
import { MaterialInstance } from "../MaterialInstance.js";
|
|
16
16
|
import { sharedResourceRegistry } from "../resources/ResourceRegistry.js";
|
|
17
17
|
const identityModel = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
|
|
@@ -46,11 +46,73 @@ export function buildMultiDrawBatch(group, pool = new BatchedGeometryPool()) {
|
|
|
46
46
|
drawData.setDraw(drawIndex, {
|
|
47
47
|
model: modelOf(item),
|
|
48
48
|
baseColor: colorOf(item),
|
|
49
|
-
meta
|
|
49
|
+
// meta.w = visible bit | geometryId (parity-L5). Planner members are
|
|
50
|
+
// always visible; a `batchedVisible` marker lets batched.mesh hide rows.
|
|
51
|
+
meta: [
|
|
52
|
+
entry.firstIndex,
|
|
53
|
+
entry.baseVertex,
|
|
54
|
+
entry.indexCount,
|
|
55
|
+
packDrawDataFlags(batchedVisible(item), entry.geometryId)
|
|
56
|
+
]
|
|
50
57
|
});
|
|
51
58
|
});
|
|
52
59
|
return { group, entries, drawData, pool };
|
|
53
60
|
}
|
|
61
|
+
function batchedVisible(item) {
|
|
62
|
+
return item.batchedVisible !== false;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Signature-hit refresh (mirrors `refreshInstancedBatch`): member
|
|
66
|
+
* matrices/colours may change while the item SET is unchanged — rewrite the
|
|
67
|
+
* draw rows in place and let `upload()` mark the texture dirty for the next
|
|
68
|
+
* bind. Cheap: no re-pack, no texture object churn.
|
|
69
|
+
*/
|
|
70
|
+
export function refreshMultiDrawBatch(batch) {
|
|
71
|
+
batch.group.members.forEach((item, drawIndex) => {
|
|
72
|
+
const entry = batch.entries[drawIndex];
|
|
73
|
+
batch.drawData.setDraw(drawIndex, {
|
|
74
|
+
model: modelOf(item),
|
|
75
|
+
baseColor: colorOf(item),
|
|
76
|
+
meta: [
|
|
77
|
+
entry.firstIndex,
|
|
78
|
+
entry.baseVertex,
|
|
79
|
+
entry.indexCount,
|
|
80
|
+
packDrawDataFlags(batchedVisible(item), entry.geometryId)
|
|
81
|
+
]
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
batch.drawData.upload();
|
|
85
|
+
}
|
|
86
|
+
const SHARED_IDENTITY_MODEL = new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
|
|
87
|
+
/**
|
|
88
|
+
* Synthesize the `RenderItem`s a `MultiDrawBatch` renders as: one item per
|
|
89
|
+
* member, all sharing the pool's materialized `Geometry`, each addressing its
|
|
90
|
+
* slice through `drawRange` and its per-draw data through the
|
|
91
|
+
* `multiDraw` marker (`drawIndex` selects the `DrawDataTexture` row). The
|
|
92
|
+
* shared `modelMatrix` is the folded node×instance transform — the value the
|
|
93
|
+
* uniform path needs — while the draw-data row carries the same matrix for
|
|
94
|
+
* the `a3d_draw_id` fetch.
|
|
95
|
+
*/
|
|
96
|
+
export function synthesizeMultiDrawItems(batch, options = {}) {
|
|
97
|
+
const pooledGeometry = batch.pool.asGeometry(options.bounds);
|
|
98
|
+
const drawDataTexture = batch.drawData.upload();
|
|
99
|
+
const mode = options.mode ?? "multi-draw";
|
|
100
|
+
const items = [];
|
|
101
|
+
batch.group.members.forEach((member, drawIndex) => {
|
|
102
|
+
const entry = batch.entries[drawIndex];
|
|
103
|
+
const range = entry.firstIndex >= 0
|
|
104
|
+
? { start: entry.firstIndex, count: entry.indexCount }
|
|
105
|
+
: { start: entry.baseVertex, count: entry.vertexCount };
|
|
106
|
+
items.push({
|
|
107
|
+
...member,
|
|
108
|
+
geometry: pooledGeometry,
|
|
109
|
+
drawRange: range,
|
|
110
|
+
modelMatrix: SHARED_IDENTITY_MODEL,
|
|
111
|
+
multiDraw: { mode, drawIndex, drawData: drawDataTexture }
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
return items;
|
|
115
|
+
}
|
|
54
116
|
/**
|
|
55
117
|
* One `DrawCommand`-shaped entry per member against the shared arenas. The
|
|
56
118
|
* `u_drawId` uniform loop binds `drawIndex` itself; the extension path reads
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiDrawBatch.js","sourceRoot":"","sources":["../../../../../packages/rendering/src/batching/MultiDrawBatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,EAAE,mBAAmB,EAA4B,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"MultiDrawBatch.js","sourceRoot":"","sources":["../../../../../packages/rendering/src/batching/MultiDrawBatch.ts"],"names":[],"mappings":"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"}
|
package/dist/batching/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export { geometryContentKey, materialSpecKey, materialKeyExcludesParameter } from "./ContentKeys.js";
|
|
2
2
|
export { MAX_GPU_INSTANCES, REASONS_NOT_BATCHED, planBatches, type BatchPlan, type InstancedBatch, type InstancedBatchChunk, type MultiDrawGroup, type NotBatchedReason, type PlanBatchesOptions } from "./StaticMergePlanner.js";
|
|
3
3
|
export { BatchedGeometryPool, type PackedGeometryEntry } from "./BatchedGeometryPool.js";
|
|
4
|
-
export { DRAW_DATA_TEXELS_PER_DRAW, DrawDataTexture, type DrawDataEntry } from "./DrawDataTexture.js";
|
|
5
|
-
export { buildMultiDrawBatch, multiDrawCommands, submitMultiDrawBatch, type MultiDrawBatch, type PackedDrawCommand } from "./MultiDrawBatch.js";
|
|
4
|
+
export { DRAW_DATA_TEXELS_PER_DRAW, DRAW_DATA_VISIBLE_BIT, DRAW_DATA_GEOMETRY_ID_SHIFT, DrawDataTexture, packDrawDataFlags, unpackDrawDataFlags, type DrawDataEntry } from "./DrawDataTexture.js";
|
|
5
|
+
export { buildMultiDrawBatch, multiDrawCommands, refreshMultiDrawBatch, synthesizeMultiDrawItems, submitMultiDrawBatch, type MultiDrawBatch, type PackedDrawCommand, type SynthesizeMultiDrawItemsOptions } from "./MultiDrawBatch.js";
|
|
6
6
|
export { PRD11_DRAWID_CHUNK, PRD11_DRAWID_DEPTH_FEATURE, PRD11_DRAWID_FEATURE, registerPrd11DrawIdShader, type Prd11MultiDrawItem } from "./shaders/drawId.glsl.js";
|
|
7
7
|
export { PRD11_INSTANCE_EMISSIVE_FEATURE, PRD11_INSTANCE_EMISSIVE_FRAG_CHUNK, PRD11_INSTANCE_EMISSIVE_VTX_CHUNK, registerPrd11InstanceEmissiveShader } from "./shaders/instanceEmissive.glsl.js";
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/batching/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,4BAA4B,EAC7B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,mBAAmB,EACnB,KAAK,mBAAmB,EACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,yBAAyB,EACzB,eAAe,EACf,KAAK,aAAa,EACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,cAAc,EACnB,KAAK,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/batching/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,4BAA4B,EAC7B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,mBAAmB,EACnB,KAAK,mBAAmB,EACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,2BAA2B,EAC3B,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,aAAa,EACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,EACpB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,+BAA+B,EACrC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,oBAAoB,EACpB,yBAAyB,EACzB,KAAK,kBAAkB,EACxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,+BAA+B,EAC/B,kCAAkC,EAClC,iCAAiC,EACjC,mCAAmC,EACpC,MAAM,iCAAiC,CAAC"}
|
package/dist/batching/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export { geometryContentKey, materialSpecKey, materialKeyExcludesParameter } from "./ContentKeys.js";
|
|
2
2
|
export { MAX_GPU_INSTANCES, REASONS_NOT_BATCHED, planBatches } from "./StaticMergePlanner.js";
|
|
3
3
|
export { BatchedGeometryPool } from "./BatchedGeometryPool.js";
|
|
4
|
-
export { DRAW_DATA_TEXELS_PER_DRAW, DrawDataTexture } from "./DrawDataTexture.js";
|
|
5
|
-
export { buildMultiDrawBatch, multiDrawCommands, submitMultiDrawBatch } from "./MultiDrawBatch.js";
|
|
4
|
+
export { DRAW_DATA_TEXELS_PER_DRAW, DRAW_DATA_VISIBLE_BIT, DRAW_DATA_GEOMETRY_ID_SHIFT, DrawDataTexture, packDrawDataFlags, unpackDrawDataFlags } from "./DrawDataTexture.js";
|
|
5
|
+
export { buildMultiDrawBatch, multiDrawCommands, refreshMultiDrawBatch, synthesizeMultiDrawItems, submitMultiDrawBatch } from "./MultiDrawBatch.js";
|
|
6
6
|
export { PRD11_DRAWID_CHUNK, PRD11_DRAWID_DEPTH_FEATURE, PRD11_DRAWID_FEATURE, registerPrd11DrawIdShader } from "./shaders/drawId.glsl.js";
|
|
7
7
|
export { PRD11_INSTANCE_EMISSIVE_FEATURE, PRD11_INSTANCE_EMISSIVE_FRAG_CHUNK, PRD11_INSTANCE_EMISSIVE_VTX_CHUNK, registerPrd11InstanceEmissiveShader } from "./shaders/instanceEmissive.glsl.js";
|
|
8
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/rendering/src/batching/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,4BAA4B,EAC7B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EAOZ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,mBAAmB,EAEpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,yBAAyB,EACzB,eAAe,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/rendering/src/batching/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,4BAA4B,EAC7B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EAOZ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,mBAAmB,EAEpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,2BAA2B,EAC3B,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EAEpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,EAIrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,oBAAoB,EACpB,yBAAyB,EAE1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,+BAA+B,EAC/B,kCAAkC,EAClC,iCAAiC,EACjC,mCAAmC,EACpC,MAAM,iCAAiC,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { type ComputeBindingSpec, type ComputeBufferSpec, type ComputeBufferUsage, type ComputeDispatchInput, type ComputeDispatchResult, type ComputeGPUBufferLike, type ComputeGPUDeviceLike, type ComputePipelineSpec } from "./types.js";
|
|
2
|
+
declare const DEFAULT_LIMITS: {
|
|
3
|
+
readonly maxComputeWorkgroupSizeX: 256;
|
|
4
|
+
readonly maxComputeWorkgroupSizeY: 256;
|
|
5
|
+
readonly maxComputeWorkgroupSizeZ: 64;
|
|
6
|
+
readonly maxComputeInvocationsPerWorkgroup: 256;
|
|
7
|
+
readonly maxComputeWorkgroupsPerDimension: 65535;
|
|
8
|
+
readonly maxStorageBuffersPerShaderStage: 8;
|
|
9
|
+
readonly maxUniformBuffersPerShaderStage: 12;
|
|
10
|
+
readonly maxUniformBufferBindingSize: 65536;
|
|
11
|
+
readonly maxStorageBufferBindingSize: 134217728;
|
|
12
|
+
readonly maxBufferSize: 268435456;
|
|
13
|
+
};
|
|
14
|
+
type Triple = readonly [number, number, number];
|
|
15
|
+
export declare class ComputeLimits {
|
|
16
|
+
private readonly raw;
|
|
17
|
+
constructor(raw: Readonly<Record<string, number>> | undefined);
|
|
18
|
+
get(name: keyof typeof DEFAULT_LIMITS): number;
|
|
19
|
+
}
|
|
20
|
+
export declare class ComputePipeline {
|
|
21
|
+
readonly owner: ComputeContext;
|
|
22
|
+
readonly native: {
|
|
23
|
+
getBindGroupLayout(index: number): unknown;
|
|
24
|
+
};
|
|
25
|
+
readonly id: number;
|
|
26
|
+
readonly entryPoint: string;
|
|
27
|
+
readonly workgroupSize: Triple;
|
|
28
|
+
readonly bindings: readonly ComputeBindingSpec[];
|
|
29
|
+
readonly label: string | undefined;
|
|
30
|
+
private isDisposed;
|
|
31
|
+
/** @internal */
|
|
32
|
+
constructor(owner: ComputeContext, id: number, native: {
|
|
33
|
+
getBindGroupLayout(index: number): unknown;
|
|
34
|
+
}, spec: {
|
|
35
|
+
entryPoint: string;
|
|
36
|
+
workgroupSize: Triple;
|
|
37
|
+
bindings: readonly ComputeBindingSpec[];
|
|
38
|
+
label: string | undefined;
|
|
39
|
+
});
|
|
40
|
+
get disposed(): boolean;
|
|
41
|
+
/** Idempotent. WebGPU pipelines have no explicit destroy; this retires the handle. */
|
|
42
|
+
dispose(): void;
|
|
43
|
+
}
|
|
44
|
+
export declare class ComputeBuffer {
|
|
45
|
+
readonly owner: ComputeContext;
|
|
46
|
+
readonly native: ComputeGPUBufferLike;
|
|
47
|
+
readonly size: number;
|
|
48
|
+
readonly usage: ComputeBufferUsage;
|
|
49
|
+
readonly label: string | undefined;
|
|
50
|
+
private isDisposed;
|
|
51
|
+
/** @internal */
|
|
52
|
+
constructor(owner: ComputeContext, native: ComputeGPUBufferLike, size: number, usage: ComputeBufferUsage, label: string | undefined);
|
|
53
|
+
get disposed(): boolean;
|
|
54
|
+
/** Upload bytes at a 4-byte-aligned offset. */
|
|
55
|
+
write(data: ArrayBufferView | ArrayBuffer, byteOffset?: number): void;
|
|
56
|
+
/** Copy the buffer to a staging buffer, map it and return the bytes. Rejects with `compute-read-failed`. */
|
|
57
|
+
read(): Promise<ArrayBuffer>;
|
|
58
|
+
/** Idempotent. */
|
|
59
|
+
dispose(): void;
|
|
60
|
+
private assertLive;
|
|
61
|
+
}
|
|
62
|
+
export declare class ComputeContext {
|
|
63
|
+
readonly device: ComputeGPUDeviceLike;
|
|
64
|
+
readonly limits: ComputeLimits;
|
|
65
|
+
private readonly buffers;
|
|
66
|
+
private readonly pipelines;
|
|
67
|
+
private nextPipelineId;
|
|
68
|
+
private isDisposed;
|
|
69
|
+
constructor(device: ComputeGPUDeviceLike);
|
|
70
|
+
get disposed(): boolean;
|
|
71
|
+
createPipeline(spec: ComputePipelineSpec): ComputePipeline;
|
|
72
|
+
createBuffer(spec: ComputeBufferSpec): ComputeBuffer;
|
|
73
|
+
/** Encode and submit one compute pass. Resolves nothing: the GPU runs asynchronously; use `read()` or `onIdle()` to wait. */
|
|
74
|
+
dispatch(input: ComputeDispatchInput): ComputeDispatchResult;
|
|
75
|
+
/** Resolves when every submitted compute command has finished (no-op where the device cannot report it). */
|
|
76
|
+
onIdle(): Promise<void>;
|
|
77
|
+
/** Destroys every buffer this context created. Idempotent. */
|
|
78
|
+
dispose(): void;
|
|
79
|
+
private validateBindings;
|
|
80
|
+
private assertLive;
|
|
81
|
+
}
|
|
82
|
+
export declare function createComputeContext(device: ComputeGPUDeviceLike): ComputeContext;
|
|
83
|
+
export {};
|
|
84
|
+
//# sourceMappingURL=ComputeContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComputeContext.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/compute/ComputeContext.ts"],"names":[],"mappings":"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"}
|