Browse Source

making sure disposing is working correctly,
also for inherited viewers.

Raanan Weber 7 năm trước cách đây
mục cha
commit
36c0e95129

+ 2 - 1
Viewer/src/viewer/viewer.ts

@@ -33,7 +33,7 @@ export abstract class AbstractViewer {
     protected maxShadows: number;
     private _hdrSupport: boolean;
 
-    private _isDisposed: boolean;
+    protected _isDisposed: boolean = false;
 
     public get isHdrSupported() {
         return this._hdrSupport;
@@ -664,6 +664,7 @@ export abstract class AbstractViewer {
         this.engine.dispose();
 
         this.templateManager.dispose();
+        viewerManager.removeViewer(this);
         this._isDisposed = true;
     }
 

+ 7 - 2
Viewer/src/viewer/viewerManager.ts

@@ -1,5 +1,3 @@
-/// <reference path="../../../dist/preview release/babylon.d.ts"/>
-
 import { Observable } from 'babylonjs';
 import { AbstractViewer } from './viewer';
 
@@ -9,6 +7,7 @@ export class ViewerManager {
 
     public onViewerAdded: (viewer: AbstractViewer) => void;
     public onViewerAddedObservable: Observable<AbstractViewer>;
+    public onViewerRemovedObservable: Observable<string>;
 
     constructor() {
         this.viewers = {};
@@ -20,6 +19,12 @@ export class ViewerManager {
         this._onViewerAdded(viewer);
     }
 
+    public removeViewer(viewer: AbstractViewer) {
+        let id = viewer.getBaseId();
+        delete this.viewers[id];
+        this.onViewerRemovedObservable.notifyObservers(id);
+    }
+
     public getViewerById(id: string): AbstractViewer {
         return this.viewers[id];
     }

+ 3 - 0
dist/preview release/viewer/babylon.viewer.d.ts

@@ -91,7 +91,9 @@ declare module BabylonViewer {
     interface ViewerManager {
         onViewerAdded: (viewer: AbstractViewer) => void;
         onViewerAddedObservable: BABYLON.Observable<AbstractViewer>;
+        onViewerRemovedObservable: BABYLON.Observable<string>;
         addViewer(viewer: AbstractViewer): void;
+        removeViewer(viewer: AbstractViewer): void;
         getViewerById(id: string): AbstractViewer;
         getViewerByHTMLElement(element: HTMLElement): AbstractViewer | undefined;
         getViewerPromiseById(id: string): Promise<AbstractViewer>;
@@ -462,6 +464,7 @@ declare module BabylonViewer {
         protected defaultPipelineTextureType: number;
         protected maxShadows: number;
         readonly isHdrSupported: boolean;
+        protected _isDisposed: boolean;
         onSceneInitObservable: BABYLON.Observable<BABYLON.Scene>;
         onEngineInitObservable: BABYLON.Observable<BABYLON.Engine>;
         onModelLoadedObservable: BABYLON.Observable<ViewerModel>;