소스 검색

Add new observable to help with separateCullingPass

David Catuhe 5 년 전
부모
커밋
ceb136a52f
1개의 변경된 파일21개의 추가작업 그리고 1개의 파일을 삭제
  1. 21 1
      src/Meshes/mesh.ts

+ 21 - 1
src/Meshes/mesh.ts

@@ -110,7 +110,8 @@ class _InternalMeshDataInfo {
     public _onBeforeRenderObservable: Nullable<Observable<Mesh>>;
     public _onBeforeBindObservable: Nullable<Observable<Mesh>>;
     public _onAfterRenderObservable: Nullable<Observable<Mesh>>;
-    public _onBeforeDrawObservable: Nullable<Observable<Mesh>>;
+    public _onBeforeDrawObservable: Nullable<Observable<Mesh>>;    
+    public _onBetweenPassObservable: Nullable<Observable<Mesh>>;
 
     public _areNormalsFrozen: boolean = false; // Will be used by ribbons mainly
     public _sourcePositions: Float32Array; // Will be used to save original positions when using software skinning
@@ -283,6 +284,17 @@ export class Mesh extends AbstractMesh implements IGetSetVerticesData {
     }
 
     /**
+    * An event triggeredbetween rendering pass wneh using separateCullingPass = true
+    */
+   public get onBetweenPassObservable(): Observable<Mesh> {
+    if (!this._internalMeshDataInfo._onBetweenPassObservable) {
+        this._internalMeshDataInfo._onBetweenPassObservable = new Observable<Mesh>();
+    }
+
+    return this._internalMeshDataInfo._onBetweenPassObservable;
+}
+
+    /**
     * An event triggered before drawing the mesh
     */
     public get onBeforeDrawObservable(): Observable<Mesh> {
@@ -1997,6 +2009,10 @@ export class Mesh extends AbstractMesh implements IGetSetVerticesData {
             engine.setState(true, this._effectiveMaterial.zOffset, false, !reverse);
             this._processRendering(this, subMesh, effect, fillMode, batch, hardwareInstancedRendering, this._onBeforeDraw, this._effectiveMaterial);
             engine.setState(true, this._effectiveMaterial.zOffset, false, reverse);
+
+            if (this._internalMeshDataInfo._onBetweenPassObservable) {
+                this._internalMeshDataInfo._onBetweenPassObservable.notifyObservers(this);
+            }
         }
 
         // Draw
@@ -2422,6 +2438,10 @@ export class Mesh extends AbstractMesh implements IGetSetVerticesData {
             internalDataInfo._onAfterRenderObservable.clear();
         }
 
+        if (internalDataInfo._onBetweenPassObservable) {
+            internalDataInfo._onBetweenPassObservable.clear();
+        }
+
         // Sources
         if (this._scene.useClonedMeshMap) {
             if (internalDataInfo.meshMap) {