1 |
- {"ast":null,"code":"import { Observable } from \"@babylonjs/core/Misc/observable.js\";\nimport { Deferred } from \"@babylonjs/core/Misc/deferred.js\";\nimport { GLTFLoader, ArrayItem } from \"../glTFLoader.js\";\nconst NAME = \"MSFT_lod\";\n/**\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Vendor/MSFT_lod/README.md)\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class MSFT_lod {\n /**\n * @internal\n */\n constructor(loader) {\n /**\n * The name of this extension.\n */\n this.name = NAME;\n /**\n * Defines a number that determines the order the extensions are applied.\n */\n this.order = 100;\n /**\n * Maximum number of LODs to load, starting from the lowest LOD.\n */\n this.maxLODsToLoad = 10;\n /**\n * Observable raised when all node LODs of one level are loaded.\n * The event data is the index of the loaded LOD starting from zero.\n * Dispose the loader to cancel the loading of the next level of LODs.\n */\n this.onNodeLODsLoadedObservable = new Observable();\n /**\n * Observable raised when all material LODs of one level are loaded.\n * The event data is the index of the loaded LOD starting from zero.\n * Dispose the loader to cancel the loading of the next level of LODs.\n */\n this.onMaterialLODsLoadedObservable = new Observable();\n this._bufferLODs = new Array();\n this._nodeIndexLOD = null;\n this._nodeSignalLODs = new Array();\n this._nodePromiseLODs = new Array();\n this._nodeBufferLODs = new Array();\n this._materialIndexLOD = null;\n this._materialSignalLODs = new Array();\n this._materialPromiseLODs = new Array();\n this._materialBufferLODs = new Array();\n this._loader = loader;\n this.enabled = this._loader.isExtensionUsed(NAME);\n }\n /** @internal */\n dispose() {\n this._loader = null;\n this._nodeIndexLOD = null;\n this._nodeSignalLODs.length = 0;\n this._nodePromiseLODs.length = 0;\n this._nodeBufferLODs.length = 0;\n this._materialIndexLOD = null;\n this._materialSignalLODs.length = 0;\n this._materialPromiseLODs.length = 0;\n this._materialBufferLODs.length = 0;\n this.onMaterialLODsLoadedObservable.clear();\n this.onNodeLODsLoadedObservable.clear();\n }\n /** @internal */\n onReady() {\n for (let indexLOD = 0; indexLOD < this._nodePromiseLODs.length; indexLOD++) {\n const promise = Promise.all(this._nodePromiseLODs[indexLOD]).then(() => {\n if (indexLOD !== 0) {\n this._loader.endPerformanceCounter(`Node LOD ${indexLOD}`);\n this._loader.log(`Loaded node LOD ${indexLOD}`);\n }\n this.onNodeLODsLoadedObservable.notifyObservers(indexLOD);\n if (indexLOD !== this._nodePromiseLODs.length - 1) {\n this._loader.startPerformanceCounter(`Node LOD ${indexLOD + 1}`);\n this._loadBufferLOD(this._nodeBufferLODs, indexLOD + 1);\n if (this._nodeSignalLODs[indexLOD]) {\n this._nodeSignalLODs[indexLOD].resolve();\n }\n }\n });\n this._loader._completePromises.push(promise);\n }\n for (let indexLOD = 0; indexLOD < this._materialPromiseLODs.length; indexLOD++) {\n const promise = Promise.all(this._materialPromiseLODs[indexLOD]).then(() => {\n if (indexLOD !== 0) {\n this._loader.endPerformanceCounter(`Material LOD ${indexLOD}`);\n this._loader.log(`Loaded material LOD ${indexLOD}`);\n }\n this.onMaterialLODsLoadedObservable.notifyObservers(indexLOD);\n if (indexLOD !== this._materialPromiseLODs.length - 1) {\n this._loader.startPerformanceCounter(`Material LOD ${indexLOD + 1}`);\n this._loadBufferLOD(this._materialBufferLODs, indexLOD + 1);\n if (this._materialSignalLODs[indexLOD]) {\n this._materialSignalLODs[indexLOD].resolve();\n }\n }\n });\n this._loader._completePromises.push(promise);\n }\n }\n /**\n * @internal\n */\n loadSceneAsync(context, scene) {\n const promise = this._loader.loadSceneAsync(context, scene);\n this._loadBufferLOD(this._bufferLODs, 0);\n return promise;\n }\n /**\n * @internal\n */\n loadNodeAsync(context, node, assign) {\n return GLTFLoader.LoadExtensionAsync(context, node, this.name, (extensionContext, extension) => {\n let firstPromise;\n const nodeLODs = this._getLODs(extensionContext, node, this._loader.gltf.nodes, extension.ids);\n this._loader.logOpen(`${extensionContext}`);\n for (let indexLOD = 0; indexLOD < nodeLODs.length; indexLOD++) {\n const nodeLOD = nodeLODs[indexLOD];\n if (indexLOD !== 0) {\n this._nodeIndexLOD = indexLOD;\n this._nodeSignalLODs[indexLOD] = this._nodeSignalLODs[indexLOD] || new Deferred();\n }\n const assignWrap = babylonTransformNode => {\n assign(babylonTransformNode);\n babylonTransformNode.setEnabled(false);\n };\n const promise = this._loader.loadNodeAsync(`/nodes/${nodeLOD.index}`, nodeLOD, assignWrap).then(babylonMesh => {\n if (indexLOD !== 0) {\n // TODO: should not rely on _babylonTransformNode\n const previousNodeLOD = nodeLODs[indexLOD - 1];\n if (previousNodeLOD._babylonTransformNode) {\n this._disposeTransformNode(previousNodeLOD._babylonTransformNode);\n delete previousNodeLOD._babylonTransformNode;\n }\n }\n babylonMesh.setEnabled(true);\n return babylonMesh;\n });\n this._nodePromiseLODs[indexLOD] = this._nodePromiseLODs[indexLOD] || [];\n if (indexLOD === 0) {\n firstPromise = promise;\n } else {\n this._nodeIndexLOD = null;\n this._nodePromiseLODs[indexLOD].push(promise);\n }\n }\n this._loader.logClose();\n return firstPromise;\n });\n }\n /**\n * @internal\n */\n _loadMaterialAsync(context, material, babylonMesh, babylonDrawMode, assign) {\n // Don't load material LODs if already loading a node LOD.\n if (this._nodeIndexLOD) {\n return null;\n }\n return GLTFLoader.LoadExtensionAsync(context, material, this.name, (extensionContext, extension) => {\n let firstPromise;\n const materialLODs = this._getLODs(extensionContext, material, this._loader.gltf.materials, extension.ids);\n this._loader.logOpen(`${extensionContext}`);\n for (let indexLOD = 0; indexLOD < materialLODs.length; indexLOD++) {\n const materialLOD = materialLODs[indexLOD];\n if (indexLOD !== 0) {\n this._materialIndexLOD = indexLOD;\n }\n const promise = this._loader._loadMaterialAsync(`/materials/${materialLOD.index}`, materialLOD, babylonMesh, babylonDrawMode, babylonMaterial => {\n if (indexLOD === 0) {\n assign(babylonMaterial);\n }\n }).then(babylonMaterial => {\n if (indexLOD !== 0) {\n assign(babylonMaterial);\n // TODO: should not rely on _data\n const previousDataLOD = materialLODs[indexLOD - 1]._data;\n if (previousDataLOD[babylonDrawMode]) {\n this._disposeMaterials([previousDataLOD[babylonDrawMode].babylonMaterial]);\n delete previousDataLOD[babylonDrawMode];\n }\n }\n return babylonMaterial;\n });\n this._materialPromiseLODs[indexLOD] = this._materialPromiseLODs[indexLOD] || [];\n if (indexLOD === 0) {\n firstPromise = promise;\n } else {\n this._materialIndexLOD = null;\n this._materialPromiseLODs[indexLOD].push(promise);\n }\n }\n this._loader.logClose();\n return firstPromise;\n });\n }\n /**\n * @internal\n */\n _loadUriAsync(context, property, uri) {\n // Defer the loading of uris if loading a node or material LOD.\n if (this._nodeIndexLOD !== null) {\n this._loader.log(`deferred`);\n const previousIndexLOD = this._nodeIndexLOD - 1;\n this._nodeSignalLODs[previousIndexLOD] = this._nodeSignalLODs[previousIndexLOD] || new Deferred();\n return this._nodeSignalLODs[this._nodeIndexLOD - 1].promise.then(() => {\n return this._loader.loadUriAsync(context, property, uri);\n });\n } else if (this._materialIndexLOD !== null) {\n this._loader.log(`deferred`);\n const previousIndexLOD = this._materialIndexLOD - 1;\n this._materialSignalLODs[previousIndexLOD] = this._materialSignalLODs[previousIndexLOD] || new Deferred();\n return this._materialSignalLODs[previousIndexLOD].promise.then(() => {\n return this._loader.loadUriAsync(context, property, uri);\n });\n }\n return null;\n }\n /**\n * @internal\n */\n loadBufferAsync(context, buffer, byteOffset, byteLength) {\n if (this._loader.parent.useRangeRequests && !buffer.uri) {\n if (!this._loader.bin) {\n throw new Error(`${context}: Uri is missing or the binary glTF is missing its binary chunk`);\n }\n const loadAsync = (bufferLODs, indexLOD) => {\n const start = byteOffset;\n const end = start + byteLength - 1;\n let bufferLOD = bufferLODs[indexLOD];\n if (bufferLOD) {\n bufferLOD.start = Math.min(bufferLOD.start, start);\n bufferLOD.end = Math.max(bufferLOD.end, end);\n } else {\n bufferLOD = {\n start: start,\n end: end,\n loaded: new Deferred()\n };\n bufferLODs[indexLOD] = bufferLOD;\n }\n return bufferLOD.loaded.promise.then(data => {\n return new Uint8Array(data.buffer, data.byteOffset + byteOffset - bufferLOD.start, byteLength);\n });\n };\n this._loader.log(`deferred`);\n if (this._nodeIndexLOD !== null) {\n return loadAsync(this._nodeBufferLODs, this._nodeIndexLOD);\n } else if (this._materialIndexLOD !== null) {\n return loadAsync(this._materialBufferLODs, this._materialIndexLOD);\n } else {\n return loadAsync(this._bufferLODs, 0);\n }\n }\n return null;\n }\n _loadBufferLOD(bufferLODs, indexLOD) {\n const bufferLOD = bufferLODs[indexLOD];\n if (bufferLOD) {\n this._loader.log(`Loading buffer range [${bufferLOD.start}-${bufferLOD.end}]`);\n this._loader.bin.readAsync(bufferLOD.start, bufferLOD.end - bufferLOD.start + 1).then(data => {\n bufferLOD.loaded.resolve(data);\n }, error => {\n bufferLOD.loaded.reject(error);\n });\n }\n }\n /**\n * @returns an array of LOD properties from lowest to highest.\n * @param context\n * @param property\n * @param array\n * @param ids\n */\n _getLODs(context, property, array, ids) {\n if (this.maxLODsToLoad <= 0) {\n throw new Error(\"maxLODsToLoad must be greater than zero\");\n }\n const properties = [];\n for (let i = ids.length - 1; i >= 0; i--) {\n properties.push(ArrayItem.Get(`${context}/ids/${ids[i]}`, array, ids[i]));\n if (properties.length === this.maxLODsToLoad) {\n return properties;\n }\n }\n properties.push(property);\n return properties;\n }\n _disposeTransformNode(babylonTransformNode) {\n const babylonMaterials = [];\n const babylonMaterial = babylonTransformNode.material;\n if (babylonMaterial) {\n babylonMaterials.push(babylonMaterial);\n }\n for (const babylonMesh of babylonTransformNode.getChildMeshes()) {\n if (babylonMesh.material) {\n babylonMaterials.push(babylonMesh.material);\n }\n }\n babylonTransformNode.dispose();\n const babylonMaterialsToDispose = babylonMaterials.filter(babylonMaterial => this._loader.babylonScene.meshes.every(mesh => mesh.material != babylonMaterial));\n this._disposeMaterials(babylonMaterialsToDispose);\n }\n _disposeMaterials(babylonMaterials) {\n const babylonTextures = {};\n for (const babylonMaterial of babylonMaterials) {\n for (const babylonTexture of babylonMaterial.getActiveTextures()) {\n babylonTextures[babylonTexture.uniqueId] = babylonTexture;\n }\n babylonMaterial.dispose();\n }\n for (const uniqueId in babylonTextures) {\n for (const babylonMaterial of this._loader.babylonScene.materials) {\n if (babylonMaterial.hasTexture(babylonTextures[uniqueId])) {\n delete babylonTextures[uniqueId];\n }\n }\n }\n for (const uniqueId in babylonTextures) {\n babylonTextures[uniqueId].dispose();\n }\n }\n}\nGLTFLoader.RegisterExtension(NAME, loader => new MSFT_lod(loader));","map":{"version":3,"names":["Observable","Deferred","GLTFLoader","ArrayItem","NAME","MSFT_lod","constructor","loader","name","order","maxLODsToLoad","onNodeLODsLoadedObservable","onMaterialLODsLoadedObservable","_bufferLODs","Array","_nodeIndexLOD","_nodeSignalLODs","_nodePromiseLODs","_nodeBufferLODs","_materialIndexLOD","_materialSignalLODs","_materialPromiseLODs","_materialBufferLODs","_loader","enabled","isExtensionUsed","dispose","length","clear","onReady","indexLOD","promise","Promise","all","then","endPerformanceCounter","log","notifyObservers","startPerformanceCounter","_loadBufferLOD","resolve","_completePromises","push","loadSceneAsync","context","scene","loadNodeAsync","node","assign","LoadExtensionAsync","extensionContext","extension","firstPromise","nodeLODs","_getLODs","gltf","nodes","ids","logOpen","nodeLOD","assignWrap","babylonTransformNode","setEnabled","index","babylonMesh","previousNodeLOD","_babylonTransformNode","_disposeTransformNode","logClose","_loadMaterialAsync","material","babylonDrawMode","materialLODs","materials","materialLOD","babylonMaterial","previousDataLOD","_data","_disposeMaterials","_loadUriAsync","property","uri","previousIndexLOD","loadUriAsync","loadBufferAsync","buffer","byteOffset","byteLength","parent","useRangeRequests","bin","Error","loadAsync","bufferLODs","start","end","bufferLOD","Math","min","max","loaded","data","Uint8Array","readAsync","error","reject","array","properties","i","Get","babylonMaterials","getChildMeshes","babylonMaterialsToDispose","filter","babylonScene","meshes","every","mesh","babylonTextures","babylonTexture","getActiveTextures","uniqueId","hasTexture","RegisterExtension"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/MSFT_lod.js"],"sourcesContent":["import { Observable } from \"@babylonjs/core/Misc/observable.js\";\nimport { Deferred } from \"@babylonjs/core/Misc/deferred.js\";\nimport { GLTFLoader, ArrayItem } from \"../glTFLoader.js\";\nconst NAME = \"MSFT_lod\";\n/**\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Vendor/MSFT_lod/README.md)\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class MSFT_lod {\n /**\n * @internal\n */\n constructor(loader) {\n /**\n * The name of this extension.\n */\n this.name = NAME;\n /**\n * Defines a number that determines the order the extensions are applied.\n */\n this.order = 100;\n /**\n * Maximum number of LODs to load, starting from the lowest LOD.\n */\n this.maxLODsToLoad = 10;\n /**\n * Observable raised when all node LODs of one level are loaded.\n * The event data is the index of the loaded LOD starting from zero.\n * Dispose the loader to cancel the loading of the next level of LODs.\n */\n this.onNodeLODsLoadedObservable = new Observable();\n /**\n * Observable raised when all material LODs of one level are loaded.\n * The event data is the index of the loaded LOD starting from zero.\n * Dispose the loader to cancel the loading of the next level of LODs.\n */\n this.onMaterialLODsLoadedObservable = new Observable();\n this._bufferLODs = new Array();\n this._nodeIndexLOD = null;\n this._nodeSignalLODs = new Array();\n this._nodePromiseLODs = new Array();\n this._nodeBufferLODs = new Array();\n this._materialIndexLOD = null;\n this._materialSignalLODs = new Array();\n this._materialPromiseLODs = new Array();\n this._materialBufferLODs = new Array();\n this._loader = loader;\n this.enabled = this._loader.isExtensionUsed(NAME);\n }\n /** @internal */\n dispose() {\n this._loader = null;\n this._nodeIndexLOD = null;\n this._nodeSignalLODs.length = 0;\n this._nodePromiseLODs.length = 0;\n this._nodeBufferLODs.length = 0;\n this._materialIndexLOD = null;\n this._materialSignalLODs.length = 0;\n this._materialPromiseLODs.length = 0;\n this._materialBufferLODs.length = 0;\n this.onMaterialLODsLoadedObservable.clear();\n this.onNodeLODsLoadedObservable.clear();\n }\n /** @internal */\n onReady() {\n for (let indexLOD = 0; indexLOD < this._nodePromiseLODs.length; indexLOD++) {\n const promise = Promise.all(this._nodePromiseLODs[indexLOD]).then(() => {\n if (indexLOD !== 0) {\n this._loader.endPerformanceCounter(`Node LOD ${indexLOD}`);\n this._loader.log(`Loaded node LOD ${indexLOD}`);\n }\n this.onNodeLODsLoadedObservable.notifyObservers(indexLOD);\n if (indexLOD !== this._nodePromiseLODs.length - 1) {\n this._loader.startPerformanceCounter(`Node LOD ${indexLOD + 1}`);\n this._loadBufferLOD(this._nodeBufferLODs, indexLOD + 1);\n if (this._nodeSignalLODs[indexLOD]) {\n this._nodeSignalLODs[indexLOD].resolve();\n }\n }\n });\n this._loader._completePromises.push(promise);\n }\n for (let indexLOD = 0; indexLOD < this._materialPromiseLODs.length; indexLOD++) {\n const promise = Promise.all(this._materialPromiseLODs[indexLOD]).then(() => {\n if (indexLOD !== 0) {\n this._loader.endPerformanceCounter(`Material LOD ${indexLOD}`);\n this._loader.log(`Loaded material LOD ${indexLOD}`);\n }\n this.onMaterialLODsLoadedObservable.notifyObservers(indexLOD);\n if (indexLOD !== this._materialPromiseLODs.length - 1) {\n this._loader.startPerformanceCounter(`Material LOD ${indexLOD + 1}`);\n this._loadBufferLOD(this._materialBufferLODs, indexLOD + 1);\n if (this._materialSignalLODs[indexLOD]) {\n this._materialSignalLODs[indexLOD].resolve();\n }\n }\n });\n this._loader._completePromises.push(promise);\n }\n }\n /**\n * @internal\n */\n loadSceneAsync(context, scene) {\n const promise = this._loader.loadSceneAsync(context, scene);\n this._loadBufferLOD(this._bufferLODs, 0);\n return promise;\n }\n /**\n * @internal\n */\n loadNodeAsync(context, node, assign) {\n return GLTFLoader.LoadExtensionAsync(context, node, this.name, (extensionContext, extension) => {\n let firstPromise;\n const nodeLODs = this._getLODs(extensionContext, node, this._loader.gltf.nodes, extension.ids);\n this._loader.logOpen(`${extensionContext}`);\n for (let indexLOD = 0; indexLOD < nodeLODs.length; indexLOD++) {\n const nodeLOD = nodeLODs[indexLOD];\n if (indexLOD !== 0) {\n this._nodeIndexLOD = indexLOD;\n this._nodeSignalLODs[indexLOD] = this._nodeSignalLODs[indexLOD] || new Deferred();\n }\n const assignWrap = (babylonTransformNode) => {\n assign(babylonTransformNode);\n babylonTransformNode.setEnabled(false);\n };\n const promise = this._loader.loadNodeAsync(`/nodes/${nodeLOD.index}`, nodeLOD, assignWrap).then((babylonMesh) => {\n if (indexLOD !== 0) {\n // TODO: should not rely on _babylonTransformNode\n const previousNodeLOD = nodeLODs[indexLOD - 1];\n if (previousNodeLOD._babylonTransformNode) {\n this._disposeTransformNode(previousNodeLOD._babylonTransformNode);\n delete previousNodeLOD._babylonTransformNode;\n }\n }\n babylonMesh.setEnabled(true);\n return babylonMesh;\n });\n this._nodePromiseLODs[indexLOD] = this._nodePromiseLODs[indexLOD] || [];\n if (indexLOD === 0) {\n firstPromise = promise;\n }\n else {\n this._nodeIndexLOD = null;\n this._nodePromiseLODs[indexLOD].push(promise);\n }\n }\n this._loader.logClose();\n return firstPromise;\n });\n }\n /**\n * @internal\n */\n _loadMaterialAsync(context, material, babylonMesh, babylonDrawMode, assign) {\n // Don't load material LODs if already loading a node LOD.\n if (this._nodeIndexLOD) {\n return null;\n }\n return GLTFLoader.LoadExtensionAsync(context, material, this.name, (extensionContext, extension) => {\n let firstPromise;\n const materialLODs = this._getLODs(extensionContext, material, this._loader.gltf.materials, extension.ids);\n this._loader.logOpen(`${extensionContext}`);\n for (let indexLOD = 0; indexLOD < materialLODs.length; indexLOD++) {\n const materialLOD = materialLODs[indexLOD];\n if (indexLOD !== 0) {\n this._materialIndexLOD = indexLOD;\n }\n const promise = this._loader\n ._loadMaterialAsync(`/materials/${materialLOD.index}`, materialLOD, babylonMesh, babylonDrawMode, (babylonMaterial) => {\n if (indexLOD === 0) {\n assign(babylonMaterial);\n }\n })\n .then((babylonMaterial) => {\n if (indexLOD !== 0) {\n assign(babylonMaterial);\n // TODO: should not rely on _data\n const previousDataLOD = materialLODs[indexLOD - 1]._data;\n if (previousDataLOD[babylonDrawMode]) {\n this._disposeMaterials([previousDataLOD[babylonDrawMode].babylonMaterial]);\n delete previousDataLOD[babylonDrawMode];\n }\n }\n return babylonMaterial;\n });\n this._materialPromiseLODs[indexLOD] = this._materialPromiseLODs[indexLOD] || [];\n if (indexLOD === 0) {\n firstPromise = promise;\n }\n else {\n this._materialIndexLOD = null;\n this._materialPromiseLODs[indexLOD].push(promise);\n }\n }\n this._loader.logClose();\n return firstPromise;\n });\n }\n /**\n * @internal\n */\n _loadUriAsync(context, property, uri) {\n // Defer the loading of uris if loading a node or material LOD.\n if (this._nodeIndexLOD !== null) {\n this._loader.log(`deferred`);\n const previousIndexLOD = this._nodeIndexLOD - 1;\n this._nodeSignalLODs[previousIndexLOD] = this._nodeSignalLODs[previousIndexLOD] || new Deferred();\n return this._nodeSignalLODs[this._nodeIndexLOD - 1].promise.then(() => {\n return this._loader.loadUriAsync(context, property, uri);\n });\n }\n else if (this._materialIndexLOD !== null) {\n this._loader.log(`deferred`);\n const previousIndexLOD = this._materialIndexLOD - 1;\n this._materialSignalLODs[previousIndexLOD] = this._materialSignalLODs[previousIndexLOD] || new Deferred();\n return this._materialSignalLODs[previousIndexLOD].promise.then(() => {\n return this._loader.loadUriAsync(context, property, uri);\n });\n }\n return null;\n }\n /**\n * @internal\n */\n loadBufferAsync(context, buffer, byteOffset, byteLength) {\n if (this._loader.parent.useRangeRequests && !buffer.uri) {\n if (!this._loader.bin) {\n throw new Error(`${context}: Uri is missing or the binary glTF is missing its binary chunk`);\n }\n const loadAsync = (bufferLODs, indexLOD) => {\n const start = byteOffset;\n const end = start + byteLength - 1;\n let bufferLOD = bufferLODs[indexLOD];\n if (bufferLOD) {\n bufferLOD.start = Math.min(bufferLOD.start, start);\n bufferLOD.end = Math.max(bufferLOD.end, end);\n }\n else {\n bufferLOD = { start: start, end: end, loaded: new Deferred() };\n bufferLODs[indexLOD] = bufferLOD;\n }\n return bufferLOD.loaded.promise.then((data) => {\n return new Uint8Array(data.buffer, data.byteOffset + byteOffset - bufferLOD.start, byteLength);\n });\n };\n this._loader.log(`deferred`);\n if (this._nodeIndexLOD !== null) {\n return loadAsync(this._nodeBufferLODs, this._nodeIndexLOD);\n }\n else if (this._materialIndexLOD !== null) {\n return loadAsync(this._materialBufferLODs, this._materialIndexLOD);\n }\n else {\n return loadAsync(this._bufferLODs, 0);\n }\n }\n return null;\n }\n _loadBufferLOD(bufferLODs, indexLOD) {\n const bufferLOD = bufferLODs[indexLOD];\n if (bufferLOD) {\n this._loader.log(`Loading buffer range [${bufferLOD.start}-${bufferLOD.end}]`);\n this._loader.bin.readAsync(bufferLOD.start, bufferLOD.end - bufferLOD.start + 1).then((data) => {\n bufferLOD.loaded.resolve(data);\n }, (error) => {\n bufferLOD.loaded.reject(error);\n });\n }\n }\n /**\n * @returns an array of LOD properties from lowest to highest.\n * @param context\n * @param property\n * @param array\n * @param ids\n */\n _getLODs(context, property, array, ids) {\n if (this.maxLODsToLoad <= 0) {\n throw new Error(\"maxLODsToLoad must be greater than zero\");\n }\n const properties = [];\n for (let i = ids.length - 1; i >= 0; i--) {\n properties.push(ArrayItem.Get(`${context}/ids/${ids[i]}`, array, ids[i]));\n if (properties.length === this.maxLODsToLoad) {\n return properties;\n }\n }\n properties.push(property);\n return properties;\n }\n _disposeTransformNode(babylonTransformNode) {\n const babylonMaterials = [];\n const babylonMaterial = babylonTransformNode.material;\n if (babylonMaterial) {\n babylonMaterials.push(babylonMaterial);\n }\n for (const babylonMesh of babylonTransformNode.getChildMeshes()) {\n if (babylonMesh.material) {\n babylonMaterials.push(babylonMesh.material);\n }\n }\n babylonTransformNode.dispose();\n const babylonMaterialsToDispose = babylonMaterials.filter((babylonMaterial) => this._loader.babylonScene.meshes.every((mesh) => mesh.material != babylonMaterial));\n this._disposeMaterials(babylonMaterialsToDispose);\n }\n _disposeMaterials(babylonMaterials) {\n const babylonTextures = {};\n for (const babylonMaterial of babylonMaterials) {\n for (const babylonTexture of babylonMaterial.getActiveTextures()) {\n babylonTextures[babylonTexture.uniqueId] = babylonTexture;\n }\n babylonMaterial.dispose();\n }\n for (const uniqueId in babylonTextures) {\n for (const babylonMaterial of this._loader.babylonScene.materials) {\n if (babylonMaterial.hasTexture(babylonTextures[uniqueId])) {\n delete babylonTextures[uniqueId];\n }\n }\n }\n for (const uniqueId in babylonTextures) {\n babylonTextures[uniqueId].dispose();\n }\n }\n}\nGLTFLoader.RegisterExtension(NAME, (loader) => new MSFT_lod(loader));\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}
|