Ver código fonte

Use Shader Defines for Bokeh Shader 2

- from `THREE.BokehShader.generate(rings, samples);`
- to `material.defines = {RINGS: rings, SAMPLES}`
- thanks to @gyro3 suggestion in #3182
zz85 12 anos atrás
pai
commit
e216c173c7

+ 5 - 32
examples/js/shaders/BokehShader2.js

@@ -4,6 +4,8 @@
  * Depth-of-field shader with bokeh
  * ported from GLSL shader by Martins Upitis
  * http://blenderartists.org/forum/showthread.php?237488-GLSL-depth-of-field-with-bokeh-v2-4-(update)
+ *
+ * Requires #define RINGS and SAMPLES integers
  */
 
 
@@ -91,8 +93,8 @@ THREE.BokehShader = {
 		"//------------------------------------------",
 		"//user variables",
 
-		"const int samples = #SAMPLES#; //samples on the first ring",
-		"const int rings = #RINGS#; //ring count",
+		"const int samples = SAMPLES; //samples on the first ring",
+		"const int rings = RINGS; //ring count",
 
 		"const int maxringsamples = rings * samples;",
 
@@ -371,35 +373,6 @@ THREE.BokehShader = {
 			"gl_FragColor.a = 1.0;",
 		"} "
 
-	].join("\n"),
-
-	generate: function(rings, samples) {
-
-		var frag = THREE.BokehShader.fragmentShader;
-		frag = frag
-			.replace(/#RINGS#/, rings)
-			.replace(/#SAMPLES#/, samples);
-
-		/*
-		var unboxing = false;
-		if (unboxing) {
-			var codegen = [];
-			for (var i=1;i<=rings;i++) {
-				var ringsamples = i * samples;
-				var a = 'if (i==?) {'.replace('?', i);
-				codegen.push( i == 1 ? a : '  ' + a); //else
-				codegen.push('for (int j = 0 ; j < ?; j++) '.replace('?', ringsamples));
-				codegen.push('\ts += gather(float(i), float(j), ?, col, w, h, blur);'.replace('?', ringsamples))
-				codegen.push('}');
-			}
-
-			codegen = codegen.join('\n');
-
-			frag = frag.replace(/\/[*]unboxstart[*]\/([\s\S]*)\/[*]unboxend[*]\//m, codegen);
-		}
-		*/
-
-		return frag;
-	}
+	].join("\n")
 
 };

+ 7 - 4
examples/webgl_postprocessing_dof2.html

@@ -432,7 +432,6 @@ Use WEBGL Depth buffer support?
 				postprocessing.rtTextureColor = new THREE.WebGLRenderTarget( window.innerWidth, height, pars );
 
 
-				var fragmentShader = THREE.BokehShader.generate(shaderSettings.rings, shaderSettings.samples);
 
 				var bokeh_shader = THREE.BokehShader;
 
@@ -449,7 +448,11 @@ Use WEBGL Depth buffer support?
 
 					uniforms: postprocessing.bokeh_uniforms,
 					vertexShader: bokeh_shader.vertexShader,
-					fragmentShader: fragmentShader
+					fragmentShader: bokeh_shader.fragmentShader,
+					defines: {
+						RINGS: shaderSettings.rings,
+						SAMPLES: shaderSettings.samples
+					}
 
 				} );
 
@@ -460,9 +463,9 @@ Use WEBGL Depth buffer support?
 			}
 
 			function shaderUpdate() {
-				var fragmentShader = THREE.BokehShader.generate(shaderSettings.rings, shaderSettings.samples);
+				postprocessing.materialBokeh.defines.RINGS = shaderSettings.rings;
+				postprocessing.materialBokeh.defines.SAMPLES = shaderSettings.samples;
 
-				postprocessing.materialBokeh.fragmentShader = fragmentShader;
 				postprocessing.materialBokeh.needsUpdate = true;
 
 			}