[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [36444] trunk/blender/source/blender/gpu/ intern: Fix #26807: glsl diffuse/specular was not clamping negative values, giving

Brecht Van Lommel brechtvanlommel at pandora.be
Mon May 2 16:01:46 CEST 2011


Revision: 36444
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36444
Author:   blendix
Date:     2011-05-02 14:01:45 +0000 (Mon, 02 May 2011)
Log Message:
-----------
Fix #26807: glsl diffuse/specular was not clamping negative values, giving
some inconsistent results with the renderer.

Modified Paths:
--------------
    trunk/blender/source/blender/gpu/intern/gpu_material.c
    trunk/blender/source/blender/gpu/intern/gpu_shader_material.glsl

Modified: trunk/blender/source/blender/gpu/intern/gpu_material.c
===================================================================
--- trunk/blender/source/blender/gpu/intern/gpu_material.c	2011-05-02 13:52:41 UTC (rev 36443)
+++ trunk/blender/source/blender/gpu/intern/gpu_material.c	2011-05-02 14:01:45 UTC (rev 36444)
@@ -557,7 +557,7 @@
 		addcol = shi->rgb;
 
 	/* output to */
-	GPU_link(mat, "shade_madd", *diff, rgb, addcol, diff);
+	GPU_link(mat, "shade_madd_clamped", *diff, rgb, addcol, diff);
 }
 
 static void ramp_spec_result(GPUShadeInput *shi, GPUNodeLink **spec)
@@ -730,7 +730,7 @@
 		if(lamp->type == LA_HEMI) {
 			GPU_link(mat, "shade_hemi_spec", vn, lv, view, GPU_uniform(&ma->spec), shi->har, visifac, &t);
 			GPU_link(mat, "shade_add_spec", t, GPU_dynamic_uniform(lamp->dyncol), shi->specrgb, &outcol);
-			GPU_link(mat, "shade_add", shr->spec, outcol, &shr->spec);
+			GPU_link(mat, "shade_add_clamped", shr->spec, outcol, &shr->spec);
 		}
 		else {
 			if(ma->spec_shader==MA_SPEC_PHONG)
@@ -753,11 +753,11 @@
 				GPUNodeLink *spec;
 				do_specular_ramp(shi, specfac, t, &spec);
 				GPU_link(mat, "shade_add_spec", t, GPU_dynamic_uniform(lamp->dyncol), spec, &outcol);
-				GPU_link(mat, "shade_add", shr->spec, outcol, &shr->spec);
+				GPU_link(mat, "shade_add_clamped", shr->spec, outcol, &shr->spec);
 			}
 			else {
 				GPU_link(mat, "shade_add_spec", t, GPU_dynamic_uniform(lamp->dyncol), shi->specrgb, &outcol);
-				GPU_link(mat, "shade_add", shr->spec, outcol, &shr->spec);
+				GPU_link(mat, "shade_add_clamped", shr->spec, outcol, &shr->spec);
 			}
 		}
 	}

Modified: trunk/blender/source/blender/gpu/intern/gpu_shader_material.glsl
===================================================================
--- trunk/blender/source/blender/gpu/intern/gpu_shader_material.glsl	2011-05-02 13:52:41 UTC (rev 36443)
+++ trunk/blender/source/blender/gpu/intern/gpu_shader_material.glsl	2011-05-02 14:01:45 UTC (rev 36444)
@@ -1686,6 +1686,16 @@
 	outcol = col + col1*col2;
 }
 
+void shade_add_clamped(vec4 col1, vec4 col2, out vec4 outcol)
+{
+	outcol = col1 + max(col2, vec4(0.0, 0.0, 0.0, 0.0));
+}
+
+void shade_madd_clamped(vec4 col, vec4 col1, vec4 col2, out vec4 outcol)
+{
+	outcol = col + max(col1*col2, vec4(0.0, 0.0, 0.0, 0.0));
+}
+
 void shade_maddf(vec4 col, float f, vec4 col1, out vec4 outcol)
 {
 	outcol = col + f*col1;




More information about the Bf-blender-cvs mailing list