After chatting with Broken about grs comments on the default behavior

of the nodes, I realized I had strayed from the path of enlightened blending 
by causing the math node to create an output the size of the larger of the 
two inputs.  

It has been corrected create the output the size of the 
first image, and in its abscense the second image.  In the event of 
nether input containing image data the node does not function.  I also 
added some early out checks at the beginning of the function to speed it 
up a tad in these cases and commented the code a bit more.
This commit is contained in:
2007-07-11 03:00:39 +00:00
parent 5e8ed4f088
commit c313f6db86

View File

@@ -140,31 +140,25 @@ static void node_composit_exec_math(void *data, bNode *node, bNodeStack **in, bN
CompBuf *cbuf=in[0]->data;
CompBuf *cbuf2=in[1]->data;
CompBuf *stackbuf;
int maxx=-1, maxy=-1;
/* stack order out: bw */
/* stack order in: col */
if(out[0]->hasoutput==0)
return;
/* check max size */
/* check for inputs and outputs for early out*/
if(in[0]->hasinput==0 || in[1]->hasinput==0) return;
if(in[0]->data==NULL && in[1]->data==NULL) return;
if(out[0]->hasoutput==0) return;
/*create output based on first input */
if(cbuf) {
maxx=cbuf->x;
maxy=cbuf->y;
stackbuf=alloc_compbuf(cbuf->x, cbuf->y, CB_VAL, 1);
}
if(cbuf2) {
if(cbuf2->x > maxx) maxx=cbuf2->x;
if(cbuf2->y > maxy) maxy=cbuf2->y;
/* and if it doesn't exist use the second input since we
know that one of them must exist at this point*/
else {
stackbuf=alloc_compbuf(cbuf2->x, cbuf2->y, CB_VAL, 1);
}
/* operate in case there's valid size */
if((maxx != -1) && (maxy !=-1)) {
stackbuf=alloc_compbuf(maxx, maxy, CB_VAL, 1); /* allocs */
composit2_pixel_processor(node, stackbuf, in[0]->data, in[0]->vec, in[1]->data, in[1]->vec, do_math, CB_VAL, CB_VAL);
out[0]->data= stackbuf;
}
composit2_pixel_processor(node, stackbuf, in[0]->data, in[0]->vec, in[1]->data, in[1]->vec, do_math, CB_VAL, CB_VAL);
out[0]->data= stackbuf;
}
bNodeType cmp_node_math= {