Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2006-06-03 17:26:39 +0400
committerTon Roosendaal <ton@blender.org>2006-06-03 17:26:39 +0400
commit9ab30b4acb7d6c965c2dd1528cfbb0dad4ad66d8 (patch)
treebb1cd6c39d4721957ee894047e28f2b32efb5d32 /source/blender/blenkernel/intern/material.c
parent71f349e9ddfadba6db0ddfd330b86424aa276b40 (diff)
Patch from Fred van Essen: six new blending modes.
http://mediawiki.blender.org/index.php/BlenderDev/BlendingModes Functional in Node editor and Material Ramps.
Diffstat (limited to 'source/blender/blenkernel/intern/material.c')
-rw-r--r--source/blender/blenkernel/intern/material.c90
1 files changed, 89 insertions, 1 deletions
diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c
index c3d35eb1d52..1999c6890e5 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -48,6 +48,7 @@
#include "DNA_texture_types.h"
#include "BLI_blenlib.h"
+#include "BLI_arithb.h"
#include "BKE_bad_level_calls.h"
#include "BKE_blender.h"
@@ -892,7 +893,94 @@ void ramp_blend(int type, float *r, float *g, float *b, float fac, float *col)
tmp= fac*col[2];
if(tmp > *b) *b= tmp;
}
- break;
+ break;
+ case MA_RAMP_DODGE:
+ tmp = 1.0 - fac*col[0];
+ if(tmp == 0.0)
+ *r = 1.0;
+ else if ((*r = (*r) / tmp)> 1.0)
+ *r = 1.0;
+ if(g) {
+ tmp = 1.0 - fac*col[1];
+ if(tmp == 0.0)
+ *g = 1.0;
+ else if ((*g = (*g) / tmp) > 1.0)
+ *g = 1.0;
+
+ tmp = 1.0 - fac*col[2];
+ if(tmp == 0.0)
+ *b = 1.0;
+ else if ((*b = (*b) / tmp) > 1.0)
+ *b = 1.0;
+ }
+ break;
+ case MA_RAMP_BURN:
+
+ tmp = facm + fac*col[0];
+
+ if(tmp == 0.0)
+ *r = 0.0;
+ else if (( (*r) = (1.0 - (1.0 - (*r)) / tmp )) < 0.0 )
+ *r = 0.0;
+ if(g) {
+ tmp = facm + fac*col[1];
+ if(tmp == 0.0)
+ *g = 0.0;
+ else if (( (*g) = (1.0 - (1.0 - (*g)) / tmp )) < 0.0 )
+ *g = 0.0;
+
+ tmp = facm + fac*col[2];
+ if(tmp == 0.0)
+ *b = 0.0;
+ else if (( (*b) = (1.0 - (1.0 - (*b)) / tmp )) < 0.0 )
+ *b = 0.0;
+ }
+ break;
+ case MA_RAMP_HUE:
+ if(g){
+ float rH,rS,rV;
+ float colH,colS,colV;
+ float tmpr,tmpg,tmpb;
+ rgb_to_hsv(*r,*g,*b,&rH,&rS,&rV);
+ rgb_to_hsv(col[0],col[1],col[2],&colH,&colS,&colV);
+ hsv_to_rgb( colH , rS, rV, &tmpr, &tmpg, &tmpb);
+ *r = facm*(*r) + fac*tmpr;
+ *g = facm*(*g) + fac*tmpg;
+ *b = facm*(*b) + fac*tmpb;
+
+ }
+ break;
+ case MA_RAMP_SAT:
+ if(g){
+ float rH,rS,rV;
+ float colH,colS,colV;
+ rgb_to_hsv(*r,*g,*b,&rH,&rS,&rV);
+ rgb_to_hsv(col[0],col[1],col[2],&colH,&colS,&colV);
+ hsv_to_rgb( rH, (facm*rS +fac*colS), rV, r, g, b);
+ }
+ break;
+ case MA_RAMP_VAL:
+ if(g){
+ float rH,rS,rV;
+ float colH,colS,colV;
+ rgb_to_hsv(*r,*g,*b,&rH,&rS,&rV);
+ rgb_to_hsv(col[0],col[1],col[2],&colH,&colS,&colV);
+ hsv_to_rgb( rH, rS, (facm*rV +fac*colV), r, g, b);
+ }
+ break;
+ case MA_RAMP_COLOR:
+ if(g){
+ float rH,rS,rV;
+ float colH,colS,colV;
+ float tmpr,tmpg,tmpb;
+ rgb_to_hsv(*r,*g,*b,&rH,&rS,&rV);
+ rgb_to_hsv(col[0],col[1],col[2],&colH,&colS,&colV);
+ hsv_to_rgb( colH, colS, rV, &tmpr, &tmpg, &tmpb);
+ *r = facm*(*r) + fac*tmpr;
+ *g = facm*(*g) + fac*tmpg;
+ *b = facm*(*b) + fac*tmpb;
+ }
+ break;
}
}