Ver código fonte

Final fix for asset containers

David Catuhe 5 anos atrás
pai
commit
fbc865a872
2 arquivos alterados com 16 adições e 0 exclusões
  1. 3 0
      src/Misc/brdfTextureTools.ts
  2. 13 0
      src/assetContainer.ts

+ 3 - 0
src/Misc/brdfTextureTools.ts

@@ -18,7 +18,10 @@ export class BRDFTextureTools {
             var useDelayedTextureLoading = scene.useDelayedTextureLoading;
             scene.useDelayedTextureLoading = false;
 
+            const previousState = scene._blockEntityCollection;
+            scene._blockEntityCollection = false;
             var texture = Texture.CreateFromBase64String(this._environmentBRDFBase64Texture, "EnvironmentBRDFTexture", scene, true, false, Texture.BILINEAR_SAMPLINGMODE);
+            scene._blockEntityCollection = previousState;
             // BRDF Texture should not be cached here due to pre processing and redundant scene caches.
             var texturesCache = scene.getEngine().getLoadedTexturesCache();
             var index = texturesCache.indexOf(texture.getInternalTexture()!);

+ 13 - 0
src/assetContainer.ts

@@ -42,6 +42,8 @@ export class InstantiatedEntries {
  * Container with a set of assets that can be added or removed from a scene.
  */
 export class AssetContainer extends AbstractScene {
+    private _wasAddedToScene = false;
+
     /**
      * The scene the AssetContainer belongs to.
      */
@@ -60,6 +62,12 @@ export class AssetContainer extends AbstractScene {
         this["lensFlareSystems"] = [];
         this["proceduralTextures"] = [];
         this["reflectionProbes"] = [];
+
+        scene.onDisposeObservable.add(() => {
+            if (!this._wasAddedToScene) {
+                this.dispose();
+            }
+        });
     }
 
     /**
@@ -221,6 +229,8 @@ export class AssetContainer extends AbstractScene {
      * Adds all the assets from the container to the scene.
      */
     public addAllToScene() {
+        this._wasAddedToScene = true;
+
         this.cameras.forEach((o) => {
             this.scene.addCamera(o);
         });
@@ -277,6 +287,8 @@ export class AssetContainer extends AbstractScene {
      * Removes all the assets in the container from the scene
      */
     public removeAllFromScene() {
+        this._wasAddedToScene = false;
+
         this.cameras.forEach((o) => {
             this.scene.removeCamera(o);
         });
@@ -430,6 +442,7 @@ export class AssetContainer extends AbstractScene {
      * @param keepAssets Set of assets to keep in the scene. (default: empty)
      */
     public moveAllFromScene(keepAssets?: KeepAssets): void {
+        this._wasAddedToScene = false;
 
         if (keepAssets === undefined) {
             keepAssets = new KeepAssets();