[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