@headless-three/renderer 0.1.8 → 0.1.10
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 +41 -290
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/scene.d.ts +28 -0
- package/dist/scene.d.ts.map +1 -1
- package/dist/scene.js +151 -11
- package/dist/scene.js.map +1 -1
- package/dist/types.d.ts +3 -0
- package/dist/types.d.ts.map +1 -1
- package/native.d.ts +6 -0
- package/native.js +52 -52
- package/package.json +12 -6
package/dist/scene.d.ts
CHANGED
|
@@ -19,6 +19,7 @@ export interface SceneExtractionCache {
|
|
|
19
19
|
instancedNormalExpansions: WeakMap<ThreeBufferGeometryLike, Map<string, CachedInstancedNormalExpansion>>;
|
|
20
20
|
instancedUvExpansions: WeakMap<ThreeBufferGeometryLike, Map<string, CachedInstancedUvExpansion>>;
|
|
21
21
|
instancedColorExpansions: WeakMap<ThreeBufferGeometryLike, Map<string, CachedInstancedColorExpansion>>;
|
|
22
|
+
indexRanges: WeakMap<ThreeBufferGeometryLike, Map<string, CachedIndexRangeExpansion>>;
|
|
22
23
|
batchedGeometryViews: WeakMap<ThreeBufferGeometryLike, Map<string, CachedBatchedGeometryView>>;
|
|
23
24
|
dashedLines: WeakMap<ThreeBufferGeometryLike, Map<string, CachedDashedLineExpansion>>;
|
|
24
25
|
instancedDashedLines: WeakMap<ThreeBufferGeometryLike, Map<string, CachedInstancedDashedLineExpansion>>;
|
|
@@ -29,6 +30,20 @@ export interface SceneExtractionCache {
|
|
|
29
30
|
materialScalarFeatures: MaterialScalarFeatureExtractionCache;
|
|
30
31
|
pointBillboards: WeakMap<ThreeObject3DLike, Map<string, CachedPointBillboardExpansion>>;
|
|
31
32
|
spriteBillboards: WeakMap<ThreeObject3DLike, CachedSpriteBillboardExpansion>;
|
|
33
|
+
nativeMeshPayloads: NativeMeshPayloadCache;
|
|
34
|
+
}
|
|
35
|
+
interface NativeMeshPayloadCache {
|
|
36
|
+
objectIds: WeakMap<object, number>;
|
|
37
|
+
payloads: Map<string, CachedNativeMeshPayload>;
|
|
38
|
+
pending: Set<string>;
|
|
39
|
+
nextObjectId: number;
|
|
40
|
+
nextPayloadId: number;
|
|
41
|
+
}
|
|
42
|
+
interface CachedNativeMeshPayload {
|
|
43
|
+
key: number;
|
|
44
|
+
vertexCount: number;
|
|
45
|
+
indexCount?: number;
|
|
46
|
+
ready: boolean;
|
|
32
47
|
}
|
|
33
48
|
interface CachedInstancedMeshInstances {
|
|
34
49
|
signature: InstancedMeshSignature;
|
|
@@ -50,6 +65,10 @@ interface CachedInstancedColorExpansion {
|
|
|
50
65
|
signature: InstancedColorExpansionSignature;
|
|
51
66
|
colors: number[];
|
|
52
67
|
}
|
|
68
|
+
interface CachedIndexRangeExpansion {
|
|
69
|
+
signature: IndexRangeExpansionSignature;
|
|
70
|
+
indices: number[];
|
|
71
|
+
}
|
|
53
72
|
interface CachedBatchedGeometryView {
|
|
54
73
|
signature: BatchedGeometryViewSignature;
|
|
55
74
|
view: ThreeBufferGeometryLike;
|
|
@@ -222,6 +241,14 @@ interface InstancedColorExpansionSignature {
|
|
|
222
241
|
color: AttributeSignature;
|
|
223
242
|
label: string;
|
|
224
243
|
}
|
|
244
|
+
interface IndexRangeExpansionSignature {
|
|
245
|
+
cacheable: boolean;
|
|
246
|
+
geometryVersion?: number;
|
|
247
|
+
sourceIndices: number[];
|
|
248
|
+
start: number;
|
|
249
|
+
count: number;
|
|
250
|
+
index: AttributeSignature;
|
|
251
|
+
}
|
|
225
252
|
interface AttributeSignature {
|
|
226
253
|
ref?: ThreeBufferAttributeLike;
|
|
227
254
|
version?: number;
|
|
@@ -248,5 +275,6 @@ interface RenderCallbackContext {
|
|
|
248
275
|
}
|
|
249
276
|
export declare function createSceneExtractionCache(): SceneExtractionCache;
|
|
250
277
|
export declare function flattenScene(scene: ThreeObject3DLike, camera?: ThreeCameraLike, viewportHeight?: number, globalClippingPlanes?: readonly NativeClippingPlane[], localClippingEnabled?: boolean, shadowMaterialMode?: ShadowMaterialMode, materialContext?: MaterialExtractionContext, sortOptions?: SceneSortOptions, overrideMaterial?: ThreeMaterialLike, cache?: SceneExtractionCache, callbackContext?: RenderCallbackContext): NativeSceneMesh[];
|
|
278
|
+
export declare function commitNativeMeshPayloadCache(cache: SceneExtractionCache): void;
|
|
251
279
|
export {};
|
|
252
280
|
//# sourceMappingURL=scene.d.ts.map
|
package/dist/scene.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene.d.ts","sourceRoot":"","sources":["../api/scene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,wBAAwB,EACxB,uBAAuB,EACvB,eAAe,EACf,iBAAiB,EAEjB,eAAe,EAEf,MAAM,EAEN,kBAAkB,EAEnB,MAAM,SAAS,CAAA;AAYhB,OAAO,EAQL,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAC3B,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,KAAK,kCAAkC,EACvC,KAAK,oCAAoC,EAC1C,MAAM,aAAa,CAAA;AAKpB,OAAO,EAEL,KAAK,mBAAmB,EAGzB,MAAM,YAAY,CAAA;AAcnB,UAAU,YAAY;IACpB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AASD,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,UAAU,CAAA;AASrD,UAAU,mBAAmB;IAC3B,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB;AA0CD,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,OAAO,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAA;IACvD,eAAe,EAAE,OAAO,CAAC,iBAAiB,EAAE,4BAA4B,CAAC,CAAA;IACzE,2BAA2B,EAAE,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC,MAAM,EAAE,gCAAgC,CAAC,CAAC,CAAA;IAC5G,yBAAyB,EAAE,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAC,CAAA;IACxG,qBAAqB,EAAE,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC,CAAA;IAChG,wBAAwB,EAAE,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC,CAAA;IACtG,oBAAoB,EAAE,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC,CAAA;IAC9F,WAAW,EAAE,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC,CAAA;IACrF,oBAAoB,EAAE,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC,MAAM,EAAE,kCAAkC,CAAC,CAAC,CAAA;IACvG,eAAe,EAAE,sBAAsB,CAAA;IACvC,cAAc,EAAE,4BAA4B,CAAA;IAC5C,aAAa,EAAE,2BAA2B,CAAA;IAC1C,oBAAoB,EAAE,kCAAkC,CAAA;IACxD,sBAAsB,EAAE,oCAAoC,CAAA;IAC5D,eAAe,EAAE,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC,CAAA;IACvF,gBAAgB,EAAE,OAAO,CAAC,iBAAiB,EAAE,8BAA8B,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"scene.d.ts","sourceRoot":"","sources":["../api/scene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,wBAAwB,EACxB,uBAAuB,EACvB,eAAe,EACf,iBAAiB,EAEjB,eAAe,EAEf,MAAM,EAEN,kBAAkB,EAEnB,MAAM,SAAS,CAAA;AAYhB,OAAO,EAQL,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAC3B,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,KAAK,kCAAkC,EACvC,KAAK,oCAAoC,EAC1C,MAAM,aAAa,CAAA;AAKpB,OAAO,EAEL,KAAK,mBAAmB,EAGzB,MAAM,YAAY,CAAA;AAcnB,UAAU,YAAY;IACpB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AASD,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,UAAU,CAAA;AASrD,UAAU,mBAAmB;IAC3B,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB;AA0CD,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,OAAO,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAA;IACvD,eAAe,EAAE,OAAO,CAAC,iBAAiB,EAAE,4BAA4B,CAAC,CAAA;IACzE,2BAA2B,EAAE,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC,MAAM,EAAE,gCAAgC,CAAC,CAAC,CAAA;IAC5G,yBAAyB,EAAE,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAC,CAAA;IACxG,qBAAqB,EAAE,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC,CAAA;IAChG,wBAAwB,EAAE,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC,CAAA;IACtG,WAAW,EAAE,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC,CAAA;IACrF,oBAAoB,EAAE,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC,CAAA;IAC9F,WAAW,EAAE,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC,CAAA;IACrF,oBAAoB,EAAE,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC,MAAM,EAAE,kCAAkC,CAAC,CAAC,CAAA;IACvG,eAAe,EAAE,sBAAsB,CAAA;IACvC,cAAc,EAAE,4BAA4B,CAAA;IAC5C,aAAa,EAAE,2BAA2B,CAAA;IAC1C,oBAAoB,EAAE,kCAAkC,CAAA;IACxD,sBAAsB,EAAE,oCAAoC,CAAA;IAC5D,eAAe,EAAE,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC,CAAA;IACvF,gBAAgB,EAAE,OAAO,CAAC,iBAAiB,EAAE,8BAA8B,CAAC,CAAA;IAC5E,kBAAkB,EAAE,sBAAsB,CAAA;CAC3C;AAED,UAAU,sBAAsB;IAC9B,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAA;IAC9C,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,UAAU,uBAAuB;IAC/B,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,OAAO,CAAA;CACf;AAOD,UAAU,4BAA4B;IACpC,SAAS,EAAE,sBAAsB,CAAA;IACjC,cAAc,EAAE,YAAY,EAAE,CAAA;CAC/B;AAED,UAAU,gCAAgC;IACxC,SAAS,EAAE,mCAAmC,CAAA;IAC9C,SAAS,EAAE,MAAM,EAAE,CAAA;CACpB;AAED,UAAU,8BAA8B;IACtC,SAAS,EAAE,iCAAiC,CAAA;IAC5C,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,UAAU,0BAA0B;IAClC,SAAS,EAAE,6BAA6B,CAAA;IACxC,GAAG,EAAE,MAAM,EAAE,CAAA;CACd;AAED,UAAU,6BAA6B;IACrC,SAAS,EAAE,gCAAgC,CAAA;IAC3C,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,UAAU,yBAAyB;IACjC,SAAS,EAAE,4BAA4B,CAAA;IACvC,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,UAAU,yBAAyB;IACjC,SAAS,EAAE,4BAA4B,CAAA;IACvC,IAAI,EAAE,uBAAuB,CAAA;CAC9B;AAED,UAAU,yBAAyB;IACjC,SAAS,EAAE,mBAAmB,CAAA;IAC9B,SAAS,EAAE,mBAAmB,CAAA;CAC/B;AAED,UAAU,kCAAkC;IAC1C,SAAS,EAAE,4BAA4B,CAAA;IACvC,SAAS,EAAE,mBAAmB,CAAA;CAC/B;AAED,UAAU,6BAA6B;IACrC,SAAS,EAAE,uBAAuB,CAAA;IAClC,SAAS,EAAE,uBAAuB,CAAA;CACnC;AAED,UAAU,8BAA8B;IACtC,SAAS,EAAE,wBAAwB,CAAA;IACnC,SAAS,EAAE,wBAAwB,CAAA;CACpC;AAED,UAAU,wBAAwB;IAChC,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,GAAG,EAAE,MAAM,EAAE,CAAA;CACd;AAED,UAAU,wBAAwB;IAChC,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IAC3B,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED,UAAU,uBAAuB;IAC/B,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,GAAG,EAAE,MAAM,EAAE,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,SAAS,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC3D;AAED,UAAU,uBAAuB;IAC/B,SAAS,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,sBAAsB,EAAE,MAAM,CAAA;IAC9B,uBAAuB,EAAE,kBAAkB,CAAA;IAC3C,sBAAsB,EAAE,kBAAkB,CAAA;IAC1C,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,gBAAgB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IACjC,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IAC3B,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,GAAG,EAAE,kBAAkB,CAAA;IACvB,IAAI,EAAE,kBAAkB,CAAA;IACxB,eAAe,EAAE,OAAO,CAAA;IACxB,YAAY,EAAE,kBAAkB,CAAA;IAChC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,UAAU,mBAAmB;IAC3B,SAAS,EAAE,OAAO,CAAA;IAClB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,KAAK,EAAE,kBAAkB,CAAA;IACzB,EAAE,EAAE,kBAAkB,CAAA;IACtB,GAAG,EAAE,kBAAkB,CAAA;IACvB,YAAY,EAAE,kBAAkB,CAAA;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;CACd;AAED,UAAU,4BAA4B;IACpC,SAAS,EAAE,OAAO,CAAA;IAClB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,KAAK,EAAE,kBAAkB,CAAA;IACzB,EAAE,EAAE,kBAAkB,CAAA;IACtB,GAAG,EAAE,kBAAkB,CAAA;IACvB,YAAY,EAAE,kBAAkB,CAAA;IAChC,YAAY,EAAE,kBAAkB,CAAA;IAChC,uBAAuB,EAAE,kBAAkB,CAAA;IAC3C,sBAAsB,EAAE,kBAAkB,CAAA;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;CACd;AAED,UAAU,kBAAkB;IAC1B,SAAS,EAAE,kBAAkB,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,UAAU,4BAA4B;IACpC,SAAS,EAAE,OAAO,CAAA;IAClB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,KAAK,EAAE,kBAAkB,CAAA;CAC1B;AA0CD,UAAU,sBAAsB;IAC9B,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,cAAc,EAAE,kBAAkB,CAAA;IAClC,aAAa,EAAE,kBAAkB,CAAA;CAClC;AAED,UAAU,mCAAmC;IAC3C,SAAS,EAAE,OAAO,CAAA;IAClB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,uBAAuB,EAAE,kBAAkB,CAAA;IAC3C,sBAAsB,EAAE,kBAAkB,CAAA;CAC3C;AAED,UAAU,iCAAiC;IACzC,SAAS,EAAE,OAAO,CAAA;IAClB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE,kBAAkB,CAAA;IAC1B,KAAK,EAAE,MAAM,CAAA;CACd;AAED,UAAU,6BAA6B;IACrC,SAAS,EAAE,OAAO,CAAA;IAClB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,OAAO,EAAE,kBAAkB,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,UAAU,gCAAgC;IACxC,SAAS,EAAE,OAAO,CAAA;IAClB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,kBAAkB,CAAA;IACzB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,UAAU,4BAA4B;IACpC,SAAS,EAAE,OAAO,CAAA;IAClB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,kBAAkB,CAAA;CAC1B;AAED,UAAU,kBAAkB;IAC1B,GAAG,CAAC,EAAE,wBAAwB,CAAA;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IACzB,SAAS,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,0BAA0B,CAAC,EAAE,OAAO,CAAA;IACpC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAsBD,UAAU,gBAAgB;IACxB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,UAAU,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAA;IACtC,eAAe,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAA;IAC3C,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,UAAU,qBAAqB;IAC7B,QAAQ,EAAE,OAAO,CAAA;IACjB,KAAK,EAAE,iBAAiB,CAAA;CACzB;AAWD,wBAAgB,0BAA0B,IAAI,oBAAoB,CA2BjE;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,iBAAiB,EACxB,MAAM,CAAC,EAAE,eAAe,EACxB,cAAc,SAAM,EACpB,oBAAoB,GAAE,SAAS,mBAAmB,EAAO,EACzD,oBAAoB,UAAO,EAC3B,kBAAkB,CAAC,EAAE,kBAAkB,EACvC,eAAe,GAAE,yBAA8B,EAC/C,WAAW,GAAE,gBAAqB,EAClC,gBAAgB,CAAC,EAAE,iBAAiB,EACpC,KAAK,CAAC,EAAE,oBAAoB,EAC5B,eAAe,CAAC,EAAE,qBAAqB,GACtC,eAAe,EAAE,CAanB;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI,CAO9E"}
|
package/dist/scene.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createSceneExtractionCache = createSceneExtractionCache;
|
|
4
4
|
exports.flattenScene = flattenScene;
|
|
5
|
+
exports.commitNativeMeshPayloadCache = commitNativeMeshPayloadCache;
|
|
5
6
|
const math_1 = require("./math");
|
|
6
7
|
const attributes_1 = require("./attributes");
|
|
7
8
|
const materials_1 = require("./materials");
|
|
@@ -35,6 +36,7 @@ function createSceneExtractionCache() {
|
|
|
35
36
|
instancedNormalExpansions: new WeakMap(),
|
|
36
37
|
instancedUvExpansions: new WeakMap(),
|
|
37
38
|
instancedColorExpansions: new WeakMap(),
|
|
39
|
+
indexRanges: new WeakMap(),
|
|
38
40
|
batchedGeometryViews: new WeakMap(),
|
|
39
41
|
dashedLines: new WeakMap(),
|
|
40
42
|
instancedDashedLines: new WeakMap(),
|
|
@@ -45,6 +47,13 @@ function createSceneExtractionCache() {
|
|
|
45
47
|
materialScalarFeatures: new WeakMap(),
|
|
46
48
|
pointBillboards: new WeakMap(),
|
|
47
49
|
spriteBillboards: new WeakMap(),
|
|
50
|
+
nativeMeshPayloads: {
|
|
51
|
+
objectIds: new WeakMap(),
|
|
52
|
+
payloads: new Map(),
|
|
53
|
+
pending: new Set(),
|
|
54
|
+
nextObjectId: 1,
|
|
55
|
+
nextPayloadId: 1,
|
|
56
|
+
},
|
|
48
57
|
};
|
|
49
58
|
}
|
|
50
59
|
function flattenScene(scene, camera, viewportHeight = 512, globalClippingPlanes = [], localClippingEnabled = true, shadowMaterialMode, materialContext = {}, sortOptions = {}, overrideMaterial, cache, callbackContext) {
|
|
@@ -55,7 +64,20 @@ function flattenScene(scene, camera, viewportHeight = 512, globalClippingPlanes
|
|
|
55
64
|
clipShadows: false,
|
|
56
65
|
};
|
|
57
66
|
visitObject(scene, camera, meshes, 0, viewportHeight, clippingContext, localClippingEnabled, shadowMaterialMode, materialContext, overrideMaterial, cache, callbackContext);
|
|
58
|
-
|
|
67
|
+
const nativeMeshes = nativeMeshesFromSortedFlattened(sortFlattenedMeshes(meshes, sortOptions));
|
|
68
|
+
if (cache) {
|
|
69
|
+
applyNativeMeshPayloadCache(nativeMeshes, cache.nativeMeshPayloads);
|
|
70
|
+
}
|
|
71
|
+
return nativeMeshes;
|
|
72
|
+
}
|
|
73
|
+
function commitNativeMeshPayloadCache(cache) {
|
|
74
|
+
const payloads = cache.nativeMeshPayloads;
|
|
75
|
+
for (const signature of payloads.pending) {
|
|
76
|
+
const cached = payloads.payloads.get(signature);
|
|
77
|
+
if (cached)
|
|
78
|
+
cached.ready = true;
|
|
79
|
+
}
|
|
80
|
+
payloads.pending.clear();
|
|
59
81
|
}
|
|
60
82
|
function visitObject(object, camera, meshes, groupOrder, viewportHeight, clippingContext, localClippingEnabled, shadowMaterialMode, materialContext, overrideMaterial, cache, callbackContext) {
|
|
61
83
|
if (!object)
|
|
@@ -177,7 +199,7 @@ function appendMesh(object, camera, meshes, groupOrder, clippingContext, localCl
|
|
|
177
199
|
const clipping = clippingState(clippingContext, material, localClippingEnabled);
|
|
178
200
|
const wireframe = isMeshWireframeMaterial(material);
|
|
179
201
|
if (index) {
|
|
180
|
-
const indices =
|
|
202
|
+
const indices = indexRangeWithCache(cache, geometry, index, group.start, group.count);
|
|
181
203
|
if (indices.length % 3 !== 0) {
|
|
182
204
|
throw new Error(`THREE.Mesh "${object.name || object.uuid || '<unnamed>'}" has a non-triangle index range`);
|
|
183
205
|
}
|
|
@@ -517,7 +539,7 @@ function appendShadowOnlyMeshGroup(object, camera, meshes, group, groupOrder, cl
|
|
|
517
539
|
const wireframe = isDepthDistanceWireframeMaterial(shadowMaterial);
|
|
518
540
|
const hiddenMainPass = shadowOnlyMainPassState();
|
|
519
541
|
if (index) {
|
|
520
|
-
const indices =
|
|
542
|
+
const indices = indexRangeWithCache(cache, object.geometry, index, group.start, group.count);
|
|
521
543
|
if (indices.length % 3 !== 0) {
|
|
522
544
|
throw new Error(`THREE.Mesh "${object.name || object.uuid || '<unnamed>'}" has a non-triangle index range`);
|
|
523
545
|
}
|
|
@@ -1643,6 +1665,84 @@ function nativeMeshesFromSortedFlattened(meshes) {
|
|
|
1643
1665
|
}
|
|
1644
1666
|
return nativeMeshes;
|
|
1645
1667
|
}
|
|
1668
|
+
const NativeMeshPayloadCacheLimit = 2048;
|
|
1669
|
+
function applyNativeMeshPayloadCache(meshes, cache) {
|
|
1670
|
+
for (const mesh of meshes) {
|
|
1671
|
+
const signature = nativeMeshPayloadSignature(mesh, cache);
|
|
1672
|
+
if (!signature)
|
|
1673
|
+
continue;
|
|
1674
|
+
let cached = cache.payloads.get(signature);
|
|
1675
|
+
if (!cached) {
|
|
1676
|
+
const positions = mesh.positions;
|
|
1677
|
+
cached = {
|
|
1678
|
+
key: cache.nextPayloadId++,
|
|
1679
|
+
vertexCount: positions.length / 3,
|
|
1680
|
+
indexCount: mesh.indices?.length,
|
|
1681
|
+
ready: false,
|
|
1682
|
+
};
|
|
1683
|
+
evictNativeMeshPayloads(cache);
|
|
1684
|
+
cache.payloads.set(signature, cached);
|
|
1685
|
+
}
|
|
1686
|
+
mesh.nativeMeshKey = cached.key;
|
|
1687
|
+
mesh.nativeVertexCount = cached.vertexCount;
|
|
1688
|
+
mesh.nativeIndexCount = cached.indexCount;
|
|
1689
|
+
if (cached.ready) {
|
|
1690
|
+
mesh.positions = [];
|
|
1691
|
+
delete mesh.indices;
|
|
1692
|
+
delete mesh.normals;
|
|
1693
|
+
delete mesh.colors;
|
|
1694
|
+
delete mesh.uvs;
|
|
1695
|
+
delete mesh.uvs2;
|
|
1696
|
+
}
|
|
1697
|
+
else {
|
|
1698
|
+
cache.pending.add(signature);
|
|
1699
|
+
}
|
|
1700
|
+
}
|
|
1701
|
+
}
|
|
1702
|
+
function nativeMeshPayloadSignature(mesh, cache) {
|
|
1703
|
+
if (!mesh.positions || mesh.positions.length === 0)
|
|
1704
|
+
return null;
|
|
1705
|
+
if (mesh.positions.length % 3 !== 0)
|
|
1706
|
+
return null;
|
|
1707
|
+
if (!nativeMeshPayloadCacheable(mesh))
|
|
1708
|
+
return null;
|
|
1709
|
+
return [
|
|
1710
|
+
'p', nativeMeshPayloadObjectId(cache, mesh.positions),
|
|
1711
|
+
'i', nativeMeshPayloadObjectId(cache, mesh.indices),
|
|
1712
|
+
'n', nativeMeshPayloadObjectId(cache, mesh.normals),
|
|
1713
|
+
'c', nativeMeshPayloadObjectId(cache, mesh.colors),
|
|
1714
|
+
'u', nativeMeshPayloadObjectId(cache, mesh.uvs),
|
|
1715
|
+
'v', nativeMeshPayloadObjectId(cache, mesh.uvs2),
|
|
1716
|
+
'flat', mesh.flatShading === true ? 1 : 0,
|
|
1717
|
+
'topology', mesh.topology ?? 'triangles',
|
|
1718
|
+
].join(':');
|
|
1719
|
+
}
|
|
1720
|
+
function nativeMeshPayloadCacheable(mesh) {
|
|
1721
|
+
return mesh.displacementMap == null
|
|
1722
|
+
&& mesh.normalMap == null
|
|
1723
|
+
&& mesh.bumpMap == null
|
|
1724
|
+
&& mesh.clearcoatNormalMap == null
|
|
1725
|
+
&& (mesh.anisotropy == null || mesh.anisotropy <= 0);
|
|
1726
|
+
}
|
|
1727
|
+
function nativeMeshPayloadObjectId(cache, value) {
|
|
1728
|
+
if (value == null)
|
|
1729
|
+
return 'none';
|
|
1730
|
+
let id = cache.objectIds.get(value);
|
|
1731
|
+
if (id === undefined) {
|
|
1732
|
+
id = cache.nextObjectId++;
|
|
1733
|
+
cache.objectIds.set(value, id);
|
|
1734
|
+
}
|
|
1735
|
+
return String(id);
|
|
1736
|
+
}
|
|
1737
|
+
function evictNativeMeshPayloads(cache) {
|
|
1738
|
+
while (cache.payloads.size >= NativeMeshPayloadCacheLimit) {
|
|
1739
|
+
const first = cache.payloads.keys().next();
|
|
1740
|
+
if (first.done)
|
|
1741
|
+
return;
|
|
1742
|
+
cache.payloads.delete(first.value);
|
|
1743
|
+
cache.pending.delete(first.value);
|
|
1744
|
+
}
|
|
1745
|
+
}
|
|
1646
1746
|
function sortInfoForObject(object, material, camera, sortIndex, groupOrder, transform, geometry, group, sortItemObject, sortItemZOverride) {
|
|
1647
1747
|
const renderOrder = renderOrderNumber(object.renderOrder, 'object.renderOrder', 0);
|
|
1648
1748
|
const z = camera ? projectedObjectZ(object, camera, transform) : 0;
|
|
@@ -2324,11 +2424,11 @@ function expandVec3ValuesForInstances(values, start, count, instanceCount, offse
|
|
|
2324
2424
|
return out;
|
|
2325
2425
|
}
|
|
2326
2426
|
function expandVec3ValuesForInstancesWithCache(cache, geometry, position, values, start, count, instanceCount, offsetAttribute, scaleAttribute) {
|
|
2327
|
-
if (
|
|
2427
|
+
if (!cache) {
|
|
2328
2428
|
return expandVec3ValuesForInstances(values, start, count, instanceCount, offsetAttribute, scaleAttribute);
|
|
2329
2429
|
}
|
|
2330
2430
|
const signature = instancedPositionExpansionSignature(geometry, position, values, start, count, instanceCount, offsetAttribute, scaleAttribute);
|
|
2331
|
-
if (!
|
|
2431
|
+
if (!signature.cacheable) {
|
|
2332
2432
|
return expandVec3ValuesForInstances(values, start, count, instanceCount, offsetAttribute, scaleAttribute);
|
|
2333
2433
|
}
|
|
2334
2434
|
const key = `${start}:${count}:${instanceCount}`;
|
|
@@ -2420,11 +2520,11 @@ function expandNormalValuesForInstances(attribute, values, start, count, instanc
|
|
|
2420
2520
|
return out;
|
|
2421
2521
|
}
|
|
2422
2522
|
function expandNormalValuesForInstancesWithCache(cache, geometry, attribute, values, start, count, instanceCount, label = 'geometry.attributes.normal') {
|
|
2423
|
-
if (
|
|
2523
|
+
if (!cache) {
|
|
2424
2524
|
return expandNormalValuesForInstances(attribute, values, start, count, instanceCount, label);
|
|
2425
2525
|
}
|
|
2426
2526
|
const signature = instancedNormalExpansionSignature(geometry, attribute, values, start, count, instanceCount, label);
|
|
2427
|
-
if (!
|
|
2527
|
+
if (!signature.cacheable) {
|
|
2428
2528
|
return expandNormalValuesForInstances(attribute, values, start, count, instanceCount, label);
|
|
2429
2529
|
}
|
|
2430
2530
|
const key = `${label}:${start}:${count}:${instanceCount}`;
|
|
@@ -2483,11 +2583,11 @@ function expandUvChannelForInstances(channel, start, count, instanceCount) {
|
|
|
2483
2583
|
return out;
|
|
2484
2584
|
}
|
|
2485
2585
|
function expandUvChannelForInstancesWithCache(cache, geometry, channel, start, count, instanceCount) {
|
|
2486
|
-
if (
|
|
2586
|
+
if (!cache) {
|
|
2487
2587
|
return expandUvChannelForInstances(channel, start, count, instanceCount);
|
|
2488
2588
|
}
|
|
2489
2589
|
const signature = instancedUvExpansionSignature(geometry, channel, start, count, instanceCount);
|
|
2490
|
-
if (!
|
|
2590
|
+
if (!signature.cacheable) {
|
|
2491
2591
|
return expandUvChannelForInstances(channel, start, count, instanceCount);
|
|
2492
2592
|
}
|
|
2493
2593
|
const key = `${channel.label}:${start}:${count}:${instanceCount}`;
|
|
@@ -2585,11 +2685,11 @@ function expandColorAttributeForInstances(attribute, materialColor, start, count
|
|
|
2585
2685
|
return out;
|
|
2586
2686
|
}
|
|
2587
2687
|
function expandColorAttributeForInstancesWithCache(cache, geometry, attribute, materialColor, start, count, instanceCount, label = 'geometry.attributes.color') {
|
|
2588
|
-
if (
|
|
2688
|
+
if (!cache) {
|
|
2589
2689
|
return expandColorAttributeForInstances(attribute, materialColor, start, count, instanceCount, label);
|
|
2590
2690
|
}
|
|
2591
2691
|
const signature = instancedColorExpansionSignature(geometry, attribute, materialColor, start, count, instanceCount, label);
|
|
2592
|
-
if (!
|
|
2692
|
+
if (!signature.cacheable) {
|
|
2593
2693
|
return expandColorAttributeForInstances(attribute, materialColor, start, count, instanceCount, label);
|
|
2594
2694
|
}
|
|
2595
2695
|
const key = `${label}:${start}:${count}:${instanceCount}`;
|
|
@@ -2630,6 +2730,46 @@ function sameInstancedColorExpansionSignature(a, b) {
|
|
|
2630
2730
|
&& sameAttributeSignature(a.color, b.color)
|
|
2631
2731
|
&& a.label === b.label;
|
|
2632
2732
|
}
|
|
2733
|
+
function indexRangeWithCache(cache, geometry, indices, start, count) {
|
|
2734
|
+
if (!cache)
|
|
2735
|
+
return indices.slice(start, start + count);
|
|
2736
|
+
const signature = indexRangeExpansionSignature(geometry, indices, start, count);
|
|
2737
|
+
if (!signature.cacheable)
|
|
2738
|
+
return indices.slice(start, start + count);
|
|
2739
|
+
const key = `${start}:${count}`;
|
|
2740
|
+
let geometryCache = cache.indexRanges.get(geometry);
|
|
2741
|
+
const cached = geometryCache?.get(key);
|
|
2742
|
+
if (cached && sameIndexRangeExpansionSignature(cached.signature, signature)) {
|
|
2743
|
+
return cached.indices;
|
|
2744
|
+
}
|
|
2745
|
+
const range = indices.slice(start, start + count);
|
|
2746
|
+
if (!geometryCache) {
|
|
2747
|
+
geometryCache = new Map();
|
|
2748
|
+
cache.indexRanges.set(geometry, geometryCache);
|
|
2749
|
+
}
|
|
2750
|
+
geometryCache.set(key, { signature, indices: range });
|
|
2751
|
+
return range;
|
|
2752
|
+
}
|
|
2753
|
+
function indexRangeExpansionSignature(geometry, indices, start, count) {
|
|
2754
|
+
const signature = {
|
|
2755
|
+
cacheable: true,
|
|
2756
|
+
geometryVersion: geometry.version,
|
|
2757
|
+
sourceIndices: indices,
|
|
2758
|
+
start,
|
|
2759
|
+
count,
|
|
2760
|
+
index: attributeSignature(geometry.index),
|
|
2761
|
+
};
|
|
2762
|
+
signature.cacheable = attributeSignatureCacheable(signature.index);
|
|
2763
|
+
return signature;
|
|
2764
|
+
}
|
|
2765
|
+
function sameIndexRangeExpansionSignature(a, b) {
|
|
2766
|
+
return a.cacheable === b.cacheable
|
|
2767
|
+
&& a.geometryVersion === b.geometryVersion
|
|
2768
|
+
&& a.sourceIndices === b.sourceIndices
|
|
2769
|
+
&& a.start === b.start
|
|
2770
|
+
&& a.count === b.count
|
|
2771
|
+
&& sameAttributeSignature(a.index, b.index);
|
|
2772
|
+
}
|
|
2633
2773
|
function expandIndicesForInstances(indices, vertexCount, instanceCount) {
|
|
2634
2774
|
if (instanceCount <= 1)
|
|
2635
2775
|
return indices;
|