@shapediver/viewer.rendering-engine.rendering-engine-threejs 3.16.6 → 3.16.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.
@@ -74,7 +74,7 @@ export declare class MaterialLoader implements ILoader {
74
74
  assignEnvironmentMapRotation(value: quat): void;
75
75
  assignPointSize(p: number): void;
76
76
  cacheSize(): number;
77
- createMaterial(type: GEOMETRY_MATERIAL_TYPE, incomingData: IMaterialAbstractData | GeometryData, materialData: IMaterialAbstractData | null, materialSettings?: MaterialSettings): MultiPointsMaterial | THREE.PointsMaterial | THREE.Material | THREE.LineBasicMaterial | THREE.MeshBasicMaterial;
77
+ createMaterial(type: GEOMETRY_MATERIAL_TYPE, incomingData: IMaterialAbstractData | GeometryData, materialData: IMaterialAbstractData | null, materialSettings?: MaterialSettings): THREE.Material | MultiPointsMaterial | THREE.PointsMaterial | THREE.MeshBasicMaterial | THREE.LineBasicMaterial;
78
78
  emptyMaterialCache(): void;
79
79
  getMaterialProperties(materialData: IMaterialAbstractData | null, type: GEOMETRY_MATERIAL_TYPE, materialSettings?: MaterialSettings): {
80
80
  properties: ThreeJsMaterialParameterTypes;
@@ -0,0 +1,58 @@
1
+ import { GeometryData, ITreeNode } from "@shapediver/viewer.shared.node-tree";
2
+ import * as THREE from "three";
3
+ import { RenderingEngine } from "../RenderingEngine";
4
+ /**
5
+ * Manages GPU-instanced meshes and their per-instance operations.
6
+ *
7
+ * Each group of primitives sharing the same geometry hash is represented by
8
+ * one or more THREE.InstancedMesh objects:
9
+ * - defaultMesh: contains all instances that have no active post-processing effect
10
+ * - effectMeshes: lazily-created meshes that contain instances which participate
11
+ * in a specific post-processing effect (outline, bloom, …)
12
+ *
13
+ * All InstancedMeshes are direct children of `instancedRoot`, which must be
14
+ * added to the THREE scene by the owner (RenderingEngine / SceneTreeManager).
15
+ */
16
+ export declare class InstanceGroupManager {
17
+ private readonly _renderingEngine;
18
+ private readonly _groups;
19
+ private readonly _nodeToHash;
20
+ readonly instancedRoot: THREE.Group;
21
+ constructor(_renderingEngine: RenderingEngine);
22
+ /**
23
+ * Register a node as part of an instanced group.
24
+ * Creates the InstancedMesh if this is the first node for the given hash.
25
+ * Returns the defaultMesh so callers can reference it.
26
+ */
27
+ addNode(node: ITreeNode, geometry: GeometryData, bufferGeometry: THREE.BufferGeometry, material: THREE.Material): THREE.InstancedMesh;
28
+ /**
29
+ * Unregister a node from its instance group.
30
+ * Uses swap-and-pop so the InstancedMesh never has gaps.
31
+ */
32
+ removeNode(node: ITreeNode): void;
33
+ /**
34
+ * Move a node's instance from the default mesh to a dedicated effect mesh.
35
+ * Creates the effect mesh lazily. Returns it so it can be added to the
36
+ * post-processing effect's selection set.
37
+ */
38
+ addToEffect(node: ITreeNode, effectKey: string): THREE.InstancedMesh | null;
39
+ /**
40
+ * Move a node's instance back from an effect mesh to the default mesh.
41
+ * Disposes the effect mesh if it becomes empty.
42
+ */
43
+ removeFromEffect(node: ITreeNode, effectKey: string): void;
44
+ /**
45
+ * Look up the tree node for a given InstancedMesh + instanceId.
46
+ * Used by the intersection engine.
47
+ */
48
+ findNodeByMeshAndIndex(mesh: THREE.InstancedMesh, instanceId: number): ITreeNode | undefined;
49
+ /** Returns true if the node participates in any instance group. */
50
+ isInstanced(nodeId: string): boolean;
51
+ /** Returns all active InstancedMeshes (default + effect) for a node. */
52
+ getMeshesForNode(nodeId: string): THREE.InstancedMesh[];
53
+ private _removeFromDefault;
54
+ private _addBackToDefault;
55
+ private _refreshNodeMatrix;
56
+ private _growMeshBuffers;
57
+ }
58
+ //# sourceMappingURL=InstanceGroupManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InstanceGroupManager.d.ts","sourceRoot":"","sources":["../../src/managers/InstanceGroupManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAE,SAAS,EAAC,MAAM,qCAAqC,CAAC;AAE5E,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAC,eAAe,EAAC,MAAM,oBAAoB,CAAC;AAoBnD;;;;;;;;;;;GAWG;AACH,qBAAa,oBAAoB;IAYpB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAT7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;IAEzD,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,KAAK,CAAqB;gBAM3B,gBAAgB,EAAE,eAAe;IAS9D;;;;OAIG;IACI,OAAO,CACb,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,YAAY,EACtB,cAAc,EAAE,KAAK,CAAC,cAAc,EACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ,GACtB,KAAK,CAAC,aAAa;IA0FtB;;;OAGG;IACI,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAyBxC;;;;OAIG;IACI,WAAW,CACjB,IAAI,EAAE,SAAS,EACf,SAAS,EAAE,MAAM,GACf,KAAK,CAAC,aAAa,GAAG,IAAI;IAsE7B;;;OAGG;IACI,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAgEjE;;;OAGG;IACI,sBAAsB,CAC5B,IAAI,EAAE,KAAK,CAAC,aAAa,EACzB,UAAU,EAAE,MAAM,GAChB,SAAS,GAAG,SAAS;IAOxB,mEAAmE;IAC5D,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAI3C,wEAAwE;IACjE,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,aAAa,EAAE;IAc9D,OAAO,CAAC,kBAAkB;IAkD1B,OAAO,CAAC,iBAAiB;IAsCzB,OAAO,CAAC,kBAAkB;IAgC1B,OAAO,CAAC,gBAAgB;CA0BxB"}
@@ -0,0 +1,372 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.InstanceGroupManager = void 0;
27
+ const viewer_shared_types_1 = require("@shapediver/viewer.shared.types");
28
+ const THREE = __importStar(require("three"));
29
+ /**
30
+ * Manages GPU-instanced meshes and their per-instance operations.
31
+ *
32
+ * Each group of primitives sharing the same geometry hash is represented by
33
+ * one or more THREE.InstancedMesh objects:
34
+ * - defaultMesh: contains all instances that have no active post-processing effect
35
+ * - effectMeshes: lazily-created meshes that contain instances which participate
36
+ * in a specific post-processing effect (outline, bloom, …)
37
+ *
38
+ * All InstancedMeshes are direct children of `instancedRoot`, which must be
39
+ * added to the THREE scene by the owner (RenderingEngine / SceneTreeManager).
40
+ */
41
+ class InstanceGroupManager {
42
+ // #endregion Properties (3)
43
+ // #region Constructors (1)
44
+ constructor(_renderingEngine) {
45
+ this._renderingEngine = _renderingEngine;
46
+ // #region Properties (3)
47
+ this._groups = new Map();
48
+ this._nodeToHash = new Map(); // nodeId → instanceHash
49
+ this.instancedRoot = new THREE.Group();
50
+ this.instancedRoot.matrixAutoUpdate = false;
51
+ this.instancedRoot.name = "instancedRoot";
52
+ }
53
+ // #endregion Constructors (1)
54
+ // #region Public Methods (7)
55
+ /**
56
+ * Register a node as part of an instanced group.
57
+ * Creates the InstancedMesh if this is the first node for the given hash.
58
+ * Returns the defaultMesh so callers can reference it.
59
+ */
60
+ addNode(node, geometry, bufferGeometry, material) {
61
+ var _a;
62
+ const instanceHash = geometry.instanceHash;
63
+ let group = this._groups.get(instanceHash);
64
+ if (!group) {
65
+ const initialCapacity = Math.max(geometry.instanceColors.length, 4);
66
+ const instancedMesh = new THREE.InstancedMesh(bufferGeometry, material, initialCapacity);
67
+ instancedMesh.count = 0;
68
+ instancedMesh.frustumCulled = false;
69
+ instancedMesh.matrixAutoUpdate = false;
70
+ instancedMesh.userData.instanceHash = instanceHash;
71
+ instancedMesh.userData.instanceNodes = [];
72
+ group = {
73
+ instanceHash,
74
+ defaultMesh: instancedMesh,
75
+ effectMeshes: new Map(),
76
+ nodeToIndex: new Map(),
77
+ indexToNode: new Map(),
78
+ count: 0,
79
+ nodeMatrices: new Map(),
80
+ nodeColors: new Map(),
81
+ nodeEffect: new Map(),
82
+ };
83
+ this._groups.set(instanceHash, group);
84
+ this.instancedRoot.add(instancedMesh);
85
+ }
86
+ const nodeId = node.id;
87
+ // If already registered, just refresh matrix (re-load scenario)
88
+ if (this._nodeToHash.has(nodeId)) {
89
+ this._refreshNodeMatrix(group, node);
90
+ return group.defaultMesh;
91
+ }
92
+ this._nodeToHash.set(nodeId, instanceHash);
93
+ // Resolve color: first entry in instanceColors that corresponds to this node,
94
+ // or white as fallback.
95
+ const colorRaw = (_a = geometry.instanceColors[group.count]) !== null && _a !== void 0 ? _a : [1, 1, 1, 1];
96
+ const rgb = [
97
+ Array.isArray(colorRaw) ? colorRaw[0] : 1,
98
+ Array.isArray(colorRaw) ? colorRaw[1] : 1,
99
+ Array.isArray(colorRaw) ? colorRaw[2] : 1,
100
+ ];
101
+ const matrix = new Float32Array(node.worldMatrix);
102
+ group.nodeMatrices.set(nodeId, matrix);
103
+ group.nodeColors.set(nodeId, rgb);
104
+ // Grow buffers if needed
105
+ if (group.count >= group.defaultMesh.instanceMatrix.count) {
106
+ this._growMeshBuffers(group.defaultMesh);
107
+ }
108
+ const idx = group.count;
109
+ const tempMatrix = new THREE.Matrix4();
110
+ tempMatrix.fromArray(matrix);
111
+ group.defaultMesh.setMatrixAt(idx, tempMatrix);
112
+ if (this._renderingEngine.type !== viewer_shared_types_1.RENDERER_TYPE.ATTRIBUTES) {
113
+ group.defaultMesh.setColorAt(idx, new THREE.Color().setRGB(rgb[0], rgb[1], rgb[2]));
114
+ }
115
+ group.nodeToIndex.set(nodeId, idx);
116
+ group.indexToNode.set(idx, node);
117
+ group.defaultMesh.userData.instanceNodes[idx] = node;
118
+ group.count++;
119
+ group.defaultMesh.count = group.count;
120
+ group.defaultMesh.instanceMatrix.needsUpdate = true;
121
+ if (group.defaultMesh.instanceColor)
122
+ group.defaultMesh.instanceColor.needsUpdate = true;
123
+ return group.defaultMesh;
124
+ }
125
+ /**
126
+ * Unregister a node from its instance group.
127
+ * Uses swap-and-pop so the InstancedMesh never has gaps.
128
+ */
129
+ removeNode(node) {
130
+ const nodeId = node.id;
131
+ const instanceHash = this._nodeToHash.get(nodeId);
132
+ if (!instanceHash)
133
+ return;
134
+ const group = this._groups.get(instanceHash);
135
+ if (!group)
136
+ return;
137
+ // Remove from effect first if applicable
138
+ const effectKey = group.nodeEffect.get(nodeId);
139
+ if (effectKey !== undefined)
140
+ this.removeFromEffect(node, effectKey);
141
+ this._removeFromDefault(group, nodeId);
142
+ group.nodeMatrices.delete(nodeId);
143
+ group.nodeColors.delete(nodeId);
144
+ this._nodeToHash.delete(nodeId);
145
+ // Dispose empty groups
146
+ if (group.count === 0) {
147
+ this.instancedRoot.remove(group.defaultMesh);
148
+ group.effectMeshes.forEach((m) => this.instancedRoot.remove(m));
149
+ this._groups.delete(instanceHash);
150
+ }
151
+ }
152
+ /**
153
+ * Move a node's instance from the default mesh to a dedicated effect mesh.
154
+ * Creates the effect mesh lazily. Returns it so it can be added to the
155
+ * post-processing effect's selection set.
156
+ */
157
+ addToEffect(node, effectKey) {
158
+ var _a;
159
+ const nodeId = node.id;
160
+ const instanceHash = this._nodeToHash.get(nodeId);
161
+ if (!instanceHash)
162
+ return null;
163
+ const group = this._groups.get(instanceHash);
164
+ if (!group)
165
+ return null;
166
+ // Already in an effect mesh
167
+ const existingEffect = group.nodeEffect.get(nodeId);
168
+ if (existingEffect !== undefined)
169
+ return (_a = group.effectMeshes.get(existingEffect)) !== null && _a !== void 0 ? _a : null;
170
+ // Lazily create effect mesh (shares geometry, but different material instance)
171
+ let effectMesh = group.effectMeshes.get(effectKey);
172
+ if (!effectMesh) {
173
+ // Clone the material so effect passes can override it independently
174
+ const effectMaterial = group.defaultMesh.material.clone();
175
+ effectMesh = new THREE.InstancedMesh(group.defaultMesh.geometry, effectMaterial, 8);
176
+ effectMesh.count = 0;
177
+ effectMesh.frustumCulled = false;
178
+ effectMesh.matrixAutoUpdate = false;
179
+ effectMesh.userData.instanceHash = instanceHash;
180
+ effectMesh.userData.effectKey = effectKey;
181
+ effectMesh.userData.instanceNodes = [];
182
+ group.effectMeshes.set(effectKey, effectMesh);
183
+ this.instancedRoot.add(effectMesh);
184
+ }
185
+ // Remove from default mesh (swap-and-pop), keep metadata
186
+ this._removeFromDefault(group, nodeId);
187
+ // Add to effect mesh
188
+ const matrix = group.nodeMatrices.get(nodeId);
189
+ const color = group.nodeColors.get(nodeId);
190
+ const effectIdx = effectMesh.count;
191
+ if (effectIdx >= effectMesh.instanceMatrix.count)
192
+ this._growMeshBuffers(effectMesh);
193
+ const tempMatrix = new THREE.Matrix4();
194
+ tempMatrix.fromArray(matrix);
195
+ effectMesh.setMatrixAt(effectIdx, tempMatrix);
196
+ if (effectMesh.instanceColor)
197
+ effectMesh.setColorAt(effectIdx, new THREE.Color().setRGB(color[0], color[1], color[2]));
198
+ effectMesh.count++;
199
+ effectMesh.userData.instanceNodes[effectIdx] = node;
200
+ effectMesh.instanceMatrix.needsUpdate = true;
201
+ if (effectMesh.instanceColor)
202
+ effectMesh.instanceColor.needsUpdate = true;
203
+ group.nodeEffect.set(nodeId, effectKey);
204
+ return effectMesh;
205
+ }
206
+ /**
207
+ * Move a node's instance back from an effect mesh to the default mesh.
208
+ * Disposes the effect mesh if it becomes empty.
209
+ */
210
+ removeFromEffect(node, effectKey) {
211
+ const nodeId = node.id;
212
+ const instanceHash = this._nodeToHash.get(nodeId);
213
+ if (!instanceHash)
214
+ return;
215
+ const group = this._groups.get(instanceHash);
216
+ if (!group)
217
+ return;
218
+ if (group.nodeEffect.get(nodeId) !== effectKey)
219
+ return;
220
+ const effectMesh = group.effectMeshes.get(effectKey);
221
+ if (!effectMesh)
222
+ return;
223
+ // Find position in effect mesh
224
+ const instanceNodes = effectMesh.userData.instanceNodes;
225
+ const effectIdx = instanceNodes.indexOf(node);
226
+ if (effectIdx === -1)
227
+ return;
228
+ // Swap-and-pop from effect mesh
229
+ const lastEffectIdx = effectMesh.count - 1;
230
+ if (effectIdx !== lastEffectIdx) {
231
+ const lastNode = instanceNodes[lastEffectIdx];
232
+ const lastMatrix = group.nodeMatrices.get(lastNode.id);
233
+ const lastColor = group.nodeColors.get(lastNode.id);
234
+ const tempMatrix = new THREE.Matrix4();
235
+ tempMatrix.fromArray(lastMatrix);
236
+ effectMesh.setMatrixAt(effectIdx, tempMatrix);
237
+ if (effectMesh.instanceColor)
238
+ effectMesh.setColorAt(effectIdx, new THREE.Color().setRGB(lastColor[0], lastColor[1], lastColor[2]));
239
+ instanceNodes[effectIdx] = lastNode;
240
+ }
241
+ effectMesh.count--;
242
+ instanceNodes[lastEffectIdx] = undefined;
243
+ effectMesh.instanceMatrix.needsUpdate = true;
244
+ if (effectMesh.instanceColor)
245
+ effectMesh.instanceColor.needsUpdate = true;
246
+ group.nodeEffect.delete(nodeId);
247
+ // Add back to default mesh
248
+ this._addBackToDefault(group, nodeId, node);
249
+ // Remove empty effect meshes
250
+ if (effectMesh.count === 0) {
251
+ this.instancedRoot.remove(effectMesh);
252
+ effectMesh.material.dispose();
253
+ group.effectMeshes.delete(effectKey);
254
+ }
255
+ }
256
+ /**
257
+ * Look up the tree node for a given InstancedMesh + instanceId.
258
+ * Used by the intersection engine.
259
+ */
260
+ findNodeByMeshAndIndex(mesh, instanceId) {
261
+ const instanceNodes = mesh.userData.instanceNodes;
262
+ return instanceNodes === null || instanceNodes === void 0 ? void 0 : instanceNodes[instanceId];
263
+ }
264
+ /** Returns true if the node participates in any instance group. */
265
+ isInstanced(nodeId) {
266
+ return this._nodeToHash.has(nodeId);
267
+ }
268
+ /** Returns all active InstancedMeshes (default + effect) for a node. */
269
+ getMeshesForNode(nodeId) {
270
+ const instanceHash = this._nodeToHash.get(nodeId);
271
+ if (!instanceHash)
272
+ return [];
273
+ const group = this._groups.get(instanceHash);
274
+ if (!group)
275
+ return [];
276
+ const result = [group.defaultMesh];
277
+ group.effectMeshes.forEach((m) => result.push(m));
278
+ return result;
279
+ }
280
+ // #endregion Public Methods (7)
281
+ // #region Private Methods (4)
282
+ _removeFromDefault(group, nodeId) {
283
+ const index = group.nodeToIndex.get(nodeId);
284
+ if (index === undefined)
285
+ return;
286
+ const lastIdx = group.count - 1;
287
+ if (index !== lastIdx) {
288
+ const lastNode = group.indexToNode.get(lastIdx);
289
+ const lastMatrix = group.nodeMatrices.get(lastNode.id);
290
+ const lastColor = group.nodeColors.get(lastNode.id);
291
+ const tempMatrix = new THREE.Matrix4();
292
+ tempMatrix.fromArray(lastMatrix);
293
+ group.defaultMesh.setMatrixAt(index, tempMatrix);
294
+ if (group.defaultMesh.instanceColor)
295
+ group.defaultMesh.setColorAt(index, new THREE.Color().setRGB(lastColor[0], lastColor[1], lastColor[2]));
296
+ group.nodeToIndex.set(lastNode.id, index);
297
+ group.indexToNode.set(index, lastNode);
298
+ group.defaultMesh.userData.instanceNodes[index] = lastNode;
299
+ }
300
+ group.count--;
301
+ group.defaultMesh.count = group.count;
302
+ group.nodeToIndex.delete(nodeId);
303
+ group.indexToNode.delete(lastIdx);
304
+ group.defaultMesh.userData.instanceNodes[lastIdx] = undefined;
305
+ group.defaultMesh.instanceMatrix.needsUpdate = true;
306
+ if (group.defaultMesh.instanceColor)
307
+ group.defaultMesh.instanceColor.needsUpdate = true;
308
+ }
309
+ _addBackToDefault(group, nodeId, node) {
310
+ const matrix = group.nodeMatrices.get(nodeId);
311
+ const color = group.nodeColors.get(nodeId);
312
+ const newIdx = group.count;
313
+ if (newIdx >= group.defaultMesh.instanceMatrix.count)
314
+ this._growMeshBuffers(group.defaultMesh);
315
+ const tempMatrix = new THREE.Matrix4();
316
+ tempMatrix.fromArray(matrix);
317
+ group.defaultMesh.setMatrixAt(newIdx, tempMatrix);
318
+ if (group.defaultMesh.instanceColor)
319
+ group.defaultMesh.setColorAt(newIdx, new THREE.Color().setRGB(color[0], color[1], color[2]));
320
+ group.nodeToIndex.set(nodeId, newIdx);
321
+ group.indexToNode.set(newIdx, node);
322
+ group.defaultMesh.userData.instanceNodes[newIdx] = node;
323
+ group.count++;
324
+ group.defaultMesh.count = group.count;
325
+ group.defaultMesh.instanceMatrix.needsUpdate = true;
326
+ if (group.defaultMesh.instanceColor)
327
+ group.defaultMesh.instanceColor.needsUpdate = true;
328
+ }
329
+ _refreshNodeMatrix(group, node) {
330
+ const nodeId = node.id;
331
+ const matrix = new Float32Array(node.worldMatrix);
332
+ group.nodeMatrices.set(nodeId, matrix);
333
+ const idx = group.nodeToIndex.get(nodeId);
334
+ if (idx !== undefined) {
335
+ const tempMatrix = new THREE.Matrix4();
336
+ tempMatrix.fromArray(matrix);
337
+ group.defaultMesh.setMatrixAt(idx, tempMatrix);
338
+ group.defaultMesh.instanceMatrix.needsUpdate = true;
339
+ }
340
+ const effectKey = group.nodeEffect.get(nodeId);
341
+ if (effectKey !== undefined) {
342
+ const effectMesh = group.effectMeshes.get(effectKey);
343
+ if (effectMesh) {
344
+ const instanceNodes = effectMesh.userData.instanceNodes;
345
+ const effectIdx = instanceNodes.indexOf(node);
346
+ if (effectIdx !== -1) {
347
+ const tempMatrix = new THREE.Matrix4();
348
+ tempMatrix.fromArray(matrix);
349
+ effectMesh.setMatrixAt(effectIdx, tempMatrix);
350
+ effectMesh.instanceMatrix.needsUpdate = true;
351
+ }
352
+ }
353
+ }
354
+ }
355
+ _growMeshBuffers(mesh) {
356
+ const currentCapacity = mesh.instanceMatrix.count;
357
+ const newCapacity = Math.max(currentCapacity * 2, 8);
358
+ const newMatrixArray = new Float32Array(newCapacity * 16);
359
+ newMatrixArray.set(mesh.instanceMatrix.array);
360
+ mesh.instanceMatrix = new THREE.InstancedBufferAttribute(newMatrixArray, 16);
361
+ if (mesh.instanceColor) {
362
+ const newColorArray = new Float32Array(newCapacity * 3);
363
+ newColorArray.set(mesh.instanceColor.array);
364
+ mesh.instanceColor = new THREE.InstancedBufferAttribute(newColorArray, 3);
365
+ }
366
+ // Grow the instanceNodes array too
367
+ if (!mesh.userData.instanceNodes)
368
+ mesh.userData.instanceNodes = [];
369
+ }
370
+ }
371
+ exports.InstanceGroupManager = InstanceGroupManager;
372
+ //# sourceMappingURL=InstanceGroupManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InstanceGroupManager.js","sourceRoot":"","sources":["../../src/managers/InstanceGroupManager.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shapediver/viewer.rendering-engine.rendering-engine-threejs",
3
- "version": "3.16.6",
3
+ "version": "3.16.8",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "author": "Michael Oppitz <michael@shapediver.com>",
@@ -38,21 +38,21 @@
38
38
  "testEnvironment": "node"
39
39
  },
40
40
  "dependencies": {
41
- "@shapediver/viewer.data-engine.gltf-converter": "3.16.6",
42
- "@shapediver/viewer.data-engine.shared-types": "3.16.6",
43
- "@shapediver/viewer.data-engine.tag3d-engine": "3.16.6",
44
- "@shapediver/viewer.rendering-engine.animation-engine": "3.16.6",
45
- "@shapediver/viewer.rendering-engine.animation-frame-engine": "3.16.6",
46
- "@shapediver/viewer.rendering-engine.camera-engine": "3.16.6",
47
- "@shapediver/viewer.rendering-engine.canvas-engine": "3.16.6",
48
- "@shapediver/viewer.rendering-engine.intersection-engine": "3.16.6",
49
- "@shapediver/viewer.rendering-engine.light-engine": "3.16.6",
50
- "@shapediver/viewer.rendering-engine.rendering-engine": "3.16.6",
51
- "@shapediver/viewer.shared.global-access-objects": "3.16.6",
52
- "@shapediver/viewer.shared.math": "3.16.6",
53
- "@shapediver/viewer.shared.node-tree": "3.16.6",
54
- "@shapediver/viewer.shared.services": "3.16.6",
55
- "@shapediver/viewer.shared.types": "3.16.6",
41
+ "@shapediver/viewer.data-engine.gltf-converter": "3.16.8",
42
+ "@shapediver/viewer.data-engine.shared-types": "3.16.8",
43
+ "@shapediver/viewer.data-engine.tag3d-engine": "3.16.8",
44
+ "@shapediver/viewer.rendering-engine.animation-engine": "3.16.8",
45
+ "@shapediver/viewer.rendering-engine.animation-frame-engine": "3.16.8",
46
+ "@shapediver/viewer.rendering-engine.camera-engine": "3.16.8",
47
+ "@shapediver/viewer.rendering-engine.canvas-engine": "3.16.8",
48
+ "@shapediver/viewer.rendering-engine.intersection-engine": "3.16.8",
49
+ "@shapediver/viewer.rendering-engine.light-engine": "3.16.8",
50
+ "@shapediver/viewer.rendering-engine.rendering-engine": "3.16.8",
51
+ "@shapediver/viewer.shared.global-access-objects": "3.16.8",
52
+ "@shapediver/viewer.shared.math": "3.16.8",
53
+ "@shapediver/viewer.shared.node-tree": "3.16.8",
54
+ "@shapediver/viewer.shared.services": "3.16.8",
55
+ "@shapediver/viewer.shared.types": "3.16.8",
56
56
  "@tweenjs/tween.js": "18.6.4",
57
57
  "@types/stats.js": "0.17.4",
58
58
  "@types/three": "0.162.0",
@@ -61,5 +61,5 @@
61
61
  "stats.js": "0.17.0",
62
62
  "three": "0.162.0"
63
63
  },
64
- "gitHead": "1aafd402c8dcf105c60d8d16058ac6918506bbf5"
64
+ "gitHead": "d0305585911852e700f9e3768e5edd4bac222ea0"
65
65
  }