Revision: 49520
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49520
Author:   campbellbarton
Date:     2012-08-03 09:51:10 +0000 (Fri, 03 Aug 2012)
Log Message:
-----------
fix for bokeh blur using uninitialized memory - it would cause some tiles not 
to be blurred.

was in fact a bug in MemoryBuffer::getMaximumValue

Modified Paths:
--------------
    trunk/blender/source/blender/compositor/intern/COM_MemoryBuffer.cpp
    trunk/blender/source/blender/compositor/intern/COM_MemoryBuffer.h

Modified: trunk/blender/source/blender/compositor/intern/COM_MemoryBuffer.cpp
===================================================================
--- trunk/blender/source/blender/compositor/intern/COM_MemoryBuffer.cpp 
2012-08-03 09:08:40 UTC (rev 49519)
+++ trunk/blender/source/blender/compositor/intern/COM_MemoryBuffer.cpp 
2012-08-03 09:51:10 UTC (rev 49520)
@@ -105,13 +105,24 @@
        return result;
 }
 
-float MemoryBuffer::getMaximumValue(rcti* rect)
+float MemoryBuffer::getMaximumValue(rcti *rect)
 {
-       MemoryBuffer *temp = new MemoryBuffer(NULL, rect);
-       temp->copyContentFrom(this);
-       float result = temp->getMaximumValue();
-       delete temp;
-       return result;
+       rcti rect_clamp;
+
+       /* first clamp the rect by the bounds or we get un-initialized values */
+       BLI_rcti_isect(rect, &this->m_rect, &rect_clamp);
+
+       if (!BLI_rcti_is_empty(&rect_clamp)) {
+               MemoryBuffer *temp = new MemoryBuffer(NULL, &rect_clamp);
+               temp->copyContentFrom(this);
+               float result = temp->getMaximumValue();
+               delete temp;
+               return result;
+       }
+       else {
+               BLI_assert(0);
+               return 0.0f;
+       }
 }
 
 MemoryBuffer::~MemoryBuffer()
@@ -125,6 +136,7 @@
 void MemoryBuffer::copyContentFrom(MemoryBuffer *otherBuffer)
 {
        if (!otherBuffer) {
+               BLI_assert(0);
                return;
        }
        unsigned int otherY;

Modified: trunk/blender/source/blender/compositor/intern/COM_MemoryBuffer.h
===================================================================
--- trunk/blender/source/blender/compositor/intern/COM_MemoryBuffer.h   
2012-08-03 09:08:40 UTC (rev 49519)
+++ trunk/blender/source/blender/compositor/intern/COM_MemoryBuffer.h   
2012-08-03 09:51:10 UTC (rev 49520)
@@ -202,6 +202,9 @@
        /**
         * @brief add the content from otherBuffer to this MemoryBuffer
         * @param otherBuffer source buffer
+        *
+        * @note take care when running this on a new buffer since it wont fill 
in
+        *       uninitialized values in areas where the buffers don't overlap.
         */
        void copyContentFrom(MemoryBuffer *otherBuffer);
        
@@ -229,7 +232,7 @@
        
        float *convertToValueBuffer();
        float getMaximumValue();
-       float getMaximumValue(rcti* rect);
+       float getMaximumValue(rcti *rect);
 private:
        unsigned int determineBufferSize();
 

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

Reply via email to