[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23949] trunk/blender/source/blender: Fix #19632: GLSL was not updated for soft/linear light blending modes.

Brecht Van Lommel brecht at blender.org
Mon Oct 19 13:50:01 CEST 2009


Revision: 23949
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23949
Author:   blendix
Date:     2009-10-19 13:50:01 +0200 (Mon, 19 Oct 2009)

Log Message:
-----------
Fix #19632: GLSL was not updated for soft/linear light blending modes.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/material.c
    trunk/blender/source/blender/gpu/intern/gpu_material.c
    trunk/blender/source/blender/gpu/intern/gpu_shader_material.glsl
    trunk/blender/source/blender/gpu/intern/gpu_shader_material.glsl.c
    trunk/blender/source/blender/nodes/intern/SHD_nodes/SHD_mixRgb.c

Modified: trunk/blender/source/blender/blenkernel/intern/material.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/material.c	2009-10-19 11:49:23 UTC (rev 23948)
+++ trunk/blender/source/blender/blenkernel/intern/material.c	2009-10-19 11:50:01 UTC (rev 23949)
@@ -982,7 +982,7 @@
 /* if g==NULL, it only does r channel */
 void ramp_blend(int type, float *r, float *g, float *b, float fac, float *col)
 {
-	float tmp, facm= 1.0-fac;
+	float tmp, facm= 1.0f-fac;
 	
 	switch (type) {
 		case MA_RAMP_BLEND:
@@ -1007,26 +1007,26 @@
 			}
 				break;
 		case MA_RAMP_SCREEN:
-			*r = 1.0 - (facm + fac*(1.0 - col[0])) * (1.0 - *r);
+			*r = 1.0f - (facm + fac*(1.0f - col[0])) * (1.0f - *r);
 			if(g) {
-				*g = 1.0 - (facm + fac*(1.0 - col[1])) * (1.0 - *g);
-				*b = 1.0 - (facm + fac*(1.0 - col[2])) * (1.0 - *b);
+				*g = 1.0f - (facm + fac*(1.0f - col[1])) * (1.0f - *g);
+				*b = 1.0f - (facm + fac*(1.0f - col[2])) * (1.0f - *b);
 			}
 				break;
 		case MA_RAMP_OVERLAY:
 			if(*r < 0.5f)
 				*r *= (facm + 2.0f*fac*col[0]);
 			else
-				*r = 1.0 - (facm + 2.0f*fac*(1.0 - col[0])) * (1.0 - *r);
+				*r = 1.0f - (facm + 2.0f*fac*(1.0f - col[0])) * (1.0f - *r);
 			if(g) {
 				if(*g < 0.5f)
 					*g *= (facm + 2.0f*fac*col[1]);
 				else
-					*g = 1.0 - (facm + 2.0f*fac*(1.0 - col[1])) * (1.0 - *g);
+					*g = 1.0f - (facm + 2.0f*fac*(1.0f - col[1])) * (1.0f - *g);
 				if(*b < 0.5f)
 					*b *= (facm + 2.0f*fac*col[2]);
 				else
-					*b = 1.0 - (facm + 2.0f*fac*(1.0 - col[2])) * (1.0 - *b);
+					*b = 1.0f - (facm + 2.0f*fac*(1.0f - col[2])) * (1.0f - *b);
 			}
 				break;
 		case MA_RAMP_SUB:
@@ -1037,12 +1037,12 @@
 			}
 				break;
 		case MA_RAMP_DIV:
-			if(col[0]!=0.0)
+			if(col[0]!=0.0f)
 				*r = facm*(*r) + fac*(*r)/col[0];
 			if(g) {
-				if(col[1]!=0.0)
+				if(col[1]!=0.0f)
 					*g = facm*(*g) + fac*(*g)/col[1];
-				if(col[2]!=0.0)
+				if(col[2]!=0.0f)
 					*b = facm*(*b) + fac*(*b)/col[2];
 			}
 				break;
@@ -1076,31 +1076,31 @@
 		case MA_RAMP_DODGE:			
 			
 				
-			if(*r !=0.0){
-				tmp = 1.0 - fac*col[0];
-				if(tmp <= 0.0)
-					*r = 1.0;
-				else if ((tmp = (*r) / tmp)> 1.0)
-					*r = 1.0;
+			if(*r !=0.0f){
+				tmp = 1.0f - fac*col[0];
+				if(tmp <= 0.0f)
+					*r = 1.0f;
+				else if ((tmp = (*r) / tmp)> 1.0f)
+					*r = 1.0f;
 				else 
 					*r = tmp;
 			}
 			if(g) {
-				if(*g !=0.0){
-					tmp = 1.0 - fac*col[1];
-					if(tmp <= 0.0 )
-						*g = 1.0;
-					else if ((tmp = (*g) / tmp) > 1.0 )
-						*g = 1.0;
+				if(*g !=0.0f){
+					tmp = 1.0f - fac*col[1];
+					if(tmp <= 0.0f )
+						*g = 1.0f;
+					else if ((tmp = (*g) / tmp) > 1.0f )
+						*g = 1.0f;
 					else
 						*g = tmp;
 				}
-				if(*b !=0.0){
-					tmp = 1.0 - fac*col[2];
-					if(tmp <= 0.0)
-						*b = 1.0;
-					else if ((tmp = (*b) / tmp) > 1.0 )
-						*b = 1.0;
+				if(*b !=0.0f){
+					tmp = 1.0f - fac*col[2];
+					if(tmp <= 0.0f)
+						*b = 1.0f;
+					else if ((tmp = (*b) / tmp) > 1.0f )
+						*b = 1.0f;
 					else
 						*b = tmp;
 				}
@@ -1111,33 +1111,33 @@
 			
 			tmp = facm + fac*col[0];
 			
-			if(tmp <= 0.0)
-				*r = 0.0;
-			else if (( tmp = (1.0 - (1.0 - (*r)) / tmp )) < 0.0)
-			        *r = 0.0;
-			else if (tmp > 1.0)
-				*r=1.0;
+			if(tmp <= 0.0f)
+				*r = 0.0f;
+			else if (( tmp = (1.0f - (1.0f - (*r)) / tmp )) < 0.0f)
+			        *r = 0.0f;
+			else if (tmp > 1.0f)
+				*r=1.0f;
 			else 
 				*r = tmp; 
 
 			if(g) {
 				tmp = facm + fac*col[1];
-				if(tmp <= 0.0)
-					*g = 0.0;
-				else if (( tmp = (1.0 - (1.0 - (*g)) / tmp )) < 0.0 )
-			        	*g = 0.0;
-				else if(tmp >1.0)
-					*g=1.0;
+				if(tmp <= 0.0f)
+					*g = 0.0f;
+				else if (( tmp = (1.0f - (1.0f - (*g)) / tmp )) < 0.0f )
+			        	*g = 0.0f;
+				else if(tmp >1.0f)
+					*g=1.0f;
 				else
 					*g = tmp;
 			        	
 			        tmp = facm + fac*col[2];
-			        if(tmp <= 0.0)
-					*b = 0.0;
-				else if (( tmp = (1.0 - (1.0 - (*b)) / tmp )) < 0.0  )
-			        	*b = 0.0;
-				else if(tmp >1.0)
-					*b= 1.0;
+			        if(tmp <= 0.0f)
+					*b = 0.0f;
+				else if (( tmp = (1.0f - (1.0f - (*b)) / tmp )) < 0.0f  )
+			        	*b = 0.0f;
+				else if(tmp >1.0f)
+					*b= 1.0f;
 				else
 					*b = tmp;
 			}
@@ -1197,29 +1197,29 @@
                 float scr, scg, scb; 
                  
                 /* first calculate non-fac based Screen mix */ 
-                scr = 1.0 - ((1.0 - col[0])) * (1.0 - *r); 
-                scg = 1.0 - ((1.0 - col[1])) * (1.0 - *g); 
-                scb = 1.0 - ((1.0 - col[2])) * (1.0 - *b); 
+                scr = 1.0f - (1.0f - col[0]) * (1.0f - *r); 
+                scg = 1.0f - (1.0f - col[1]) * (1.0f - *g); 
+                scb = 1.0f - (1.0f - col[2]) * (1.0f - *b); 
                  
-                *r = facm*(*r) + fac*(((1.0 - *r) * col[0] * (*r)) + (*r * scr)); 
-                *g = facm*(*g) + fac*(((1.0 - *g) * col[1] * (*g)) + (*g * scg)); 
-                *b = facm*(*b) + fac*(((1.0 - *b) * col[2] * (*b)) + (*b * scb)); 
+                *r = facm*(*r) + fac*(((1.0f - *r) * col[0] * (*r)) + (*r * scr)); 
+                *g = facm*(*g) + fac*(((1.0f - *g) * col[1] * (*g)) + (*g * scg)); 
+                *b = facm*(*b) + fac*(((1.0f - *b) * col[2] * (*b)) + (*b * scb)); 
             } 
                 break; 
         case MA_RAMP_LINEAR: 
-            if (col[0] > 0.5)  
-                *r = *r + fac*(2*(col[0]-0.5)); 
+            if (col[0] > 0.5f)  
+                *r = *r + fac*(2.0f*(col[0]-0.5f)); 
             else  
-                *r = *r + fac*(2*(col[0]) - 1); 
+                *r = *r + fac*(2.0f*(col[0]) - 1.0f); 
             if (g){ 
-                if (col[1] > 0.5)  
-                    *g = *g + fac*(2*(col[1]-0.5)); 
+                if (col[1] > 0.5f)  
+                    *g = *g + fac*(2.0f*(col[1]-0.5f)); 
                 else  
-                    *g = *g + fac*(2*(col[1]) -1); 
-                if (col[2] > 0.5)  
-                    *b = *b + fac*(2*(col[2]-0.5)); 
+                    *g = *g + fac*(2.0f*(col[1]) -1.0f); 
+                if (col[2] > 0.5f)  
+                    *b = *b + fac*(2.0f*(col[2]-0.5f)); 
                 else  
-                    *b = *b + fac*(2*(col[2]) - 1); 
+                    *b = *b + fac*(2.0f*(col[2]) - 1.0f); 
             } 
                 break; 
 	}	

Modified: trunk/blender/source/blender/gpu/intern/gpu_material.c
===================================================================
--- trunk/blender/source/blender/gpu/intern/gpu_material.c	2009-10-19 11:49:23 UTC (rev 23948)
+++ trunk/blender/source/blender/gpu/intern/gpu_material.c	2009-10-19 11:50:01 UTC (rev 23949)
@@ -471,7 +471,7 @@
 	static char *names[] = {"mix_blend", "mix_add", "mix_mult", "mix_sub",
 		"mix_screen", "mix_div", "mix_diff", "mix_dark", "mix_light",
 		"mix_overlay", "mix_dodge", "mix_burn", "mix_hue", "mix_sat",
-		"mix_val", "mix_color"};
+		"mix_val", "mix_color", "mix_soft", "mix_linear"};
 
 	GPU_link(mat, names[type], fac, col1, col2, outcol);
 }

Modified: trunk/blender/source/blender/gpu/intern/gpu_shader_material.glsl
===================================================================
--- trunk/blender/source/blender/gpu/intern/gpu_shader_material.glsl	2009-10-19 11:49:23 UTC (rev 23948)
+++ trunk/blender/source/blender/gpu/intern/gpu_shader_material.glsl	2009-10-19 11:50:01 UTC (rev 23949)
@@ -563,6 +563,38 @@
 	}
 }
 
+void mix_soft(float fac, vec4 col1, vec4 col2, out vec4 outcol)
+{
+	fac = clamp(fac, 0.0, 1.0);
+	float facm = 1.0 - fac;
+
+	vec4 one= vec4(1.0);
+	vec4 scr= one - (one - col2)*(one - col1);
+	outcol = facm*col1 + fac*((one - col1)*col2*col1 + col1*scr);
+}
+
+void mix_linear(float fac, vec4 col1, vec4 col2, out vec4 outcol)
+{
+	fac = clamp(fac, 0.0, 1.0);
+
+	outcol = col1;
+
+	if(col2.r > 0.5)
+		outcol.r= col1.r + fac*(2.0*(col2.r - 0.5));
+	else
+		outcol.r= col1.r + fac*(2.0*(col2.r) - 1.0);
+
+	if(col2.g > 0.5)
+		outcol.g= col1.g + fac*(2.0*(col2.g - 0.5));
+	else
+		outcol.g= col1.g + fac*(2.0*(col2.g) - 1.0);
+
+	if(col2.b > 0.5)
+		outcol.b= col1.b + fac*(2.0*(col2.b - 0.5));
+	else
+		outcol.b= col1.b + fac*(2.0*(col2.b) - 1.0);
+}
+
 void valtorgb(float fac, sampler1D colormap, out vec4 outcol, out float outalpha)
 {
 	outcol = texture1D(colormap, fac);

Modified: trunk/blender/source/blender/gpu/intern/gpu_shader_material.glsl.c
===================================================================
--- trunk/blender/source/blender/gpu/intern/gpu_shader_material.glsl.c	2009-10-19 11:49:23 UTC (rev 23948)
+++ trunk/blender/source/blender/gpu/intern/gpu_shader_material.glsl.c	2009-10-19 11:50:01 UTC (rev 23949)
@@ -1,352 +1,375 @@
 /* DataToC output of file <gpu_shader_material_glsl> */
 
-int datatoc_gpu_shader_material_glsl_size= 32658;
+int datatoc_gpu_shader_material_glsl_size= 33385;
 char datatoc_gpu_shader_material_glsl[]= {
- 10,102,108,111, 97,116, 32,101,120,112, 95, 98,108,101,110,100,101,114,
- 40,102,108,111, 97,116, 32,102, 41, 10,123, 10,  9,114,101,116,117,114,110, 32,112,111,119, 40, 50, 46, 55, 49, 56, 50, 56, 49,
- 56, 50, 56, 52, 54, 44, 32,102, 41, 59, 10,125, 10, 10,118,111,105,100, 32,114,103, 98, 95,116,111, 95,104,115,118, 40,118,101,
- 99, 52, 32,114,103, 98, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 10,123, 10,  9,102,108,111, 97,
-116, 32, 99,109, 97,120, 44, 32, 99,109,105,110, 44, 32,104, 44, 32,115, 44, 32,118, 44, 32, 99,100,101,108,116, 97, 59, 10,  9,
-118,101, 99, 51, 32, 99, 59, 10, 10,  9, 99,109, 97,120, 32, 61, 32,109, 97,120, 40,114,103, 98, 91, 48, 93, 44, 32,109, 97,120,
- 40,114,103, 98, 91, 49, 93, 44, 32,114,103, 98, 91, 50, 93, 41, 41, 59, 10,  9, 99,109,105,110, 32, 61, 32,109,105,110, 40,114,
-103, 98, 91, 48, 93, 44, 32,109,105,110, 40,114,103, 98, 91, 49, 93, 44, 32,114,103, 98, 91, 50, 93, 41, 41, 59, 10,  9, 99,100,
-101,108,116, 97, 32, 61, 32, 99,109, 97,120, 45, 99,109,105,110, 59, 10, 10,  9,118, 32, 61, 32, 99,109, 97,120, 59, 10,  9,105,
-102, 32, 40, 99,109, 97,120, 33, 61, 48, 46, 48, 41, 10,  9,  9,115, 32, 61, 32, 99,100,101,108,116, 97, 47, 99,109, 97,120, 59,
- 10,  9,101,108,115,101, 32,123, 10,  9,  9,115, 32, 61, 32, 48, 46, 48, 59, 10,  9,  9,104, 32, 61, 32, 48, 46, 48, 59, 10,  9,
-125, 10, 10,  9,105,102, 32, 40,115, 32, 61, 61, 32, 48, 46, 48, 41, 32,123, 10,  9,  9,104, 32, 61, 32, 48, 46, 48, 59, 10,  9,

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list