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. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to