ice3 0.1.1 → 0.2.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/README.md +4 -0
- package/dist/_types/assets/ICEPreparedGLB.d.ts +1 -0
- package/dist/_types/assets/ICEPreviewGeometryPacket.d.ts +60 -0
- package/dist/_types/assets/index.d.ts +2 -0
- package/dist/_types/core/camera/ICEPerspectiveCamera.d.ts +3 -2
- package/dist/_types/core/geometry/ICEGeometry.d.ts +13 -0
- package/dist/_types/core/geometry/ICEIndexedGeometry.d.ts +3 -1
- package/dist/_types/core/index.d.ts +1 -1
- package/dist/_types/core/material/ICEBasicMaterial.d.ts +2 -0
- package/dist/_types/core/scene/ICENode.d.ts +6 -1
- package/dist/_types/renderer/Color.d.ts +2 -0
- package/dist/_types/renderer/FakeRendererBackend.d.ts +1 -1
- package/dist/_types/renderer/InstanceBatch.d.ts +14 -0
- package/dist/_types/renderer/RenderBatch.d.ts +17 -0
- package/dist/_types/renderer/Renderables.d.ts +9 -0
- package/dist/_types/renderer/RendererProfiler.d.ts +19 -0
- package/dist/_types/renderer/RendererSelection.d.ts +12 -0
- package/dist/_types/renderer/WebGL2GeometryBatch.d.ts +2 -9
- package/dist/_types/renderer/WebGL2GeometryCache.d.ts +16 -2
- package/dist/_types/renderer/WebGL2InstanceBatch.d.ts +3 -14
- package/dist/_types/renderer/WebGL2Program.d.ts +14 -0
- package/dist/_types/renderer/WebGL2RenderBatch.d.ts +1 -16
- package/dist/_types/renderer/WebGL2RendererBackend.d.ts +13 -2
- package/dist/_types/renderer/WebGL2ShadowMap.d.ts +26 -0
- package/dist/_types/renderer/WebGPUBundleCache.d.ts +14 -0
- package/dist/_types/renderer/WebGPUCapabilities.d.ts +23 -0
- package/dist/_types/renderer/WebGPUDrawStorage.d.ts +28 -0
- package/dist/_types/renderer/WebGPUGeometryCache.d.ts +59 -0
- package/dist/_types/renderer/WebGPUInstanceCache.d.ts +24 -0
- package/dist/_types/renderer/WebGPUInstanceStorage.d.ts +39 -0
- package/dist/_types/renderer/WebGPUPicker.d.ts +30 -0
- package/dist/_types/renderer/WebGPUProbe.d.ts +21 -0
- package/dist/_types/renderer/WebGPURenderPipeline.d.ts +22 -0
- package/dist/_types/renderer/WebGPURenderPlan.d.ts +23 -0
- package/dist/_types/renderer/WebGPURendererBackend.d.ts +113 -0
- package/dist/_types/renderer/WebGPUResources.d.ts +9 -0
- package/dist/_types/renderer/WebGPUSelectionMask.d.ts +18 -0
- package/dist/_types/renderer/WebGPUTimestampProfiler.d.ts +16 -0
- package/dist/_types/renderer/WebGPUVisibility.d.ts +27 -0
- package/dist/_types/renderer/index.d.ts +21 -7
- package/dist/_types/renderer/types.d.ts +17 -3
- package/dist/_types/runtime/ICE3.d.ts +16 -6
- package/dist/_types/runtime/asset/ICEAssetSceneBuilder.d.ts +8 -2
- package/dist/_types/runtime/asset/ICEPreviewPacketLoader.d.ts +25 -0
- package/dist/_types/runtime/asset/ICETilesetLoader.d.ts +0 -1
- package/dist/_types/runtime/index.d.ts +2 -1
- package/dist/_types/runtime/input/ICEOrbitController.d.ts +2 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +4782 -330
- package/dist/index.js.map +4 -4
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -47,6 +47,10 @@ scene.addChild(new ICEMesh({
|
|
|
47
47
|
engine.setScene(scene).setCamera(camera).start();
|
|
48
48
|
```
|
|
49
49
|
|
|
50
|
+
默认使用 WebGL2。WebGPU 是实验性能力,必须显式使用
|
|
51
|
+
`await new ICE3({ renderer: 'webgpu' }).initAsync(host)` 才会启用;`auto` 保留为
|
|
52
|
+
WebGL2 兼容别名。拾取使用 `await engine.pick(point)`。
|
|
53
|
+
|
|
50
54
|
完整文档和相关工具见
|
|
51
55
|
[Engine 文档](https://github.com/ice-3d/ice3-engine/blob/main/README.md)。
|
|
52
56
|
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
export type ICEPreviewGeometryBackend = 'cpu' | 'gpu';
|
|
2
|
+
export type ICEPreviewGeometryResidencyMode = 'cpu' | 'cold' | 'warm' | 'resident' | 'snapshot';
|
|
3
|
+
export type ICEPreviewGeometryRangeUsage = 'vertex_attributes' | 'indices';
|
|
4
|
+
export interface ICEPreviewGeometryRange {
|
|
5
|
+
readonly byteOffset: number;
|
|
6
|
+
readonly byteLength: number;
|
|
7
|
+
readonly usage: ICEPreviewGeometryRangeUsage;
|
|
8
|
+
}
|
|
9
|
+
export interface ICEPreviewGeometryNode {
|
|
10
|
+
readonly nodeId: string;
|
|
11
|
+
readonly parentId: string | null;
|
|
12
|
+
readonly name: string;
|
|
13
|
+
readonly matrix: readonly number[];
|
|
14
|
+
readonly materialId: string | null;
|
|
15
|
+
readonly geometryId: string | null;
|
|
16
|
+
readonly visible: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface ICEPreviewGeometryRecord {
|
|
19
|
+
readonly geometryId: string;
|
|
20
|
+
readonly residentGeometryId: string | null;
|
|
21
|
+
readonly topologyDigest: string;
|
|
22
|
+
readonly attributeDigest: string;
|
|
23
|
+
readonly vertexCount: number;
|
|
24
|
+
readonly indexCount: number;
|
|
25
|
+
readonly indexWidth: 2 | 4;
|
|
26
|
+
readonly ranges: readonly ICEPreviewGeometryRange[];
|
|
27
|
+
}
|
|
28
|
+
export interface ICEPreviewGeometry extends ICEPreviewGeometryRecord {
|
|
29
|
+
readonly positions: Float32Array;
|
|
30
|
+
readonly indices: Uint16Array | Uint32Array;
|
|
31
|
+
}
|
|
32
|
+
export interface ICEPreviewGeometryMaterial {
|
|
33
|
+
readonly materialId: string;
|
|
34
|
+
readonly baseColor: readonly [number, number, number, number];
|
|
35
|
+
readonly metallic: number;
|
|
36
|
+
readonly roughness: number;
|
|
37
|
+
readonly opacity: number;
|
|
38
|
+
}
|
|
39
|
+
export interface ICEPreviewGeometryManifest {
|
|
40
|
+
readonly schemaVersion: number;
|
|
41
|
+
readonly transportVersion: number;
|
|
42
|
+
readonly revision: number;
|
|
43
|
+
readonly parentRevision: number | null;
|
|
44
|
+
readonly sourceDigest: string;
|
|
45
|
+
readonly backend: ICEPreviewGeometryBackend;
|
|
46
|
+
readonly residencyMode: ICEPreviewGeometryResidencyMode;
|
|
47
|
+
readonly nodes: readonly ICEPreviewGeometryNode[];
|
|
48
|
+
readonly geometries: readonly ICEPreviewGeometryRecord[];
|
|
49
|
+
readonly materials: readonly ICEPreviewGeometryMaterial[];
|
|
50
|
+
readonly removedNodeIds: readonly string[];
|
|
51
|
+
readonly removedGeometryIds: readonly string[];
|
|
52
|
+
}
|
|
53
|
+
export interface ICEPreviewGeometryPacket extends Omit<ICEPreviewGeometryManifest, 'geometries'> {
|
|
54
|
+
readonly geometries: readonly ICEPreviewGeometry[];
|
|
55
|
+
readonly binary: Uint8Array;
|
|
56
|
+
}
|
|
57
|
+
export type ICEPreviewGeometryDelta = ICEPreviewGeometryPacket;
|
|
58
|
+
export declare function parsePreviewGeometryPacket(input: Uint8Array | ArrayBuffer): ICEPreviewGeometryPacket;
|
|
59
|
+
export declare function applyPreviewGeometryDelta(base: ICEPreviewGeometryPacket, delta: ICEPreviewGeometryDelta): ICEPreviewGeometryPacket;
|
|
60
|
+
//# sourceMappingURL=ICEPreviewGeometryPacket.d.ts.map
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export { readPreparedGLB, verifyPreparedGLBIntegrity, } from './ICEGLBReader.js';
|
|
2
2
|
export type { ICEPreparedAssetSnapshot, ICEPreparedBatch, ICEPreparedBatching, ICEPreparedContract, ICEPreparedGeometry, ICEPreparedMaterial, ICEPreparedMesh, ICEPreparedNode, ICEPreparedStats, } from './ICEPreparedGLB.js';
|
|
3
|
+
export { applyPreviewGeometryDelta, parsePreviewGeometryPacket, } from './ICEPreviewGeometryPacket.js';
|
|
4
|
+
export type { ICEPreviewGeometry, ICEPreviewGeometryBackend, ICEPreviewGeometryDelta, ICEPreviewGeometryManifest, ICEPreviewGeometryMaterial, ICEPreviewGeometryNode, ICEPreviewGeometryPacket, ICEPreviewGeometryRange, ICEPreviewGeometryRangeUsage, ICEPreviewGeometryRecord, ICEPreviewGeometryResidencyMode, } from './ICEPreviewGeometryPacket.js';
|
|
3
5
|
export { readTileset } from './ICETilesetReader.js';
|
|
4
6
|
export type { ICETilesetSnapshot, ICETilesetTile, } from './ICETileset.js';
|
|
5
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -11,13 +11,14 @@ export interface ICEPerspectiveCameraOptions {
|
|
|
11
11
|
export declare class ICEPerspectiveCamera {
|
|
12
12
|
readonly id: string;
|
|
13
13
|
readonly fov: number;
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
near: number;
|
|
15
|
+
far: number;
|
|
16
16
|
private eye;
|
|
17
17
|
private lookTarget;
|
|
18
18
|
constructor(options: ICEPerspectiveCameraOptions);
|
|
19
19
|
setPosition(position: ICEVector3Tuple): this;
|
|
20
20
|
setTarget(target: ICEVector3Tuple): this;
|
|
21
|
+
setClipPlanes(near: number, far: number): this;
|
|
21
22
|
getPosition(): ICEVector3;
|
|
22
23
|
getTarget(): ICEVector3;
|
|
23
24
|
getViewProjectionMatrix(aspect: number): ICEMatrix4;
|
|
@@ -2,6 +2,18 @@ export interface ICEGeometryBounds {
|
|
|
2
2
|
readonly min: readonly [number, number, number];
|
|
3
3
|
readonly max: readonly [number, number, number];
|
|
4
4
|
}
|
|
5
|
+
export interface ICEGeometryIdentity {
|
|
6
|
+
readonly geometryId: string;
|
|
7
|
+
readonly topologyDigest: string;
|
|
8
|
+
readonly attributeDigest: string;
|
|
9
|
+
}
|
|
10
|
+
export interface ICEGeometryByteRange {
|
|
11
|
+
readonly byteOffset: number;
|
|
12
|
+
readonly byteLength: number;
|
|
13
|
+
}
|
|
14
|
+
export interface ICEGeometryBufferUpdate {
|
|
15
|
+
readonly positionRanges: readonly ICEGeometryByteRange[];
|
|
16
|
+
}
|
|
5
17
|
export interface ICEGeometry {
|
|
6
18
|
readonly typeId: string;
|
|
7
19
|
readonly positions: Float32Array;
|
|
@@ -9,6 +21,7 @@ export interface ICEGeometry {
|
|
|
9
21
|
readonly edgeIndices?: Uint16Array | Uint32Array;
|
|
10
22
|
readonly colors?: Float32Array;
|
|
11
23
|
readonly semanticIndices?: Uint32Array;
|
|
24
|
+
readonly identity?: ICEGeometryIdentity;
|
|
12
25
|
getBounds(): ICEGeometryBounds;
|
|
13
26
|
toJSON(): Record<string, unknown>;
|
|
14
27
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ICEGeometry, ICEGeometryBounds } from './ICEGeometry.js';
|
|
1
|
+
import type { ICEGeometry, ICEGeometryBounds, ICEGeometryIdentity } from './ICEGeometry.js';
|
|
2
2
|
export interface ICEIndexedGeometryOptions {
|
|
3
3
|
readonly id: string;
|
|
4
4
|
readonly positions: Float32Array;
|
|
@@ -6,6 +6,7 @@ export interface ICEIndexedGeometryOptions {
|
|
|
6
6
|
readonly edgeIndices?: Uint16Array | Uint32Array;
|
|
7
7
|
readonly colors?: Float32Array;
|
|
8
8
|
readonly semanticIndices?: Uint32Array;
|
|
9
|
+
readonly identity?: ICEGeometryIdentity;
|
|
9
10
|
}
|
|
10
11
|
export declare class ICEIndexedGeometry implements ICEGeometry {
|
|
11
12
|
readonly typeId = "ice3:IndexedGeometry";
|
|
@@ -15,6 +16,7 @@ export declare class ICEIndexedGeometry implements ICEGeometry {
|
|
|
15
16
|
readonly edgeIndices?: Uint16Array | Uint32Array;
|
|
16
17
|
readonly colors?: Float32Array;
|
|
17
18
|
readonly semanticIndices?: Uint32Array;
|
|
19
|
+
readonly identity: ICEGeometryIdentity;
|
|
18
20
|
constructor(options: ICEIndexedGeometryOptions);
|
|
19
21
|
getBounds(): ICEGeometryBounds;
|
|
20
22
|
toJSON(): Record<string, unknown>;
|
|
@@ -7,7 +7,7 @@ export { ICEBoxGeometry } from './geometry/ICEBoxGeometry.js';
|
|
|
7
7
|
export type { ICEBoxGeometryOptions } from './geometry/ICEBoxGeometry.js';
|
|
8
8
|
export { ICEIndexedGeometry } from './geometry/ICEIndexedGeometry.js';
|
|
9
9
|
export type { ICEIndexedGeometryOptions } from './geometry/ICEIndexedGeometry.js';
|
|
10
|
-
export type { ICEGeometry, ICEGeometryBounds } from './geometry/ICEGeometry.js';
|
|
10
|
+
export type { ICEGeometry, ICEGeometryBounds, ICEGeometryBufferUpdate, ICEGeometryByteRange, ICEGeometryIdentity, } from './geometry/ICEGeometry.js';
|
|
11
11
|
export { ICEBasicMaterial } from './material/ICEBasicMaterial.js';
|
|
12
12
|
export type { ICEBasicMaterialOptions } from './material/ICEBasicMaterial.js';
|
|
13
13
|
export { ICEPerspectiveCamera } from './camera/ICEPerspectiveCamera.js';
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
export interface ICEBasicMaterialOptions {
|
|
2
2
|
readonly color: string;
|
|
3
3
|
readonly edgeColor?: string;
|
|
4
|
+
readonly shading?: 'directional' | 'flat' | 'water';
|
|
4
5
|
}
|
|
5
6
|
export declare class ICEBasicMaterial {
|
|
6
7
|
readonly typeId = "ice3:BasicMaterial";
|
|
7
8
|
readonly color: string;
|
|
8
9
|
readonly edgeColor: string | undefined;
|
|
10
|
+
readonly shading: 'directional' | 'flat' | 'water' | undefined;
|
|
9
11
|
constructor(options: ICEBasicMaterialOptions);
|
|
10
12
|
toJSON(): Record<string, unknown>;
|
|
11
13
|
}
|
|
@@ -50,13 +50,17 @@ export declare class ICENode extends ICEEventDispatcher {
|
|
|
50
50
|
readonly position: ICEVector3;
|
|
51
51
|
readonly rotation: ICEVector3;
|
|
52
52
|
readonly scale: ICEVector3;
|
|
53
|
-
visible: boolean;
|
|
54
53
|
private _parent;
|
|
55
54
|
private readonly _children;
|
|
56
55
|
private readonly worldMatrix;
|
|
57
56
|
private localMatrixOverride;
|
|
57
|
+
private _visible;
|
|
58
|
+
private _revision;
|
|
58
59
|
constructor(options: ICENodeOptions);
|
|
59
60
|
get typeId(): string;
|
|
61
|
+
get visible(): boolean;
|
|
62
|
+
set visible(value: boolean);
|
|
63
|
+
get revision(): number;
|
|
60
64
|
get parent(): ICENode | null;
|
|
61
65
|
get children(): readonly ICENode[];
|
|
62
66
|
addChild(node: ICENode): this;
|
|
@@ -71,6 +75,7 @@ export declare class ICENode extends ICEEventDispatcher {
|
|
|
71
75
|
toJSON(): ICESerializedNode;
|
|
72
76
|
dispose(): void;
|
|
73
77
|
private getRoot;
|
|
78
|
+
private markSceneChanged;
|
|
74
79
|
private isAncestorOf;
|
|
75
80
|
private localMatrix;
|
|
76
81
|
}
|
|
@@ -19,7 +19,7 @@ export declare class FakeRendererBackend implements ICERendererBackend {
|
|
|
19
19
|
prepareBatchGeometry(): void;
|
|
20
20
|
releaseBatchGeometry(): void;
|
|
21
21
|
render(frame: ICEFrame): void;
|
|
22
|
-
pick(): string | undefined
|
|
22
|
+
pick(): Promise<string | undefined>;
|
|
23
23
|
dispose(): void;
|
|
24
24
|
get disposeCount(): number;
|
|
25
25
|
private assertActive;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ICEBasicMaterial, ICEGeometry } from '../core/index.js';
|
|
2
|
+
import type { ICEGeometryRenderable } from './Renderables.js';
|
|
3
|
+
export interface ICEInstanceBatch {
|
|
4
|
+
readonly id: string;
|
|
5
|
+
readonly geometry: ICEGeometry;
|
|
6
|
+
readonly material: ICEBasicMaterial;
|
|
7
|
+
readonly instanceMatrices: Float32Array;
|
|
8
|
+
readonly semanticIds: readonly string[];
|
|
9
|
+
readonly semanticIndices: Uint32Array;
|
|
10
|
+
readonly meshIds: readonly string[];
|
|
11
|
+
readonly materialKey: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function collectInstanceBatches(renderables: readonly ICEGeometryRenderable[], output?: ICEInstanceBatch[]): readonly ICEInstanceBatch[];
|
|
14
|
+
//# sourceMappingURL=InstanceBatch.d.ts.map
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ICEBasicMaterial, ICEGeometry, ICENode, ICEScene } from '../core/index.js';
|
|
2
|
+
export interface ICERenderBatchNode extends ICENode {
|
|
3
|
+
readonly geometry: ICEGeometry;
|
|
4
|
+
readonly material: ICEBasicMaterial;
|
|
5
|
+
readonly semanticIds: readonly string[];
|
|
6
|
+
readonly semanticNodeIds: readonly string[];
|
|
7
|
+
readonly semanticSelectionIds: readonly string[];
|
|
8
|
+
readonly materialKey: string;
|
|
9
|
+
}
|
|
10
|
+
export interface ICERenderBatchDraw {
|
|
11
|
+
readonly id: string;
|
|
12
|
+
readonly batch: ICERenderBatchNode;
|
|
13
|
+
readonly worldMatrix: Float32Array;
|
|
14
|
+
}
|
|
15
|
+
export declare function collectRenderBatches(scene: ICEScene, output?: ICERenderBatchDraw[]): readonly ICERenderBatchDraw[];
|
|
16
|
+
export declare function semanticSelectionId(batch: Pick<ICERenderBatchNode, 'semanticSelectionIds'>, semanticIndex: number): string | undefined;
|
|
17
|
+
//# sourceMappingURL=RenderBatch.d.ts.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ICEMesh, type ICEScene } from '../core/index.js';
|
|
2
|
+
export interface ICEGeometryRenderable {
|
|
3
|
+
readonly id: string;
|
|
4
|
+
readonly mesh: ICEMesh;
|
|
5
|
+
readonly worldMatrix: Float32Array;
|
|
6
|
+
}
|
|
7
|
+
export declare function collectRenderables(scene: ICEScene, output?: ICEGeometryRenderable[]): readonly ICEGeometryRenderable[];
|
|
8
|
+
export declare const selectionIdentity: (mesh: ICEMesh) => string;
|
|
9
|
+
//# sourceMappingURL=Renderables.d.ts.map
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type ICEFrameStageProfile = Readonly<{
|
|
2
|
+
collectMs: number;
|
|
3
|
+
prepareAndUploadMs: number;
|
|
4
|
+
encodeMs: number;
|
|
5
|
+
submitMs: number;
|
|
6
|
+
}>;
|
|
7
|
+
type Stage = 'collect' | 'prepareAndUpload' | 'encode' | 'submit';
|
|
8
|
+
export declare class RendererProfiler {
|
|
9
|
+
private enabled;
|
|
10
|
+
private cursor;
|
|
11
|
+
private readonly marks;
|
|
12
|
+
enable(value: boolean): void;
|
|
13
|
+
get isEnabled(): boolean;
|
|
14
|
+
begin(): void;
|
|
15
|
+
mark(stage: Stage): void;
|
|
16
|
+
end(): ICEFrameStageProfile | null;
|
|
17
|
+
}
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=RendererProfiler.d.ts.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ICE3RendererPreference, ICE3RendererSelection, ICERendererBackend } from './types.js';
|
|
2
|
+
export type ICERendererFactories = Readonly<{
|
|
3
|
+
createWebGPU: () => Promise<ICERendererBackend>;
|
|
4
|
+
createWebGL2: () => ICERendererBackend;
|
|
5
|
+
}>;
|
|
6
|
+
export type ICERendererBackendSelection = Readonly<{
|
|
7
|
+
backend: ICERendererBackend;
|
|
8
|
+
selection: ICE3RendererSelection;
|
|
9
|
+
}>;
|
|
10
|
+
export declare function selectRendererBackend(preference: ICE3RendererPreference, factories: ICERendererFactories): Promise<ICERendererBackendSelection>;
|
|
11
|
+
export declare function selectDefaultRendererBackend(preference: ICE3RendererPreference): Promise<ICERendererBackendSelection>;
|
|
12
|
+
//# sourceMappingURL=RendererSelection.d.ts.map
|
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
readonly id: string;
|
|
4
|
-
readonly mesh: ICEMesh;
|
|
5
|
-
readonly worldMatrix: Float32Array;
|
|
6
|
-
}
|
|
7
|
-
export declare function collectRenderables(scene: ICEScene, output?: ICEGeometryRenderable[]): readonly ICEGeometryRenderable[];
|
|
8
|
-
export declare const selectionIdentity: (mesh: ICEMesh) => string;
|
|
9
|
-
export { collectRenderBatches, semanticSelectionId, type ICERenderBatchDraw, type ICERenderBatchNode, } from './WebGL2RenderBatch.js';
|
|
1
|
+
export { collectRenderables, selectionIdentity, type ICEGeometryRenderable, } from './Renderables.js';
|
|
2
|
+
export { collectRenderBatches, semanticSelectionId, type ICERenderBatchDraw, type ICERenderBatchNode, } from './RenderBatch.js';
|
|
10
3
|
//# sourceMappingURL=WebGL2GeometryBatch.d.ts.map
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
import type { ICEGeometry } from '../core/index.js';
|
|
1
|
+
import type { ICEGeometry, ICEGeometryBufferUpdate } from '../core/index.js';
|
|
2
2
|
export interface GeometryEntry {
|
|
3
|
+
geometry: ICEGeometry;
|
|
4
|
+
readonly geometryId: string;
|
|
5
|
+
readonly attributeDigest: string;
|
|
6
|
+
readonly topologyDigest: string;
|
|
3
7
|
readonly vertexArray: WebGLVertexArrayObject;
|
|
4
8
|
readonly positionBuffer: WebGLBuffer;
|
|
5
9
|
readonly triangleIndexBuffer: WebGLBuffer;
|
|
@@ -19,24 +23,34 @@ export declare class WebGL2GeometryCache {
|
|
|
19
23
|
private readonly entries;
|
|
20
24
|
private active;
|
|
21
25
|
private readonly pinned;
|
|
26
|
+
private readonly objectKeys;
|
|
27
|
+
private readonly legacyKeys;
|
|
28
|
+
private objectKeySequence;
|
|
22
29
|
private gl;
|
|
23
30
|
private uploads;
|
|
31
|
+
private updatedBytes;
|
|
24
32
|
private evictions;
|
|
25
33
|
private frameId;
|
|
26
34
|
private readonly inactiveGraceFrames;
|
|
27
35
|
private readonly maxBytes;
|
|
28
36
|
constructor(options?: WebGL2GeometryCacheOptions);
|
|
29
37
|
retain(gl: WebGL2RenderingContext, geometry: ICEGeometry): Readonly<GeometryEntry>;
|
|
38
|
+
private createEntry;
|
|
30
39
|
beginFrame(): void;
|
|
31
|
-
pin(gl: WebGL2RenderingContext, geometry: ICEGeometry): Readonly<GeometryEntry>;
|
|
40
|
+
pin(gl: WebGL2RenderingContext, geometry: ICEGeometry, update?: ICEGeometryBufferUpdate): Readonly<GeometryEntry>;
|
|
32
41
|
unpin(geometry: ICEGeometry): void;
|
|
33
42
|
endFrame(): void;
|
|
34
43
|
clear(): void;
|
|
35
44
|
dispose(): void;
|
|
36
45
|
get totalBytes(): number;
|
|
37
46
|
get uploadCount(): number;
|
|
47
|
+
get updateBytes(): number;
|
|
38
48
|
get evictionCount(): number;
|
|
39
49
|
private deleteEntry;
|
|
40
50
|
private enforceBudget;
|
|
51
|
+
private applyPositionUpdate;
|
|
52
|
+
private canReuse;
|
|
53
|
+
private sameTopology;
|
|
54
|
+
private keyFor;
|
|
41
55
|
}
|
|
42
56
|
//# sourceMappingURL=WebGL2GeometryCache.d.ts.map
|
|
@@ -1,17 +1,7 @@
|
|
|
1
|
-
import type { ICEBasicMaterial, ICEGeometry } from '../core/index.js';
|
|
2
1
|
import { WebGL2GeometryCache } from './WebGL2GeometryCache.js';
|
|
3
|
-
import type {
|
|
4
|
-
export type { ICEGeometryRenderable } from './
|
|
5
|
-
export
|
|
6
|
-
readonly id: string;
|
|
7
|
-
readonly geometry: ICEGeometry;
|
|
8
|
-
readonly material: ICEBasicMaterial;
|
|
9
|
-
readonly instanceMatrices: Float32Array;
|
|
10
|
-
readonly semanticIds: readonly string[];
|
|
11
|
-
readonly semanticIndices: Uint32Array;
|
|
12
|
-
readonly meshIds: readonly string[];
|
|
13
|
-
readonly materialKey: string;
|
|
14
|
-
}
|
|
2
|
+
import type { ICEInstanceBatch } from './InstanceBatch.js';
|
|
3
|
+
export type { ICEGeometryRenderable } from './Renderables.js';
|
|
4
|
+
export { collectInstanceBatches, type ICEInstanceBatch, } from './InstanceBatch.js';
|
|
15
5
|
export interface WebGL2InstanceEntry {
|
|
16
6
|
readonly vertexArray: WebGLVertexArrayObject;
|
|
17
7
|
readonly matrixBuffer: WebGLBuffer;
|
|
@@ -37,5 +27,4 @@ export declare class WebGL2InstanceCache {
|
|
|
37
27
|
get totalBytes(): number;
|
|
38
28
|
private deleteEntry;
|
|
39
29
|
}
|
|
40
|
-
export declare function collectInstanceBatches(renderables: readonly ICEGeometryRenderable[], output?: ICEInstanceBatch[]): readonly ICEInstanceBatch[];
|
|
41
30
|
//# sourceMappingURL=WebGL2InstanceBatch.d.ts.map
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ICEMatrix4 } from '../core/index.js';
|
|
2
|
+
export declare function directionalLightingShade(normal: readonly [number, number, number]): number;
|
|
2
3
|
export declare class WebGL2Program {
|
|
3
4
|
private readonly gl;
|
|
4
5
|
static readonly POSITION_ATTRIBUTE = 0;
|
|
@@ -10,14 +11,27 @@ export declare class WebGL2Program {
|
|
|
10
11
|
private readonly colorLocation;
|
|
11
12
|
private readonly clipOffsetLocation;
|
|
12
13
|
private readonly vertexColorLocation;
|
|
14
|
+
private readonly directionalShadingLocation;
|
|
15
|
+
private readonly waterShadingLocation;
|
|
16
|
+
private readonly cameraPositionLocation;
|
|
17
|
+
private readonly shadowMapLocation;
|
|
18
|
+
private readonly lightMatrixLocation;
|
|
19
|
+
private readonly shadowEnabledLocation;
|
|
13
20
|
private readonly instancingLocation;
|
|
21
|
+
private readonly pickModeLocation;
|
|
14
22
|
constructor(gl: WebGL2RenderingContext);
|
|
15
23
|
use(): void;
|
|
16
24
|
setMatrix(matrix: ICEMatrix4): void;
|
|
17
25
|
setColor(color: readonly [number, number, number, number]): void;
|
|
18
26
|
setClipOffset(x: number, y: number): void;
|
|
19
27
|
setVertexColors(enabled: boolean): void;
|
|
28
|
+
/** 绑定阴影贴图与光源矩阵;关闭时着色器跳过采样。 */
|
|
29
|
+
setShadow(enabled: boolean, texture: WebGLTexture | null, matrix: Float32Array | null, unit?: number): void;
|
|
30
|
+
setDirectionalShading(enabled: boolean): void;
|
|
31
|
+
setWaterShading(enabled: boolean): void;
|
|
32
|
+
setCameraPosition(position: readonly [number, number, number]): void;
|
|
20
33
|
setInstancing(enabled: boolean): void;
|
|
34
|
+
setPickMode(enabled: boolean): void;
|
|
21
35
|
dispose(): void;
|
|
22
36
|
private createProgram;
|
|
23
37
|
private compile;
|
|
@@ -1,17 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
export interface ICERenderBatchNode extends ICENode {
|
|
3
|
-
readonly geometry: ICEGeometry;
|
|
4
|
-
readonly material: ICEBasicMaterial;
|
|
5
|
-
readonly semanticIds: readonly string[];
|
|
6
|
-
readonly semanticNodeIds: readonly string[];
|
|
7
|
-
readonly semanticSelectionIds: readonly string[];
|
|
8
|
-
readonly materialKey: string;
|
|
9
|
-
}
|
|
10
|
-
export interface ICERenderBatchDraw {
|
|
11
|
-
readonly id: string;
|
|
12
|
-
readonly batch: ICERenderBatchNode;
|
|
13
|
-
readonly worldMatrix: Float32Array;
|
|
14
|
-
}
|
|
15
|
-
export declare function collectRenderBatches(scene: ICEScene, output?: ICERenderBatchDraw[]): readonly ICERenderBatchDraw[];
|
|
16
|
-
export declare function semanticSelectionId(batch: Pick<ICERenderBatchNode, 'semanticSelectionIds'>, semanticIndex: number): string | undefined;
|
|
1
|
+
export { collectRenderBatches, semanticSelectionId, type ICERenderBatchDraw, type ICERenderBatchNode, } from './RenderBatch.js';
|
|
17
2
|
//# sourceMappingURL=WebGL2RenderBatch.d.ts.map
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type ICEGeometry } from '../core/index.js';
|
|
2
|
+
import { type ICEFrameStageProfile } from './RendererProfiler.js';
|
|
2
3
|
import type { ICERendererBackend, ICERendererCapabilities, ICEFrame, ICEScreenPoint, ICEViewport } from './types.js';
|
|
3
|
-
export
|
|
4
|
+
export { colorToRgba } from './Color.js';
|
|
4
5
|
export declare class WebGL2RendererBackend implements ICERendererBackend {
|
|
5
6
|
capabilities: Readonly<ICERendererCapabilities>;
|
|
6
7
|
private canvas;
|
|
@@ -10,6 +11,8 @@ export declare class WebGL2RendererBackend implements ICERendererBackend {
|
|
|
10
11
|
private onContextLost;
|
|
11
12
|
private onContextRestored;
|
|
12
13
|
private program;
|
|
14
|
+
private shadowMap;
|
|
15
|
+
private readonly shadowEnabled;
|
|
13
16
|
private semanticProgram;
|
|
14
17
|
private geometryCache;
|
|
15
18
|
private instanceCache;
|
|
@@ -20,6 +23,8 @@ export declare class WebGL2RendererBackend implements ICERendererBackend {
|
|
|
20
23
|
private readonly batchesScratch;
|
|
21
24
|
private readonly instancesScratch;
|
|
22
25
|
private readonly instancedMeshIds;
|
|
26
|
+
private readonly profiler;
|
|
27
|
+
private lastFrameProfile;
|
|
23
28
|
private backgroundRgba;
|
|
24
29
|
private frameStats;
|
|
25
30
|
private readonly handleContextLost;
|
|
@@ -32,9 +37,15 @@ export declare class WebGL2RendererBackend implements ICERendererBackend {
|
|
|
32
37
|
resize(viewport: ICEViewport, dpr: number): void;
|
|
33
38
|
setBackgroundColor(color: string): void;
|
|
34
39
|
prepareBatchGeometry(geometry: ICEGeometry): void;
|
|
40
|
+
prepareGeometry(geometry: ICEGeometry, update?: import('../core/index.js').ICEGeometryBufferUpdate): void;
|
|
41
|
+
releaseGeometry(geometry: ICEGeometry): void;
|
|
35
42
|
releaseBatchGeometry(geometry: ICEGeometry): void;
|
|
36
43
|
render(frame: ICEFrame): void;
|
|
37
|
-
|
|
44
|
+
enableProfiling(enabled: boolean): void;
|
|
45
|
+
get frameProfile(): ICEFrameStageProfile | null;
|
|
46
|
+
pick(frame: ICEFrame, point: ICEScreenPoint): Promise<string | undefined>;
|
|
47
|
+
capture(): Promise<Blob>;
|
|
48
|
+
finish(): Promise<void>;
|
|
38
49
|
dispose(): void;
|
|
39
50
|
getViewport(): ICEViewport;
|
|
40
51
|
getDevicePixelRatio(): number;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/** 光源方向(与主着色器的 diffuse 保持同一方向)。 */
|
|
2
|
+
export declare const LIGHT_DIRECTION: readonly [number, number, number];
|
|
3
|
+
export declare class WebGL2ShadowMap {
|
|
4
|
+
private readonly gl;
|
|
5
|
+
private framebuffer;
|
|
6
|
+
private depthTexture;
|
|
7
|
+
private program;
|
|
8
|
+
private lightMatrixLocation;
|
|
9
|
+
private matrixScratch;
|
|
10
|
+
constructor(gl: WebGL2RenderingContext);
|
|
11
|
+
/** 深度纹理,供主着色器采样。 */
|
|
12
|
+
get texture(): WebGLTexture | null;
|
|
13
|
+
get matrix(): Float32Array;
|
|
14
|
+
/** 绑定阴影帧缓冲,返回是否成功。 */
|
|
15
|
+
begin(): boolean;
|
|
16
|
+
/** 解绑,恢复默认帧缓冲。 */
|
|
17
|
+
end(width: number, height: number): void;
|
|
18
|
+
dispose(): void;
|
|
19
|
+
private createResources;
|
|
20
|
+
/** 正交光源矩阵:覆盖整片场地,与主着色器的光方向一致。 */
|
|
21
|
+
private updateLightMatrix;
|
|
22
|
+
private createProgram;
|
|
23
|
+
private compile;
|
|
24
|
+
}
|
|
25
|
+
export declare const SHADOW_BIAS = 0.0018;
|
|
26
|
+
//# sourceMappingURL=WebGL2ShadowMap.d.ts.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare class WebGPUBundleCache {
|
|
2
|
+
private readonly device;
|
|
3
|
+
private readonly format;
|
|
4
|
+
private key;
|
|
5
|
+
private bundle;
|
|
6
|
+
private recreations;
|
|
7
|
+
constructor(device: GPUDevice, format: GPUTextureFormat);
|
|
8
|
+
get(key: string, record: (encoder: GPURenderBundleEncoder) => void): GPURenderBundle;
|
|
9
|
+
get current(): GPURenderBundle | null;
|
|
10
|
+
get bundleRecreations(): number;
|
|
11
|
+
invalidate(): void;
|
|
12
|
+
dispose(): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=WebGPUBundleCache.d.ts.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export type ICEWebGPUAccelerationTier = 'baseline' | 'storage' | 'gpu-driven';
|
|
2
|
+
export declare const WEBGPU_STORAGE_DEFAULT = false;
|
|
3
|
+
export declare const WEBGPU_GPU_DRIVEN_DEFAULT = false;
|
|
4
|
+
export declare const WEBGPU_INSTANCE_VISIBILITY_THRESHOLD = 1024;
|
|
5
|
+
export type ICEWebGPUOptimizationStats = Readonly<{
|
|
6
|
+
tier: ICEWebGPUAccelerationTier;
|
|
7
|
+
selectionMaskActive: boolean;
|
|
8
|
+
bundleActive: boolean;
|
|
9
|
+
storageActive: boolean;
|
|
10
|
+
visibilityActive: boolean;
|
|
11
|
+
instanceUploadBytes: number;
|
|
12
|
+
bundleRecreations: number;
|
|
13
|
+
timestampUnavailableReason?: string;
|
|
14
|
+
}>;
|
|
15
|
+
export type ICEWebGPUAcceleration = Readonly<{
|
|
16
|
+
tier: ICEWebGPUAccelerationTier;
|
|
17
|
+
storage: boolean;
|
|
18
|
+
visibility: boolean;
|
|
19
|
+
maxStorageBufferBindingSize: number;
|
|
20
|
+
minStorageBufferOffsetAlignment: number;
|
|
21
|
+
}>;
|
|
22
|
+
export declare function detectWebGPUAcceleration(device: GPUDevice): ICEWebGPUAcceleration;
|
|
23
|
+
//# sourceMappingURL=WebGPUCapabilities.d.ts.map
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export type ICEWebGPUDrawUniform = Readonly<{
|
|
2
|
+
matrix: ArrayLike<number>;
|
|
3
|
+
color: readonly [number, number, number, number];
|
|
4
|
+
useVertexColor: boolean;
|
|
5
|
+
useInstancing: boolean;
|
|
6
|
+
useLighting?: boolean;
|
|
7
|
+
semanticHighlight?: number;
|
|
8
|
+
useSemantic?: boolean;
|
|
9
|
+
selectionBase: number;
|
|
10
|
+
useSelectionMask: boolean;
|
|
11
|
+
pageBase?: number;
|
|
12
|
+
useIndirect?: boolean;
|
|
13
|
+
}>;
|
|
14
|
+
export declare class WebGPUDrawStorage {
|
|
15
|
+
private readonly minimumCapacity;
|
|
16
|
+
private uniformBuffer;
|
|
17
|
+
private capacity;
|
|
18
|
+
private generationValue;
|
|
19
|
+
private count;
|
|
20
|
+
constructor(minimumCapacity?: number);
|
|
21
|
+
begin(requiredDraws: number): void;
|
|
22
|
+
append(draw: ICEWebGPUDrawUniform): number;
|
|
23
|
+
get uniformData(): Float32Array;
|
|
24
|
+
get drawCount(): number;
|
|
25
|
+
get generation(): number;
|
|
26
|
+
private ensureCapacity;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=WebGPUDrawStorage.d.ts.map
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { type ICEGeometry, type ICEGeometryBufferUpdate } from '../core/index.js';
|
|
2
|
+
export interface WebGPUGeometryEntry {
|
|
3
|
+
geometry: ICEGeometry;
|
|
4
|
+
readonly geometryId: string;
|
|
5
|
+
readonly attributeDigest: string;
|
|
6
|
+
readonly topologyDigest: string;
|
|
7
|
+
readonly vertexBuffer: GPUBuffer;
|
|
8
|
+
readonly triangleIndexBuffer: GPUBuffer;
|
|
9
|
+
readonly edgeIndexBuffer: GPUBuffer | null;
|
|
10
|
+
readonly semanticBuffer: GPUBuffer | null;
|
|
11
|
+
readonly triangleCount: number;
|
|
12
|
+
readonly edgeCount: number;
|
|
13
|
+
readonly indexFormat: GPUIndexFormat;
|
|
14
|
+
readonly vertexCount: number;
|
|
15
|
+
readonly bytes: number;
|
|
16
|
+
lastUsedFrame: number;
|
|
17
|
+
}
|
|
18
|
+
export interface WebGPUGeometryCacheOptions {
|
|
19
|
+
readonly device: GPUDevice;
|
|
20
|
+
readonly inactiveGraceFrames?: number;
|
|
21
|
+
readonly maxBytes?: number;
|
|
22
|
+
}
|
|
23
|
+
export declare class WebGPUGeometryCache {
|
|
24
|
+
private readonly device;
|
|
25
|
+
private readonly entries;
|
|
26
|
+
private active;
|
|
27
|
+
private readonly pinned;
|
|
28
|
+
private readonly objectKeys;
|
|
29
|
+
private readonly legacyKeys;
|
|
30
|
+
private objectKeySequence;
|
|
31
|
+
private readonly inactiveGraceFrames;
|
|
32
|
+
private readonly maxBytes;
|
|
33
|
+
private uploads;
|
|
34
|
+
private updatedBytes;
|
|
35
|
+
private evictions;
|
|
36
|
+
private frameId;
|
|
37
|
+
private resourceGeneration;
|
|
38
|
+
constructor(options: WebGPUGeometryCacheOptions);
|
|
39
|
+
retain(geometry: ICEGeometry): WebGPUGeometryEntry;
|
|
40
|
+
private createEntry;
|
|
41
|
+
pin(geometry: ICEGeometry, update?: ICEGeometryBufferUpdate): WebGPUGeometryEntry;
|
|
42
|
+
unpin(geometry: ICEGeometry): void;
|
|
43
|
+
beginFrame(): void;
|
|
44
|
+
endFrame(): void;
|
|
45
|
+
clear(): void;
|
|
46
|
+
dispose(): void;
|
|
47
|
+
get totalBytes(): number;
|
|
48
|
+
get uploadCount(): number;
|
|
49
|
+
get updateBytes(): number;
|
|
50
|
+
get evictionCount(): number;
|
|
51
|
+
get generation(): number;
|
|
52
|
+
private enforceBudget;
|
|
53
|
+
private deleteEntry;
|
|
54
|
+
private applyPositionUpdate;
|
|
55
|
+
private canReuse;
|
|
56
|
+
private sameTopology;
|
|
57
|
+
private keyFor;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=WebGPUGeometryCache.d.ts.map
|