瀏覽代碼

Disable mesh instancing selectively and not globally

Popov72 5 年之前
父節點
當前提交
3d59835235
共有 2 個文件被更改,包括 6 次插入5 次删除
  1. 4 3
      loaders/src/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.ts
  2. 2 2
      loaders/src/glTF/2.0/glTFLoader.ts

+ 4 - 3
loaders/src/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.ts

@@ -36,9 +36,6 @@ export class EXT_mesh_gpu_instancing implements IGLTFLoaderExtension {
     constructor(loader: GLTFLoader) {
         this._loader = loader;
         this.enabled = this._loader.isExtensionUsed(NAME);
-        if (this.enabled) {
-            loader._disableInstancedMesh = true;
-        }
     }
 
     /** @hidden */
@@ -49,8 +46,12 @@ export class EXT_mesh_gpu_instancing implements IGLTFLoaderExtension {
     /** @hidden */
     public loadNodeAsync(context: string, node: INode, assign: (babylonTransformNode: TransformNode) => void): Nullable<Promise<TransformNode>> {
         return GLTFLoader.LoadExtensionAsync<IEXTMeshGpuInstancing, TransformNode>(context, node, this.name, (extensionContext, extension) => {
+            this._loader._disableInstancedMesh++;
+
             const promise = this._loader.loadNodeAsync(`#/nodes/${node.index}`, node, assign);
 
+            this._loader._disableInstancedMesh--;
+
             if (!node._primitiveBabylonMeshes) {
                 return promise;
             }

+ 2 - 2
loaders/src/glTF/2.0/glTFLoader.ts

@@ -107,7 +107,7 @@ export class GLTFLoader implements IGLTFLoader {
     public _babylonLights: Light[] = [];
 
     /** @hidden */
-    public _disableInstancedMesh = false;
+    public _disableInstancedMesh = 0;
 
     private _disposed = false;
     private _parent: GLTFFileLoader;
@@ -780,7 +780,7 @@ export class GLTFLoader implements IGLTFLoader {
 
         this.logOpen(`${context}`);
 
-        const shouldInstance = !this._disableInstancedMesh && this._parent.createInstances && (node.skin == undefined && !mesh.primitives[0].targets);
+        const shouldInstance = (this._disableInstancedMesh === 0) && this._parent.createInstances && (node.skin == undefined && !mesh.primitives[0].targets);
 
         let babylonAbstractMesh: AbstractMesh;
         let promise: Promise<any>;