|
@@ -249,45 +249,44 @@ export default class XAvatarLoader {
|
|
|
if (this.containers.get(aniModelPath))
|
|
|
return model.dispose(),
|
|
|
this.containers.get(aniModelPath);
|
|
|
- if (model.addAllToScene(),
|
|
|
- this.enableShareTexture && model.textures.length > 0) {
|
|
|
+ model.addAllToScene()
|
|
|
+ if (this.enableShareTexture && model.textures.length > 0) {
|
|
|
const d = [];
|
|
|
- let _ = !1;
|
|
|
- model.meshes.forEach(b=>{
|
|
|
- if (b.material) {
|
|
|
- const k = b.material._albedoTexture;
|
|
|
- if (k) {
|
|
|
- let j = k.name;
|
|
|
- j = j.replace(" (Base Color)", "").split(".")[0];
|
|
|
- const $ = this._sharedTex.get(j);
|
|
|
- $ ? (
|
|
|
- _ = !0,
|
|
|
- b.material._albedoTexture = $,
|
|
|
- d.push($),
|
|
|
- $._parentContainer = model,
|
|
|
- $.xReferenceCount++
|
|
|
+ let hasSameTex = false;
|
|
|
+ model.meshes.forEach(mesh=>{
|
|
|
+ if (mesh.material) {
|
|
|
+ const albedoTexture = mesh.material._albedoTexture;
|
|
|
+ if (albedoTexture) {
|
|
|
+ let albedoTexName = albedoTexture.name;
|
|
|
+ albedoTexName = albedoTexName.replace(" (Base Color)", "").split(".")[0];
|
|
|
+ const oldTex = this._sharedTex.get(albedoTexName);
|
|
|
+ oldTex ? (
|
|
|
+ hasSameTex = true,
|
|
|
+ mesh.material._albedoTexture = oldTex,
|
|
|
+ d.push(oldTex),
|
|
|
+ oldTex._parentContainer = model,
|
|
|
+ oldTex.xReferenceCount++
|
|
|
) : (
|
|
|
- this._sharedTex.set(j, k),
|
|
|
+ this._sharedTex.set(albedoTexName, albedoTexture),
|
|
|
model.textures[0].xReferenceCount = 1
|
|
|
)
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
- ),
|
|
|
- _ && (model.textures.forEach(b=>{
|
|
|
- sceneManager.Scene.removeTexture(b),
|
|
|
- b.dispose()
|
|
|
- }
|
|
|
- ),
|
|
|
- model.textures = d)
|
|
|
- }
|
|
|
- return model.xReferenceCount = 0,
|
|
|
- model.meshes.forEach(d=>{
|
|
|
- d.setEnabled(!1)
|
|
|
+ })
|
|
|
+ hasSameTex && (
|
|
|
+ model.textures.forEach(tex=>{
|
|
|
+ sceneManager.Scene.removeTexture(tex)
|
|
|
+ // tex.dispose() // zeg 这个加上会导致贴图丢失
|
|
|
+ }),
|
|
|
+ model.textures = d
|
|
|
+ )
|
|
|
}
|
|
|
- ),
|
|
|
- this.containers.set(aniModelPath, model),
|
|
|
- Promise.resolve(model)
|
|
|
+ model.xReferenceCount = 0
|
|
|
+ model.meshes.forEach(mesh=>{
|
|
|
+ mesh.setEnabled(false)
|
|
|
+ })
|
|
|
+ this.containers.set(aniModelPath, model)
|
|
|
+ return Promise.resolve(model)
|
|
|
} else
|
|
|
return Promise.reject("glb file load failed")
|
|
|
}
|