diff options
author | Robert Holcomb <bob_holcomb@hotmail.com> | 2010-03-16 01:36:39 +0300 |
---|---|---|
committer | Robert Holcomb <bob_holcomb@hotmail.com> | 2010-03-16 01:36:39 +0300 |
commit | ebd63787e6ad1889319442558e8f7329ca7a768d (patch) | |
tree | 752115084879931fdee7fe6167f018dd8dac6ef4 /source/blender/nodes/intern/CMP_nodes/CMP_diffMatte.c | |
parent | c12cfa37753e440aa585c2044dc433a46e494e59 (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.c | 37 |
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); |