Pārlūkot izejas kodu

Merge pull request #6627 from sebavan/master

Fix RTT resize and ShadowGenerator
sebavan 6 gadi atpakaļ
vecāks
revīzija
f05200d1a8

+ 6 - 0
src/Lights/Shadows/shadowGenerator.ts

@@ -875,6 +875,12 @@ export class ShadowGenerator implements IShadowGenerator {
                 engine.clear(clearOne, true, true, false);
             }
         });
+
+        this._shadowMap.onResizeObservable.add((RTT) => {
+            this._mapSize = RTT.getRenderSize();
+            this._light._markMeshesAsLightDirty();
+            this.recreateShadowMap();
+        });
     }
 
     private _initializeBlurRTTAndPostProcesses(): void {

+ 16 - 0
src/Materials/Textures/renderTargetTexture.ts

@@ -199,6 +199,11 @@ export class RenderTargetTexture extends Texture {
     }
 
     /**
+     * An event triggered when the texture is resized.
+     */
+    public onResizeObservable = new Observable<RenderTargetTexture>();
+
+    /**
      * Define the clear color of the Render Target if it should be different from the scene.
      */
     public clearColor: Color4;
@@ -575,6 +580,10 @@ export class RenderTargetTexture extends Texture {
         } else {
             this._texture = scene.getEngine().createRenderTargetTexture(this._size, this._renderTargetOptions);
         }
+
+        if (this.onResizeObservable.hasObservers()) {
+            this.onResizeObservable.notifyObservers(this);
+        }
     }
 
     /**
@@ -945,6 +954,13 @@ export class RenderTargetTexture extends Texture {
      * Dispose the texture and release its associated resources.
      */
     public dispose(): void {
+        this.onResizeObservable.clear();
+        this.onClearObservable.clear();
+        this.onAfterRenderObservable.clear();
+        this.onAfterUnbindObservable.clear();
+        this.onBeforeBindObservable.clear();
+        this.onBeforeRenderObservable.clear();
+
         if (this._postProcessManager) {
             this._postProcessManager.dispose();
             this._postProcessManager = null;