浏览代码

use mix to blend, avoid division by 0

Trevor Baron 7 年之前
父节点
当前提交
d42237ed9b
共有 2 个文件被更改,包括 5 次插入1 次删除
  1. 1 1
      src/Shaders/depthOfFieldMerge.fragment.fx
  2. 4 0
      src/Shaders/kernelBlur.fragment.fx

+ 1 - 1
src/Shaders/depthOfFieldMerge.fragment.fx

@@ -11,5 +11,5 @@ void main(void)
     vec4 blurred = texture2D(textureSampler, vUV);
     vec4 original = texture2D(originalSampler, vUV);
     float coc = texture2D(circleOfConfusionSampler, vUV).r;
-    gl_FragColor = (original * (1.0-coc))+(blurred*coc);
+    gl_FragColor = mix(original, blurred, coc);
 }

+ 4 - 0
src/Shaders/kernelBlur.fragment.fx

@@ -65,6 +65,10 @@ void main(void)
 	#endif
 
 	#ifdef DOF
+		// If there are no samples to blend, make pixel black.
+		if(sumOfWeights == 0.0){
+			gl_FragColor = vec4(0.0,0.0,0.0,1.0);
+		}
 		gl_FragColor /= sumOfWeights;
 	#endif
 }