soonspacejs 3.0.0-alpha.5 → 3.0.0-alpha.8

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "soonspacejs",
3
- "version": "3.0.0-alpha.5",
3
+ "version": "3.0.0-alpha.8",
4
4
  "homepage": "https://www.xwbuilders.com/soonspacejs/",
5
5
  "description": "SoonSpace.js 3.0 alpha",
6
6
  "module": "./dist/index.esm.js",
@@ -0,0 +1,15 @@
1
+ /** Raw HTTP model bytes only. Runtime leases / GPU graphs are never persisted. */
2
+ export declare class ModelBufferCache {
3
+ private readonly store;
4
+ private readonly enabled;
5
+ constructor(store?: LocalForage, enabled?: () => boolean);
6
+ load(url: string, init: {
7
+ headers: Headers;
8
+ credentials: RequestCredentials;
9
+ signal?: AbortSignal;
10
+ redirect?: RequestRedirect;
11
+ }): Promise<ArrayBuffer>;
12
+ private key;
13
+ private mutate;
14
+ clear(): Promise<void>;
15
+ }
@@ -1,5 +1,6 @@
1
1
  import { BufferGeometry, Material, Matrix4, Texture } from 'three';
2
2
  import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
3
+ import { ModelBufferCache } from '../Cache/ModelBufferCache';
3
4
  export interface ModelPart {
4
5
  /** Omitted for triangle meshes. Basic line segments share the Entity lifecycle. */
5
6
  kind?: 'mesh' | 'line-segments';
@@ -63,8 +64,9 @@ export declare class ModelResources {
63
64
  private pending;
64
65
  private urls;
65
66
  private gltfLoader;
67
+ private bufferCache;
66
68
  /** Borrow a host-configured loader; its decoder workers remain host-owned. */
67
- setGLTFLoader(loader: GLTFLoader): void;
69
+ setGLTFLoader(loader: GLTFLoader, bufferCache?: ModelBufferCache): void;
68
70
  readonly materials: {
69
71
  register: (material: Material, options: {
70
72
  ownership: "transfer";
@@ -0,0 +1,44 @@
1
+ import { Object3D, Texture } from 'three';
2
+ import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
3
+ interface TextureRenderer {
4
+ initTexture(texture: Texture): void;
5
+ domElement?: EventTarget;
6
+ getContext?: () => {
7
+ isContextLost(): boolean;
8
+ };
9
+ }
10
+ export declare const texturePreloaderFor: (loader: GLTFLoader) => TexturePreloader | undefined;
11
+ export declare const bindTexturePreloader: (loader: GLTFLoader, queue: TexturePreloader) => void;
12
+ /** Renderer-owned, frame-budgeted preparation for newly decoded GLTF roots. */
13
+ export declare class TexturePreloader {
14
+ private readonly renderer;
15
+ private readonly budgetMs;
16
+ private entries;
17
+ private jobs;
18
+ private owners;
19
+ private frame;
20
+ private fallback;
21
+ private frameGeneration;
22
+ private contextLost;
23
+ private disposed;
24
+ readonly stats: {
25
+ uploads: number;
26
+ reused: number;
27
+ cancelled: number;
28
+ failed: number;
29
+ frames: number;
30
+ totalMs: number;
31
+ maxUploadMs: number;
32
+ maxFrameMs: number;
33
+ };
34
+ constructor(renderer: TextureRenderer, budgetMs?: number);
35
+ private onContextLost;
36
+ private onContextRestored;
37
+ private cancelFrame;
38
+ prepare(root: Object3D, signal?: AbortSignal, managerSignal?: AbortSignal): Promise<void>;
39
+ private schedule;
40
+ private pump;
41
+ private cancel;
42
+ dispose(): void;
43
+ }
44
+ export {};
@@ -1,12 +1,15 @@
1
1
  import { GLTF, GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
2
+ import { ModelBufferCache } from '../Cache/ModelBufferCache';
2
3
  interface RequestScope {
3
4
  rootURL: string;
4
5
  headers: HeadersInit;
5
6
  signal?: AbortSignal;
7
+ bufferCache?: ModelBufferCache;
6
8
  }
7
9
  /** Each standard GLTFLoader parse constructs its parser synchronously, before any await. */
8
10
  export declare function parseScopedGLTF(loader: GLTFLoader, data: ArrayBuffer, path: string, scope: RequestScope): Promise<{
9
11
  gltf: GLTF;
10
12
  dependencyError?: unknown;
13
+ prepareTextures: () => Promise<void>;
11
14
  }>;
12
15
  export {};
@@ -9,6 +9,7 @@ import { Group, GroupInfo, Model, ModelInfo } from '../Library';
9
9
  import { CloneModelInfo } from '../Interface';
10
10
  import { ObjectsCache } from '../Cache';
11
11
  import { default as DefaultManage } from './DefaultManage';
12
+ import { ModelBufferCache } from '../Cache/ModelBufferCache';
12
13
  declare class ModelManage extends DefaultManage {
13
14
  readonly viewport: Viewport;
14
15
  readonly cache: ObjectsCache;
@@ -24,6 +25,8 @@ declare class ModelManage extends DefaultManage {
24
25
  */
25
26
  store: typeof localforage;
26
27
  cacheStore: typeof localforage;
28
+ readonly bufferCache: ModelBufferCache;
29
+ private texturePreloader?;
27
30
  loadingManager: LoadingManager;
28
31
  gltfLoader: GLTFLoader;
29
32
  fbxLoader: FBXLoader;
package/types/index.d.ts CHANGED
@@ -3487,6 +3487,22 @@ export declare interface ModelAnimationFindFunc {
3487
3487
  (animation: AnimationClip, index: number, animations: AnimationClip[]): boolean;
3488
3488
  }
3489
3489
 
3490
+ /** Raw HTTP model bytes only. Runtime leases / GPU graphs are never persisted. */
3491
+ declare class ModelBufferCache {
3492
+ private readonly store;
3493
+ private readonly enabled;
3494
+ constructor(store?: LocalForage, enabled?: () => boolean);
3495
+ load(url: string, init: {
3496
+ headers: Headers;
3497
+ credentials: RequestCredentials;
3498
+ signal?: AbortSignal;
3499
+ redirect?: RequestRedirect;
3500
+ }): Promise<ArrayBuffer>;
3501
+ private key;
3502
+ private mutate;
3503
+ clear(): Promise<void>;
3504
+ }
3505
+
3490
3506
  export declare interface ModelEventParams {
3491
3507
  target: Model;
3492
3508
  currentTarget: Mesh;
@@ -3544,6 +3560,8 @@ declare class ModelManage extends DefaultManage {
3544
3560
  */
3545
3561
  store: typeof default_2;
3546
3562
  cacheStore: typeof default_2;
3563
+ readonly bufferCache: ModelBufferCache;
3564
+ private texturePreloader?;
3547
3565
  loadingManager: LoadingManager;
3548
3566
  gltfLoader: GLTFLoader;
3549
3567
  fbxLoader: FBXLoader;
@@ -3653,8 +3671,9 @@ export declare class ModelResources {
3653
3671
  private pending;
3654
3672
  private urls;
3655
3673
  private gltfLoader;
3674
+ private bufferCache;
3656
3675
  /** Borrow a host-configured loader; its decoder workers remain host-owned. */
3657
- setGLTFLoader(loader: GLTFLoader): void;
3676
+ setGLTFLoader(loader: GLTFLoader, bufferCache?: ModelBufferCache): void;
3658
3677
  readonly materials: {
3659
3678
  register: (material: Material, options: {
3660
3679
  ownership: "transfer";