[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49520] trunk/blender/source/blender/ compositor/intern: fix for bokeh blur using uninitialized memory - it would cause some tiles not to be blurred .

Campbell Barton ideasman42 at gmail.com
Fri Aug 3 11:51:10 CEST 2012


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();
 




More information about the Bf-blender-cvs mailing list