Browse Source

Fix NeedRebind

sebavan 6 years ago
parent
commit
275282b3af
3 changed files with 14 additions and 4 deletions
  1. 6 1
      src/Layers/effectLayerSceneComponent.ts
  2. 3 3
      src/scene.ts
  3. 5 0
      src/sceneComponent.ts

+ 6 - 1
src/Layers/effectLayerSceneComponent.ts

@@ -189,10 +189,12 @@ export class EffectLayerSceneComponent implements ISceneSerializableComponent {
         return true;
     }
 
-    private _renderMainTexture(camera: Camera): void {
+    private _renderMainTexture(camera: Camera): boolean {
         this._renderEffects = false;
         this._needStencil = false;
 
+        let needRebind = false;
+
         let layers = this.scene.effectLayers;
         if (layers && layers.length > 0) {
             this._previousStencilState = this._engine.getStencilBuffer();
@@ -209,12 +211,15 @@ export class EffectLayerSceneComponent implements ISceneSerializableComponent {
                     if (renderTarget._shouldRender()) {
                         this.scene.incrementRenderId();
                         renderTarget.render(false, false);
+                        needRebind = true;
                     }
                 }
             }
 
             this.scene.incrementRenderId();
         }
+
+        return needRebind;
     }
 
     private _setStencil() {

+ 3 - 3
src/scene.ts

@@ -35,7 +35,7 @@ import { PostProcess } from "./PostProcesses/postProcess";
 import { PostProcessManager } from "./PostProcesses/postProcessManager";
 import { IOfflineProvider } from "./Offline/IOfflineProvider";
 import { RenderingGroupInfo, RenderingManager, IRenderingManagerAutoClearSetup } from "./Rendering/renderingManager";
-import { ISceneComponent, ISceneSerializableComponent, Stage, SimpleStageAction, RenderTargetsStageAction, RenderTargetStageAction, MeshStageAction, EvaluateSubMeshStageAction, ActiveMeshStageAction, CameraStageAction, RenderingGroupStageAction, RenderingMeshStageAction, PointerMoveStageAction, PointerUpDownStageAction } from "./sceneComponent";
+import { ISceneComponent, ISceneSerializableComponent, Stage, SimpleStageAction, RenderTargetsStageAction, RenderTargetStageAction, MeshStageAction, EvaluateSubMeshStageAction, ActiveMeshStageAction, CameraStageAction, RenderingGroupStageAction, RenderingMeshStageAction, PointerMoveStageAction, PointerUpDownStageAction, CameraStageFrameBufferAction } from "./sceneComponent";
 import { Engine } from "./Engines/engine";
 import { Node } from "./node";
 import { MorphTarget } from "./Morph/morphTarget";
@@ -1256,7 +1256,7 @@ export class Scene extends AbstractScene implements IAnimatable {
      * @hidden
      * Defines the actions happening during the per camera render target step.
      */
-    public _cameraDrawRenderTargetStage = Stage.Create<CameraStageAction>();
+    public _cameraDrawRenderTargetStage = Stage.Create<CameraStageFrameBufferAction>();
     /**
      * @hidden
      * Defines the actions happening just before the active camera is drawing.
@@ -4126,7 +4126,7 @@ export class Scene extends AbstractScene implements IAnimatable {
             }
 
             for (let step of this._cameraDrawRenderTargetStage) {
-                step.action(this.activeCamera);
+                needRebind = needRebind || step.action(this.activeCamera);
             }
 
             this._intermediateRendering = false;

+ 5 - 0
src/sceneComponent.ts

@@ -161,6 +161,11 @@ export type ActiveMeshStageAction = (sourceMesh: AbstractMesh, mesh: AbstractMes
 export type CameraStageAction = (camera: Camera) => void;
 
 /**
+ * Strong typing of a Camera Frame buffer related stage step action
+ */
+export type CameraStageFrameBufferAction = (camera: Camera) => boolean;
+
+/**
  * Strong typing of a Render Target related stage step action
  */
 export type RenderTargetStageAction = (renderTarget: RenderTargetTexture) => void;