Bläddra i källkod

Adding new post process: displayPassPostProcess.
Updating babylonJS.xml

michael-korbas 11 år sedan
förälder
incheckning
a856c66147

+ 18 - 2
Babylon/PostProcess/RenderPipeline/babylon.renderEffect.js

@@ -85,6 +85,10 @@ var BABYLON = BABYLON || {};
 			if (this._cameras.indexOf(cameras[i].name) == -1) {
 				this._cameras.push(cameras[i].name);
 			}
+
+			for (var passName in this._renderPasses) {
+			    this._renderPasses[passName].incRefCount();
+			}
 		}
 
 		this._linkParameters();
@@ -103,6 +107,10 @@ var BABYLON = BABYLON || {};
 
 			this._indicesForCamera.splice(cameras[i].name, 1);
 			this._cameras.splice(this._cameras.indexOf(cameras[i].name), 1);
+
+			for (var passName in this._renderPasses) {
+			    this._renderPasses[passName].decRefCount();
+			}
 		}
 	};
 
@@ -116,7 +124,7 @@ var BABYLON = BABYLON || {};
 		}
 	};
 
-	BABYLON.RenderEffect.prototype._linkTextures = function () {
+	BABYLON.RenderEffect.prototype._linkTextures = function (effect) {
         for (var renderPassName in this._renderPasses) {
             effect.setTexture(renderPassName, this._renderPasses[renderPassName].getRenderTexture());
         }
@@ -147,6 +155,10 @@ var BABYLON = BABYLON || {};
 					}
 				}
 			}
+
+			for (var passName in this._renderPasses) {
+			    this._renderPasses[passName].incRefCount();
+			}
 		}
 	};
 
@@ -159,7 +171,11 @@ var BABYLON = BABYLON || {};
 			}
 			else {
 				cameras[i].detachPostProcess(this._postProcesses[cameras[i].name], this._indicesForCamera[cameras[i].name]);
-			}
+		    }
+
+		    for (var passName in this._renderPasses) {
+		        this._renderPasses[passName].decRefCount();
+		    }
 		}
 	};
 

+ 4 - 3
Babylon/PostProcess/RenderPipeline/babylon.renderPass.js

@@ -15,13 +15,14 @@ var BABYLON = BABYLON || {};
 		this._renderTexture.onBeforeRender = beforeRender;
 		this._renderTexture.onAfterRender = afterRender;
 
-		this._refCount = 0;
+		this._scene = scene;
 
+		this._refCount = 0;
 	};
 
 	BABYLON.RenderPass.prototype.incRefCount = function () {
 	    if (this._refCount == 0) {
-	        scene.customRenderTargets.push(this._renderTexture);
+	        this._scene.customRenderTargets.push(this._renderTexture);
 	    }
 
 	    this._refCount++;
@@ -31,7 +32,7 @@ var BABYLON = BABYLON || {};
 	    this._refCount--;
 
 	    if (this._refCount <= 0) {
-	        scene.customRenderTargets.splice(scene.customRenderTargets.indexOf(this._renderTexture), 1);
+	        this._scene.customRenderTargets.splice(this._scene.customRenderTargets.indexOf(this._renderTexture), 1);
 	    }
 	};
 

+ 2 - 2
Babylon/PostProcess/RenderPipeline/babylon.renderPipeline.js

@@ -101,10 +101,10 @@ var BABYLON = BABYLON || {};
 		pass._name = BABYLON.RenderPipeline.PASS_SAMPLER_NAME;
 		
 		for (var i = 0; i < cameras.length; i++) {
-			this._renderEffectsPasses[cameras[i].name] = this._renderEffectsPasses[cameras[i].name] || new BABYLON.RenderEffect(this._engine, BABYLON.RenderPipeline.PASS_EFFECT_NAME, "BABYLON.PassPostProcess");
-			this._renderEffectsPasses[cameras[i].name].attachCameras(cameras[i]);
+		    this._renderEffectsPasses[cameras[i].name] = this._renderEffectsPasses[cameras[i].name] || new BABYLON.RenderEffect(this._engine, BABYLON.RenderPipeline.PASS_EFFECT_NAME, "BABYLON.DisplayPassPostProcess", 1.0);
 			this._renderEffectsPasses[cameras[i].name].emptyPasses();
 			this._renderEffectsPasses[cameras[i].name].addPass(pass);
+			this._renderEffectsPasses[cameras[i].name].attachCameras(cameras[i]);
 		}
 	};
 

+ 11 - 0
Babylon/PostProcess/babylon.displayPassPostProcess.js

@@ -0,0 +1,11 @@
+"use strict";
+
+var BABYLON = BABYLON || {};
+
+(function () {
+    BABYLON.DisplayPassPostProcess = function (name, ratio, camera, samplingMode, engine, reusable) {
+        BABYLON.PostProcess.call(this, name, "displayPass", ["passSampler"], ["passSampler"], ratio, camera, samplingMode, engine, reusable);
+    };
+
+    BABYLON.DisplayPassPostProcess.prototype = Object.create(BABYLON.PostProcess.prototype);
+})();

+ 13 - 0
Babylon/Shaders/displayPass.fragment.fx

@@ -0,0 +1,13 @@
+#ifdef GL_ES
+precision mediump float;
+#endif
+
+// Samplers
+varying vec2 vUV;
+uniform sampler2D textureSampler;
+uniform sampler2D passSampler;
+
+void main(void)
+{
+    gl_FragColor = texture2D(passSampler, vUV);
+}

+ 5 - 0
Tools/BuildOurOwnBabylonJS/BuildOurOwnBabylonJS/babylonJS.xml

@@ -15,6 +15,11 @@
   <script src="Babylon/Collisions/babylon.pickingInfo.js"></script>
   <script src="Babylon/LensFlare/babylon.lensFlareSystem.js"></script>
   <script src="Babylon/LensFlare/babylon.lensFlare.js"></script>
+  <script src="Babylon/PostProcess/RenderPipeline/babylon.renderPass.js"></script>
+  <script src="Babylon/PostProcess/RenderPipeline/babylon.renderEffect.js"></script>
+  <script src="Babylon/PostProcess/RenderPipeline/babylon.renderPipeline.js"></script>
+  <script src="Babylon/PostProcess/RenderPipeline/babylon.renderPipelineManager.js"></script>
+  <script src="Babylon/PostProcess/babylon.displayPassPostProcess.js"></script>
   <script src="Babylon/PostProcess/babylon.fxaaPostProcess.js"></script>
   <script src="Babylon/PostProcess/babylon.filterPostProcess.js"></script>
   <script src="Babylon/PostProcess/babylon.convolutionPostProcess.js"></script>