[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