Revision: 19857
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19857
Author:   gsrb3d
Date:     2009-04-21 19:40:39 +0200 (Tue, 21 Apr 2009)

Log Message:
-----------
Old "divide by zero" bug and remove debug printf.

Modified Paths:
--------------
    trunk/blender/source/blender/nodes/intern/CMP_nodes/CMP_normalize.c

Modified: trunk/blender/source/blender/nodes/intern/CMP_nodes/CMP_normalize.c
===================================================================
--- trunk/blender/source/blender/nodes/intern/CMP_nodes/CMP_normalize.c 
2009-04-21 17:37:07 UTC (rev 19856)
+++ trunk/blender/source/blender/nodes/intern/CMP_nodes/CMP_normalize.c 
2009-04-21 17:40:39 UTC (rev 19857)
@@ -55,6 +55,7 @@
        }
 }
 
+/* The code below assumes all data is inside range +- this, and that input 
buffer is single channel */
 #define BLENDER_ZMAX 10000.0f
 
 static void node_composit_exec_normalize(void *data, bNode *node, bNodeStack 
**in, bNodeStack **out)
@@ -63,7 +64,7 @@
        /* stack order out: valbuf */
        if(out[0]->hasoutput==0) return;
 
-       /* input no image? then only value operation */
+       /* Input has no image buffer? Then pass the value */
        if(in[0]->data==NULL) {
                QUATCOPY(out[0]->vec, in[0]->vec);
        }
@@ -78,19 +79,21 @@
                CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_VAL, 1); 
/* allocs */
 
                for (val = cbuf->rect; tot; tot--, val++) {
-                       if ((*val > max) && (*val < BLENDER_ZMAX)) {
+                       if ((*val > max) && (*val <= BLENDER_ZMAX)) {
                                max = *val;
                        }
-                       if (*val < min) {
+                       if ((*val < min) && (*val >= -BLENDER_ZMAX)) {
                                min = *val;
                        }
                }
-               mult = 1.0f/(max-min);
+               /* In the rare case of flat buffer, which would cause a divide 
by 0, just pass the input to the output */
+               if ((max-min) != 0.0f) {
+                       mult = 1.0f/(max-min);
+                       composit3_pixel_processor(node, stackbuf, in[0]->data, 
in[0]->vec, NULL, &min, NULL, &mult, do_normalize, CB_VAL, CB_VAL, CB_VAL);
+               } else {
+                       memcpy(stackbuf->rect, cbuf->rect, sizeof(float) * 
cbuf->x * cbuf->y);
+               }
 
-               printf("min %f max %f\n", min, max);
-
-               composit3_pixel_processor(node, stackbuf, in[0]->data, 
in[0]->vec, NULL, &min, NULL, &mult, do_normalize, CB_VAL, CB_VAL, CB_VAL);
-
                out[0]->data= stackbuf;
        }
 }


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to