소스 검색

Canvas2D rendering is now using Scene Observables instead of hardcoded code. https://trello.com/c/RZc1nsJu

nockawa 9 년 전
부모
커밋
01d50d116d
2개의 변경된 파일26개의 추가작업 그리고 15개의 파일을 삭제
  1. 26 1
      src/Canvas2d/babylon.canvas2d.ts
  2. 0 14
      src/babylon.scene.ts

+ 26 - 1
src/Canvas2d/babylon.canvas2d.ts

@@ -85,6 +85,28 @@
                 this._background.levelVisible = false;
             }
             this._isScreeSpace = isScreenSpace;
+
+            if (this._isScreeSpace) {
+                this._afterRenderObserver = this._scene.onAfterRenderObservable.add((d, s) => {
+                    this.render();
+                });
+            }
+        }
+
+        public dispose(): boolean {
+            if (!super.dispose()) {
+                return false;
+            }
+
+            if (this._beforeRenderObserver) {
+                this._scene.onBeforeRenderObservable.remove(this._beforeRenderObserver);
+                this._beforeRenderObserver = null;
+            }
+
+            if (this._afterRenderObserver) {
+                this._scene.onAfterRenderObservable.remove(this._afterRenderObserver);
+                this._afterRenderObserver = null;
+            }
         }
 
         /**
@@ -189,13 +211,16 @@
         private _hierarchyLevelMaxSiblingCount: number;
         private _hierarchySiblingZDelta: number;
         private _groupCacheMaps: MapTexture[];
+        private _beforeRenderObserver: Observer<Scene>;
+        private _afterRenderObserver: Observer<Scene>;
+
         public _renderingSize: Size;
 
         /**
          * Method that renders the Canvas
          * @param camera the current camera.
          */
-        public render(camera: Camera) {
+        public render() {
             this._renderingSize.width = this.engine.getRenderWidth();
             this._renderingSize.height = this.engine.getRenderHeight();
 

+ 0 - 14
src/babylon.scene.ts

@@ -438,8 +438,6 @@
 
         private _debugLayer: DebugLayer;
 
-        private _screenCanvas: Canvas2D;
-
         private _depthRenderer: DepthRenderer;
 
         private _uniqueIdCounter = 0;
@@ -472,8 +470,6 @@
 
             this._debugLayer = new DebugLayer(this);
 
-            this._screenCanvas = Canvas2D.CreateScreenSpace(this, "ScreenCanvas", new Vector2(0, 0), new Size(engine.getRenderWidth(), engine.getRenderHeight()), Canvas2D.CACHESTRATEGY_TOPLEVELGROUPS);
-
             if (SoundTrack) {
                 this.mainSoundTrack = new SoundTrack(this, { mainTrack: true });
             }
@@ -492,10 +488,6 @@
             return this._debugLayer;
         }
 
-        public get screenCanvas(): Canvas2D {
-            return this._screenCanvas;
-        }
-
         public set workerCollisions(enabled: boolean) {
 
             enabled = (enabled && !!Worker);
@@ -1938,9 +1930,6 @@
             this._renderingManager.render(null, null, true, true);
             Tools.EndPerformanceCounter("Main render");
 
-            // Screen Canvas render
-            this._screenCanvas.render(camera);
-
             // Bounding boxes
             this._boundingBoxRenderer.render();
 
@@ -2371,9 +2360,6 @@
             // Debug layer
             this.debugLayer.hide();
 
-            // Screen Canvas
-            this._screenCanvas.dispose();
-
             // Events
             if (this.onDispose) {
                 this.onDispose();