{"ast":null,"code":"import { Material } from \"../Materials/material.js\";\nimport { Tags } from \"../Misc/tags.js\";\nimport { RegisterClass } from \"../Misc/typeStore.js\";\n/**\n * A multi-material is used to apply different materials to different parts of the same object without the need of\n * separate meshes. This can be use to improve performances.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/multiMaterials\n */\nexport class MultiMaterial extends Material {\n /**\n * Gets or Sets the list of Materials used within the multi material.\n * They need to be ordered according to the submeshes order in the associated mesh\n */\n get subMaterials() {\n return this._subMaterials;\n }\n set subMaterials(value) {\n this._subMaterials = value;\n this._hookArray(value);\n }\n /**\n * Function used to align with Node.getChildren()\n * @returns the list of Materials used within the multi material\n */\n getChildren() {\n return this.subMaterials;\n }\n /**\n * Instantiates a new Multi Material\n * A multi-material is used to apply different materials to different parts of the same object without the need of\n * separate meshes. This can be use to improve performances.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/multiMaterials\n * @param name Define the name in the scene\n * @param scene Define the scene the material belongs to\n */\n constructor(name, scene) {\n super(name, scene, true);\n /** @internal */\n this._waitingSubMaterialsUniqueIds = [];\n this.getScene().addMultiMaterial(this);\n this.subMaterials = [];\n this._storeEffectOnSubMeshes = true; // multimaterial is considered like a push material\n }\n _hookArray(array) {\n const oldPush = array.push;\n array.push = (...items) => {\n const result = oldPush.apply(array, items);\n this._markAllSubMeshesAsTexturesDirty();\n return result;\n };\n const oldSplice = array.splice;\n array.splice = (index, deleteCount) => {\n const deleted = oldSplice.apply(array, [index, deleteCount]);\n this._markAllSubMeshesAsTexturesDirty();\n return deleted;\n };\n }\n /**\n * Get one of the submaterial by its index in the submaterials array\n * @param index The index to look the sub material at\n * @returns The Material if the index has been defined\n */\n getSubMaterial(index) {\n if (index < 0 || index >= this.subMaterials.length) {\n return this.getScene().defaultMaterial;\n }\n return this.subMaterials[index];\n }\n /**\n * Get the list of active textures for the whole sub materials list.\n * @returns All the textures that will be used during the rendering\n */\n getActiveTextures() {\n return super.getActiveTextures().concat(...this.subMaterials.map(subMaterial => {\n if (subMaterial) {\n return subMaterial.getActiveTextures();\n } else {\n return [];\n }\n }));\n }\n /**\n * Specifies if any sub-materials of this multi-material use a given texture.\n * @param texture Defines the texture to check against this multi-material's sub-materials.\n * @returns A boolean specifying if any sub-material of this multi-material uses the texture.\n */\n hasTexture(texture) {\n if (super.hasTexture(texture)) {\n return true;\n }\n for (let i = 0; i < this.subMaterials.length; i++) {\n var _this$subMaterials$i;\n if ((_this$subMaterials$i = this.subMaterials[i]) !== null && _this$subMaterials$i !== void 0 && _this$subMaterials$i.hasTexture(texture)) {\n return true;\n }\n }\n return false;\n }\n /**\n * Gets the current class name of the material e.g. \"MultiMaterial\"\n * Mainly use in serialization.\n * @returns the class name\n */\n getClassName() {\n return \"MultiMaterial\";\n }\n /**\n * Checks if the material is ready to render the requested sub mesh\n * @param mesh Define the mesh the submesh belongs to\n * @param subMesh Define the sub mesh to look readiness for\n * @param useInstances Define whether or not the material is used with instances\n * @returns true if ready, otherwise false\n */\n isReadyForSubMesh(mesh, subMesh, useInstances) {\n for (let index = 0; index < this.subMaterials.length; index++) {\n const subMaterial = this.subMaterials[index];\n if (subMaterial) {\n if (subMaterial._storeEffectOnSubMeshes) {\n if (!subMaterial.isReadyForSubMesh(mesh, subMesh, useInstances)) {\n return false;\n }\n continue;\n }\n if (!subMaterial.isReady(mesh)) {\n return false;\n }\n }\n }\n return true;\n }\n /**\n * Clones the current material and its related sub materials\n * @param name Define the name of the newly cloned material\n * @param cloneChildren Define if submaterial will be cloned or shared with the parent instance\n * @returns the cloned material\n */\n clone(name, cloneChildren) {\n const newMultiMaterial = new MultiMaterial(name, this.getScene());\n for (let index = 0; index < this.subMaterials.length; index++) {\n let subMaterial = null;\n const current = this.subMaterials[index];\n if (cloneChildren && current) {\n subMaterial = current.clone(name + \"-\" + current.name);\n } else {\n subMaterial = this.subMaterials[index];\n }\n newMultiMaterial.subMaterials.push(subMaterial);\n }\n return newMultiMaterial;\n }\n /**\n * Serializes the materials into a JSON representation.\n * @returns the JSON representation\n */\n serialize() {\n const serializationObject = {};\n serializationObject.name = this.name;\n serializationObject.id = this.id;\n serializationObject.uniqueId = this.uniqueId;\n if (Tags) {\n serializationObject.tags = Tags.GetTags(this);\n }\n serializationObject.materialsUniqueIds = [];\n serializationObject.materials = [];\n for (let matIndex = 0; matIndex < this.subMaterials.length; matIndex++) {\n const subMat = this.subMaterials[matIndex];\n if (subMat) {\n serializationObject.materialsUniqueIds.push(subMat.uniqueId);\n serializationObject.materials.push(subMat.id);\n } else {\n serializationObject.materialsUniqueIds.push(null);\n serializationObject.materials.push(null);\n }\n }\n return serializationObject;\n }\n /**\n * Dispose the material and release its associated resources\n * @param forceDisposeEffect Define if we want to force disposing the associated effect (if false the shader is not released and could be reuse later on)\n * @param forceDisposeTextures Define if we want to force disposing the associated textures (if false, they will not be disposed and can still be use elsewhere in the app)\n * @param forceDisposeChildren Define if we want to force disposing the associated submaterials (if false, they will not be disposed and can still be use elsewhere in the app)\n */\n dispose(forceDisposeEffect, forceDisposeTextures, forceDisposeChildren) {\n const scene = this.getScene();\n if (!scene) {\n return;\n }\n if (forceDisposeChildren) {\n for (let index = 0; index < this.subMaterials.length; index++) {\n const subMaterial = this.subMaterials[index];\n if (subMaterial) {\n subMaterial.dispose(forceDisposeEffect, forceDisposeTextures);\n }\n }\n }\n const index = scene.multiMaterials.indexOf(this);\n if (index >= 0) {\n scene.multiMaterials.splice(index, 1);\n }\n super.dispose(forceDisposeEffect, forceDisposeTextures);\n }\n /**\n * Creates a MultiMaterial from parsed MultiMaterial data.\n * @param parsedMultiMaterial defines parsed MultiMaterial data.\n * @param scene defines the hosting scene\n * @returns a new MultiMaterial\n */\n static ParseMultiMaterial(parsedMultiMaterial, scene) {\n const multiMaterial = new MultiMaterial(parsedMultiMaterial.name, scene);\n multiMaterial.id = parsedMultiMaterial.id;\n multiMaterial._loadedUniqueId = parsedMultiMaterial.uniqueId;\n if (Tags) {\n Tags.AddTagsTo(multiMaterial, parsedMultiMaterial.tags);\n }\n if (parsedMultiMaterial.materialsUniqueIds) {\n multiMaterial._waitingSubMaterialsUniqueIds = parsedMultiMaterial.materialsUniqueIds;\n } else {\n parsedMultiMaterial.materials.forEach(subMatId => multiMaterial.subMaterials.push(scene.getLastMaterialById(subMatId)));\n }\n return multiMaterial;\n }\n}\nRegisterClass(\"BABYLON.MultiMaterial\", MultiMaterial);","map":{"version":3,"names":["Material","Tags","RegisterClass","MultiMaterial","subMaterials","_subMaterials","value","_hookArray","getChildren","constructor","name","scene","_waitingSubMaterialsUniqueIds","getScene","addMultiMaterial","_storeEffectOnSubMeshes","array","oldPush","push","items","result","apply","_markAllSubMeshesAsTexturesDirty","oldSplice","splice","index","deleteCount","deleted","getSubMaterial","length","defaultMaterial","getActiveTextures","concat","map","subMaterial","hasTexture","texture","i","_this$subMaterials$i","getClassName","isReadyForSubMesh","mesh","subMesh","useInstances","isReady","clone","cloneChildren","newMultiMaterial","current","serialize","serializationObject","id","uniqueId","tags","GetTags","materialsUniqueIds","materials","matIndex","subMat","dispose","forceDisposeEffect","forceDisposeTextures","forceDisposeChildren","multiMaterials","indexOf","ParseMultiMaterial","parsedMultiMaterial","multiMaterial","_loadedUniqueId","AddTagsTo","forEach","subMatId","getLastMaterialById"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Materials/multiMaterial.js"],"sourcesContent":["import { Material } from \"../Materials/material.js\";\nimport { Tags } from \"../Misc/tags.js\";\nimport { RegisterClass } from \"../Misc/typeStore.js\";\n/**\n * A multi-material is used to apply different materials to different parts of the same object without the need of\n * separate meshes. This can be use to improve performances.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/multiMaterials\n */\nexport class MultiMaterial extends Material {\n /**\n * Gets or Sets the list of Materials used within the multi material.\n * They need to be ordered according to the submeshes order in the associated mesh\n */\n get subMaterials() {\n return this._subMaterials;\n }\n set subMaterials(value) {\n this._subMaterials = value;\n this._hookArray(value);\n }\n /**\n * Function used to align with Node.getChildren()\n * @returns the list of Materials used within the multi material\n */\n getChildren() {\n return this.subMaterials;\n }\n /**\n * Instantiates a new Multi Material\n * A multi-material is used to apply different materials to different parts of the same object without the need of\n * separate meshes. This can be use to improve performances.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/multiMaterials\n * @param name Define the name in the scene\n * @param scene Define the scene the material belongs to\n */\n constructor(name, scene) {\n super(name, scene, true);\n /** @internal */\n this._waitingSubMaterialsUniqueIds = [];\n this.getScene().addMultiMaterial(this);\n this.subMaterials = [];\n this._storeEffectOnSubMeshes = true; // multimaterial is considered like a push material\n }\n _hookArray(array) {\n const oldPush = array.push;\n array.push = (...items) => {\n const result = oldPush.apply(array, items);\n this._markAllSubMeshesAsTexturesDirty();\n return result;\n };\n const oldSplice = array.splice;\n array.splice = (index, deleteCount) => {\n const deleted = oldSplice.apply(array, [index, deleteCount]);\n this._markAllSubMeshesAsTexturesDirty();\n return deleted;\n };\n }\n /**\n * Get one of the submaterial by its index in the submaterials array\n * @param index The index to look the sub material at\n * @returns The Material if the index has been defined\n */\n getSubMaterial(index) {\n if (index < 0 || index >= this.subMaterials.length) {\n return this.getScene().defaultMaterial;\n }\n return this.subMaterials[index];\n }\n /**\n * Get the list of active textures for the whole sub materials list.\n * @returns All the textures that will be used during the rendering\n */\n getActiveTextures() {\n return super.getActiveTextures().concat(...this.subMaterials.map((subMaterial) => {\n if (subMaterial) {\n return subMaterial.getActiveTextures();\n }\n else {\n return [];\n }\n }));\n }\n /**\n * Specifies if any sub-materials of this multi-material use a given texture.\n * @param texture Defines the texture to check against this multi-material's sub-materials.\n * @returns A boolean specifying if any sub-material of this multi-material uses the texture.\n */\n hasTexture(texture) {\n if (super.hasTexture(texture)) {\n return true;\n }\n for (let i = 0; i < this.subMaterials.length; i++) {\n if (this.subMaterials[i]?.hasTexture(texture)) {\n return true;\n }\n }\n return false;\n }\n /**\n * Gets the current class name of the material e.g. \"MultiMaterial\"\n * Mainly use in serialization.\n * @returns the class name\n */\n getClassName() {\n return \"MultiMaterial\";\n }\n /**\n * Checks if the material is ready to render the requested sub mesh\n * @param mesh Define the mesh the submesh belongs to\n * @param subMesh Define the sub mesh to look readiness for\n * @param useInstances Define whether or not the material is used with instances\n * @returns true if ready, otherwise false\n */\n isReadyForSubMesh(mesh, subMesh, useInstances) {\n for (let index = 0; index < this.subMaterials.length; index++) {\n const subMaterial = this.subMaterials[index];\n if (subMaterial) {\n if (subMaterial._storeEffectOnSubMeshes) {\n if (!subMaterial.isReadyForSubMesh(mesh, subMesh, useInstances)) {\n return false;\n }\n continue;\n }\n if (!subMaterial.isReady(mesh)) {\n return false;\n }\n }\n }\n return true;\n }\n /**\n * Clones the current material and its related sub materials\n * @param name Define the name of the newly cloned material\n * @param cloneChildren Define if submaterial will be cloned or shared with the parent instance\n * @returns the cloned material\n */\n clone(name, cloneChildren) {\n const newMultiMaterial = new MultiMaterial(name, this.getScene());\n for (let index = 0; index < this.subMaterials.length; index++) {\n let subMaterial = null;\n const current = this.subMaterials[index];\n if (cloneChildren && current) {\n subMaterial = current.clone(name + \"-\" + current.name);\n }\n else {\n subMaterial = this.subMaterials[index];\n }\n newMultiMaterial.subMaterials.push(subMaterial);\n }\n return newMultiMaterial;\n }\n /**\n * Serializes the materials into a JSON representation.\n * @returns the JSON representation\n */\n serialize() {\n const serializationObject = {};\n serializationObject.name = this.name;\n serializationObject.id = this.id;\n serializationObject.uniqueId = this.uniqueId;\n if (Tags) {\n serializationObject.tags = Tags.GetTags(this);\n }\n serializationObject.materialsUniqueIds = [];\n serializationObject.materials = [];\n for (let matIndex = 0; matIndex < this.subMaterials.length; matIndex++) {\n const subMat = this.subMaterials[matIndex];\n if (subMat) {\n serializationObject.materialsUniqueIds.push(subMat.uniqueId);\n serializationObject.materials.push(subMat.id);\n }\n else {\n serializationObject.materialsUniqueIds.push(null);\n serializationObject.materials.push(null);\n }\n }\n return serializationObject;\n }\n /**\n * Dispose the material and release its associated resources\n * @param forceDisposeEffect Define if we want to force disposing the associated effect (if false the shader is not released and could be reuse later on)\n * @param forceDisposeTextures Define if we want to force disposing the associated textures (if false, they will not be disposed and can still be use elsewhere in the app)\n * @param forceDisposeChildren Define if we want to force disposing the associated submaterials (if false, they will not be disposed and can still be use elsewhere in the app)\n */\n dispose(forceDisposeEffect, forceDisposeTextures, forceDisposeChildren) {\n const scene = this.getScene();\n if (!scene) {\n return;\n }\n if (forceDisposeChildren) {\n for (let index = 0; index < this.subMaterials.length; index++) {\n const subMaterial = this.subMaterials[index];\n if (subMaterial) {\n subMaterial.dispose(forceDisposeEffect, forceDisposeTextures);\n }\n }\n }\n const index = scene.multiMaterials.indexOf(this);\n if (index >= 0) {\n scene.multiMaterials.splice(index, 1);\n }\n super.dispose(forceDisposeEffect, forceDisposeTextures);\n }\n /**\n * Creates a MultiMaterial from parsed MultiMaterial data.\n * @param parsedMultiMaterial defines parsed MultiMaterial data.\n * @param scene defines the hosting scene\n * @returns a new MultiMaterial\n */\n static ParseMultiMaterial(parsedMultiMaterial, scene) {\n const multiMaterial = new MultiMaterial(parsedMultiMaterial.name, scene);\n multiMaterial.id = parsedMultiMaterial.id;\n multiMaterial._loadedUniqueId = parsedMultiMaterial.uniqueId;\n if (Tags) {\n Tags.AddTagsTo(multiMaterial, parsedMultiMaterial.tags);\n }\n if (parsedMultiMaterial.materialsUniqueIds) {\n multiMaterial._waitingSubMaterialsUniqueIds = parsedMultiMaterial.materialsUniqueIds;\n }\n else {\n parsedMultiMaterial.materials.forEach((subMatId) => multiMaterial.subMaterials.push(scene.getLastMaterialById(subMatId)));\n }\n return multiMaterial;\n }\n}\nRegisterClass(\"BABYLON.MultiMaterial\", MultiMaterial);\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}