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:
authorRobert Holcomb <bob_holcomb@hotmail.com>2010-03-16 01:36:39 +0300
committerRobert Holcomb <bob_holcomb@hotmail.com>2010-03-16 01:36:39 +0300
commitebd63787e6ad1889319442558e8f7329ca7a768d (patch)
tree752115084879931fdee7fe6167f018dd8dac6ef4 /source/blender/nodes/intern/CMP_nodes/CMP_diffMatte.c
parentc12cfa37753e440aa585c2044dc433a46e494e59 (diff)
added different sampling methods in rotate node
fixed bug in difference matte node that prevented using a solid color for second input -also clairified some variable names to be more meaningful
Diffstat (limited to 'source/blender/nodes/intern/CMP_nodes/CMP_diffMatte.c')
-rw-r--r--source/blender/nodes/intern/CMP_nodes/CMP_diffMatte.c37
1 files changed, 20 insertions, 17 deletions
diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_diffMatte.c b/source/blender/nodes/intern/CMP_nodes/CMP_diffMatte.c
index f1b39587e2a..aa282a78af1 100644
--- a/source/blender/nodes/intern/CMP_nodes/CMP_diffMatte.c
+++ b/source/blender/nodes/intern/CMP_nodes/CMP_diffMatte.c
@@ -42,9 +42,7 @@ static bNodeSocketType cmp_node_diff_matte_out[]={
{-1,0,""}
};
-/* note, keyvals is passed on from caller as stack array */
-/* might have been nicer as temp struct though... */
-static void do_diff_matte(bNode *node, float *colorbuf, float *imbuf1, float *imbuf2)
+static void do_diff_matte(bNode *node, float *outColor, float *inColor1, float *inColor2)
{
NodeChroma *c= (NodeChroma *)node->storage;
float tolerence=c->t1;
@@ -52,52 +50,57 @@ static void do_diff_matte(bNode *node, float *colorbuf, float *imbuf1, float *im
float difference;
float alpha;
- difference=fabs(imbuf2[0]-imbuf1[0])+
- fabs(imbuf2[1]-imbuf1[1])+
- fabs(imbuf2[2]-imbuf1[2]);
+ difference=fabs(inColor2[0]-inColor1[0])+
+ fabs(inColor2[1]-inColor1[1])+
+ fabs(inColor2[2]-inColor1[2]);
/*average together the distances*/
difference=difference/3.0;
- VECCOPY(colorbuf, imbuf1);
+ VECCOPY(outColor, inColor1);
/*make 100% transparent*/
if(difference < tolerence){
- colorbuf[3]=0.0;
+ outColor[3]=0.0;
}
/*in the falloff region, make partially transparent */
else if(difference < falloff+tolerence){
difference=difference-tolerence;
alpha=difference/falloff;
/*only change if more transparent than before */
- if(alpha < imbuf1[3]) {
- colorbuf[3]=alpha;
+ if(alpha < inColor1[3]) {
+ outColor[3]=alpha;
}
else { /* leave as before */
- colorbuf[3]=imbuf1[3];
+ outColor[3]=inColor1[3];
}
}
else {
/*foreground object*/
- colorbuf[3]= imbuf1[3];
+ outColor[3]= inColor1[3];
}
}
static void node_composit_exec_diff_matte(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
{
- CompBuf *outbuf;
- CompBuf *imbuf1;
- CompBuf *imbuf2;
+ CompBuf *outbuf=0;
+ CompBuf *imbuf1=0;
+ CompBuf *imbuf2=0;
NodeChroma *c;
/*is anything connected?*/
if(out[0]->hasoutput==0 && out[1]->hasoutput==0) return;
+
/*must have an image imput*/
if(in[0]->data==NULL) return;
- if(in[1]->data==NULL) return;
+
imbuf1=typecheck_compbuf(in[0]->data, CB_RGBA);
- imbuf2=typecheck_compbuf(in[1]->data, CB_RGBA);
+
+ /* if there's an image, use that, if not use the color */
+ if(in[1]->data) {
+ imbuf2=typecheck_compbuf(in[1]->data, CB_RGBA);
+ }
c=node->storage;
outbuf=dupalloc_compbuf(imbuf1);