ice3 0.1.1 → 0.2.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.
Files changed (35) hide show
  1. package/README.md +4 -0
  2. package/dist/_types/core/scene/ICENode.d.ts +6 -1
  3. package/dist/_types/renderer/Color.d.ts +2 -0
  4. package/dist/_types/renderer/FakeRendererBackend.d.ts +1 -1
  5. package/dist/_types/renderer/InstanceBatch.d.ts +14 -0
  6. package/dist/_types/renderer/RenderBatch.d.ts +17 -0
  7. package/dist/_types/renderer/Renderables.d.ts +9 -0
  8. package/dist/_types/renderer/RendererProfiler.d.ts +19 -0
  9. package/dist/_types/renderer/RendererSelection.d.ts +12 -0
  10. package/dist/_types/renderer/WebGL2GeometryBatch.d.ts +2 -9
  11. package/dist/_types/renderer/WebGL2InstanceBatch.d.ts +3 -14
  12. package/dist/_types/renderer/WebGL2RenderBatch.d.ts +1 -16
  13. package/dist/_types/renderer/WebGL2RendererBackend.d.ts +9 -2
  14. package/dist/_types/renderer/WebGPUBundleCache.d.ts +14 -0
  15. package/dist/_types/renderer/WebGPUCapabilities.d.ts +23 -0
  16. package/dist/_types/renderer/WebGPUDrawStorage.d.ts +27 -0
  17. package/dist/_types/renderer/WebGPUGeometryCache.d.ts +45 -0
  18. package/dist/_types/renderer/WebGPUInstanceCache.d.ts +24 -0
  19. package/dist/_types/renderer/WebGPUInstanceStorage.d.ts +39 -0
  20. package/dist/_types/renderer/WebGPUPicker.d.ts +30 -0
  21. package/dist/_types/renderer/WebGPUProbe.d.ts +21 -0
  22. package/dist/_types/renderer/WebGPURenderPipeline.d.ts +22 -0
  23. package/dist/_types/renderer/WebGPURenderPlan.d.ts +23 -0
  24. package/dist/_types/renderer/WebGPURendererBackend.d.ts +111 -0
  25. package/dist/_types/renderer/WebGPUResources.d.ts +9 -0
  26. package/dist/_types/renderer/WebGPUSelectionMask.d.ts +18 -0
  27. package/dist/_types/renderer/WebGPUTimestampProfiler.d.ts +16 -0
  28. package/dist/_types/renderer/WebGPUVisibility.d.ts +27 -0
  29. package/dist/_types/renderer/index.d.ts +21 -7
  30. package/dist/_types/renderer/types.d.ts +15 -3
  31. package/dist/_types/runtime/ICE3.d.ts +14 -6
  32. package/dist/index.d.ts +1 -1
  33. package/dist/index.js +3204 -143
  34. package/dist/index.js.map +4 -4
  35. package/package.json +2 -1
@@ -0,0 +1,16 @@
1
+ export declare class WebGPUTimestampProfiler {
2
+ private readonly device;
3
+ private readonly slots;
4
+ private readonly pending;
5
+ private reason;
6
+ private disposed;
7
+ constructor(device: GPUDevice, slotCount?: number);
8
+ get unavailableReason(): string | undefined;
9
+ querySetFor(frameId: number): GPUQuerySet;
10
+ resolveFrame(encoder: GPUCommandEncoder, frameId: number): void;
11
+ drain(): Promise<readonly number[]>;
12
+ dispose(): void;
13
+ private slotFor;
14
+ private slotIndex;
15
+ }
16
+ //# sourceMappingURL=WebGPUTimestampProfiler.d.ts.map
@@ -0,0 +1,27 @@
1
+ import type { ICEGeometryBounds } from '../core/index.js';
2
+ import type { ICEInstanceStoragePage } from './WebGPUInstanceStorage.js';
3
+ export declare function createIndirectArguments(indexCount: number, firstIndex: number, baseVertex: number): Uint32Array | undefined;
4
+ export declare function isAabbVisible(matrix: ArrayLike<number>, bounds: ICEGeometryBounds, viewProjection: ArrayLike<number>): boolean;
5
+ export type ICEVisibilityEntry = Readonly<{
6
+ readonly visibleBuffer: GPUBuffer;
7
+ readonly indirectBuffer: GPUBuffer;
8
+ readonly instanceCount: number;
9
+ }>;
10
+ export declare class WebGPUVisibilityEncoder {
11
+ private readonly device;
12
+ readonly bindGroupLayout: GPUBindGroupLayout;
13
+ readonly pipeline: GPUComputePipeline;
14
+ private readonly entries;
15
+ private constructor();
16
+ static create(device: GPUDevice): Promise<WebGPUVisibilityEncoder>;
17
+ retain(page: ICEInstanceStoragePage, indexCount: number): ICEVisibilityEntry;
18
+ encode(encoder: GPUCommandEncoder, entry: ICEVisibilityEntry, page: ICEInstanceStoragePage, uniformBuffer: GPUBuffer, uniformOffset: number): void;
19
+ readStats(entry: ICEVisibilityEntry, page: ICEInstanceStoragePage): Promise<Readonly<{
20
+ visibleInstances: number;
21
+ culledInstances: number;
22
+ dispatchCount: number;
23
+ }>>;
24
+ dispose(): void;
25
+ private destroy;
26
+ }
27
+ //# sourceMappingURL=WebGPUVisibility.d.ts.map
@@ -1,12 +1,26 @@
1
1
  export { FakeRendererBackend } from './FakeRendererBackend.js';
2
2
  export { WebGL2RendererBackend, colorToRgba, } from './WebGL2RendererBackend.js';
3
- export { collectRenderables } from './WebGL2GeometryBatch.js';
4
- export type { ICEGeometryRenderable } from './WebGL2GeometryBatch.js';
5
- export { collectInstanceBatches } from './WebGL2InstanceBatch.js';
6
- export type { ICEInstanceBatch } from './WebGL2InstanceBatch.js';
3
+ export { selectDefaultRendererBackend, selectRendererBackend, type ICERendererBackendSelection, type ICERendererFactories, } from './RendererSelection.js';
4
+ export { WebGPURendererBackend, type WebGPUDeviceContext, } from './WebGPURendererBackend.js';
5
+ export { probeWebGPU } from './WebGPUProbe.js';
6
+ export type { ICEWebGPUProbeFailureReason, ICEWebGPUProbeOptions, ICEWebGPUProbeResult, } from './WebGPUProbe.js';
7
+ export { WebGPUGeometryCache, type WebGPUGeometryCacheOptions, type WebGPUGeometryEntry, } from './WebGPUGeometryCache.js';
8
+ export { WebGPUInstanceCache, type WebGPUInstanceEntry, } from './WebGPUInstanceCache.js';
9
+ export { WebGPUDrawStorage, type ICEWebGPUDrawUniform, } from './WebGPUDrawStorage.js';
10
+ export { WebGPURenderPlanCache, type WebGPURenderPlan, } from './WebGPURenderPlan.js';
11
+ export { detectWebGPUAcceleration, WEBGPU_GPU_DRIVEN_DEFAULT, WEBGPU_INSTANCE_VISIBILITY_THRESHOLD, WEBGPU_STORAGE_DEFAULT, type ICEWebGPUAcceleration, type ICEWebGPUAccelerationTier, type ICEWebGPUOptimizationStats, } from './WebGPUCapabilities.js';
12
+ export { INSTANCE_RECORD_BYTES, WebGPUInstanceStorage, type ICEInstanceStorageEntry, type ICEInstanceStoragePage, type ICEInstanceStoragePagePlan, type WebGPUInstanceStorageOptions, } from './WebGPUInstanceStorage.js';
13
+ export { createIndirectArguments, isAabbVisible, WebGPUVisibilityEncoder, type ICEVisibilityEntry, } from './WebGPUVisibility.js';
14
+ export { WebGPUBundleCache } from './WebGPUBundleCache.js';
15
+ export { buildSelectionMask, WebGPUSelectionMaskBuffer, type ICESelectionMaskLayout, } from './WebGPUSelectionMask.js';
16
+ export { collectWebGPUPickIds, WebGPUPicker, } from './WebGPUPicker.js';
17
+ export { collectRenderables, selectionIdentity, type ICEGeometryRenderable, } from './Renderables.js';
18
+ export { collectInstanceBatches, type ICEInstanceBatch, } from './InstanceBatch.js';
7
19
  export { queueBatchGeneration } from './ICEWebGL2BatchGenerationUploader.js';
20
+ export type { ICEFrameStageProfile, } from './RendererProfiler.js';
21
+ export { RendererProfiler, } from './RendererProfiler.js';
22
+ export { WebGPUTimestampProfiler } from './WebGPUTimestampProfiler.js';
8
23
  export type { ICEBatchGenerationHandle, ICEBatchUploadBuffer, ICEBatchUploadOptions, } from './ICEWebGL2BatchGenerationUploader.js';
9
- export { collectRenderBatches } from './WebGL2RenderBatch.js';
10
- export type { ICERenderBatchDraw, ICERenderBatchNode, } from './WebGL2RenderBatch.js';
11
- export type { ICERendererBackend, ICERendererCapabilities, ICERendererStats, ICEFrame, ICEScreenPoint, ICEViewport, } from './types.js';
24
+ export { collectRenderBatches, semanticSelectionId, type ICERenderBatchDraw, type ICERenderBatchNode, } from './RenderBatch.js';
25
+ export type { ICERendererBackend, ICERendererCapabilities, ICERendererStats, ICEFrame, ICEScreenPoint, ICEViewport, ICE3RendererPreference, ICE3RendererSelection, ICEWebGPUOptimizationFailureReason, } from './types.js';
12
26
  //# sourceMappingURL=index.d.ts.map
@@ -1,10 +1,20 @@
1
- import type { ICEGeometry, ICEPerspectiveCamera, ICEScene } from '../core/index.js';
1
+ import type { ICEGeometry, ICEEngineError, ICEPerspectiveCamera, ICEScene } from '../core/index.js';
2
2
  export type ICEViewport = {
3
3
  readonly x: number;
4
4
  readonly y: number;
5
5
  readonly width: number;
6
6
  readonly height: number;
7
7
  };
8
+ export type ICEWebGPUOptimizationFailureReason = 'limit-too-low' | 'pipeline-failed' | 'resource-failed' | 'runtime-failed' | 'threshold-not-met';
9
+ export type ICE3RendererPreference = 'auto' | 'webgpu' | 'webgl2';
10
+ export type ICE3RendererSelection = Readonly<{
11
+ requested: ICE3RendererPreference | 'custom';
12
+ selected: 'webgl2' | 'webgpu' | 'fake';
13
+ fallback: boolean;
14
+ experimental: boolean;
15
+ probeDurationMs?: number;
16
+ fallbackReason?: import('./WebGPUProbe.js').ICEWebGPUProbeFailureReason;
17
+ }>;
8
18
  export type ICEScreenPoint = Readonly<{
9
19
  x: number;
10
20
  y: number;
@@ -18,7 +28,7 @@ export type ICEFrame = {
18
28
  readonly selection: readonly string[];
19
29
  };
20
30
  export interface ICERendererCapabilities {
21
- readonly backend: 'webgl2' | 'fake';
31
+ readonly backend: 'webgl2' | 'webgpu' | 'fake';
22
32
  readonly maxTextureSize: number;
23
33
  readonly picking: boolean;
24
34
  }
@@ -38,13 +48,15 @@ export interface ICERendererBackend {
38
48
  readonly canvas: HTMLCanvasElement;
39
49
  readonly onContextLost?: () => void;
40
50
  readonly onContextRestored?: () => void;
51
+ readonly onError?: (error: ICEEngineError) => void;
41
52
  }): void;
42
53
  resize(viewport: ICEViewport, dpr: number): void;
43
54
  setBackgroundColor?(color: string): void;
44
55
  prepareBatchGeometry?(geometry: ICEGeometry): void;
45
56
  releaseBatchGeometry?(geometry: ICEGeometry): void;
46
- pick?(frame: ICEFrame, point: ICEScreenPoint): string | undefined;
57
+ pick?(frame: ICEFrame, point: ICEScreenPoint): Promise<string | undefined>;
47
58
  render(frame: ICEFrame): void;
59
+ finish?(): Promise<void>;
48
60
  capture?(): Promise<Blob>;
49
61
  dispose(): void;
50
62
  }
@@ -1,5 +1,5 @@
1
1
  import { ICEEventDispatcher, ICEPerspectiveCamera, ICEScene, type ICEDiagnostic, type ICEGeometry, type ICENode } from '../core/index.js';
2
- import { type ICERendererBackend, type ICEScreenPoint, type ICEViewport } from '../renderer/index.js';
2
+ import { type ICE3RendererPreference, type ICE3RendererSelection, type ICERendererBackend, type ICEScreenPoint, type ICEViewport } from '../renderer/index.js';
3
3
  import { ICE2DLayer } from './layer/ICE2DLayer.js';
4
4
  import { type ICEProjectedPoint } from './ICEProjection.js';
5
5
  import { type ICERenderScheduler } from './ICERenderScheduler.js';
@@ -7,6 +7,7 @@ import type { ICEVector3Tuple } from '../core/index.js';
7
7
  import { type ICERay, type ICESceneItem, type ICESceneQuery } from './query/ICESceneQuery.js';
8
8
  export type ICE3Options = {
9
9
  readonly backend?: ICERendererBackend;
10
+ readonly renderer?: ICE3RendererPreference;
10
11
  readonly scheduler?: ICERenderScheduler;
11
12
  };
12
13
  export type ICEEngineDiagnostics = {
@@ -14,10 +15,11 @@ export type ICEEngineDiagnostics = {
14
15
  readonly fps: number;
15
16
  readonly cpuFrameTimeMs: number;
16
17
  readonly backend: Readonly<{
17
- backend: 'webgl2' | 'fake';
18
+ backend: 'webgl2' | 'webgpu' | 'fake';
18
19
  maxTextureSize: number;
19
20
  picking: boolean;
20
21
  }>;
22
+ readonly rendererSelection: Readonly<ICE3RendererSelection>;
21
23
  readonly nodeCount: number;
22
24
  readonly layerCount: number;
23
25
  readonly labelCount: number;
@@ -53,7 +55,9 @@ export type ICEEngineDiagnostics = {
53
55
  readonly lastDiagnostic?: Readonly<ICEDiagnostic>;
54
56
  };
55
57
  export declare class ICE3 extends ICEEventDispatcher {
56
- private readonly backend;
58
+ private backend;
59
+ private readonly rendererPreference;
60
+ private rendererSelection;
57
61
  private readonly scheduler;
58
62
  private readonly interaction;
59
63
  private readonly layers;
@@ -82,10 +86,13 @@ export declare class ICE3 extends ICEEventDispatcher {
82
86
  private readonly pointerGestures;
83
87
  private lastDiagnostic;
84
88
  private instancingFallbackReported;
89
+ private pickGeneration;
85
90
  private readonly removeInputListeners;
86
91
  private readonly handleWindowResize;
87
92
  constructor(options?: ICE3Options);
88
93
  init(target: string | HTMLElement): this;
94
+ initAsync(target: string | HTMLElement): Promise<this>;
95
+ private initializeWithBackend;
89
96
  setScene(scene: ICEScene): this;
90
97
  setCamera(camera: ICEPerspectiveCamera): this;
91
98
  setBackgroundColor(color: string): this;
@@ -102,10 +109,11 @@ export declare class ICE3 extends ICEEventDispatcher {
102
109
  findBySelectionId(selectionId: string): ICENode | undefined;
103
110
  raycast(ray: ICERay): ICESceneItem | undefined;
104
111
  setSelection(ids: readonly string[]): this;
105
- pick(point: ICEScreenPoint): ICENode | undefined;
106
- pickItem(point: ICEScreenPoint): {
112
+ pick(point: ICEScreenPoint): Promise<ICENode | undefined>;
113
+ pickItem(point: ICEScreenPoint): Promise<{
107
114
  readonly item?: ICESceneItem;
108
- };
115
+ }>;
116
+ capture(): Promise<Blob>;
109
117
  getDiagnostics(): Readonly<ICEEngineDiagnostics>;
110
118
  destroy(): void;
111
119
  resize(): this;
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  export { ICEBasicMaterial, ICEBoxGeometry, ICEIndexedGeometry, ICEEngineError, ICEAssetLoader, ICETilesetHandle, ICETilesetLoader, ICELabel, ICEMesh, ICENode, ICEOrbitController, ICEPerspectiveCamera, ICEScene, ICEScreenLayer, ICETypeRegistry, ICEWorldLayer, ICE3, deserializeScene, serializeScene, } from './_types/runtime/index.js';
2
- export type { ICEDeserializedScene, ICEDiagnostic, ICEDiagnosticSeverity, ICEEngineDiagnostics, ICEInputEvent, ICEInputTarget, ICEKeyboardInputEvent, ICEProjectedPoint, ICEAssetHandle, ICEAssetLoaderOptions, ICEAssetLoadOptions, ICETilesetEvent, ICETilesetLoaderOptions, ICETilesetOpenOptions, ICETilesetStats, ICETilesetTileState, ICEPreparedContract, ICEPreparedStats, ICERenderBatchingOptions, ICESerializedScene, ICEGeometry, ICEGeometryBounds, ICEIndexedGeometryOptions, ICEMatrix4Tuple, ICEPickOutcome, } from './_types/runtime/index.js';
2
+ export type { ICEDeserializedScene, ICEDiagnostic, ICEDiagnosticSeverity, ICEEngineDiagnostics, ICE3Options, ICE3RendererPreference, ICE3RendererSelection, ICEInputEvent, ICEInputTarget, ICEKeyboardInputEvent, ICEProjectedPoint, ICEAssetHandle, ICEAssetLoaderOptions, ICEAssetLoadOptions, ICETilesetEvent, ICETilesetLoaderOptions, ICETilesetOpenOptions, ICETilesetStats, ICETilesetTileState, ICEPreparedContract, ICEPreparedStats, ICERenderBatchingOptions, ICESerializedScene, ICEGeometry, ICEGeometryBounds, ICEIndexedGeometryOptions, ICEMatrix4Tuple, ICEPickOutcome, } from './_types/runtime/index.js';
3
3
  //# sourceMappingURL=index.d.ts.map