diff options
author | Jeroen Bakker <j.bakker@atmind.nl> | 2012-07-25 14:46:19 +0400 |
---|---|---|
committer | Jeroen Bakker <j.bakker@atmind.nl> | 2012-07-25 14:46:19 +0400 |
commit | 8df10a4018b84d57ed4ff6e2bb09c05e4e607099 (patch) | |
tree | 24dfebf0641881e2cf0d516386ed67131e147f45 /source/blender/compositor/intern/COM_MemoryBuffer.cpp | |
parent | c3a8894f57fc7560e54a344a4a16ed5b3886a688 (diff) |
Defocus node.
added some maxblur optimizations. Per tile the max blur is calcualted,
will save some unneeded CPU/GPU loops
GPU: 1:09 => 0:21
CPU: 1:50 => 0:35
Diffstat (limited to 'source/blender/compositor/intern/COM_MemoryBuffer.cpp')
-rw-r--r-- | source/blender/compositor/intern/COM_MemoryBuffer.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/source/blender/compositor/intern/COM_MemoryBuffer.cpp b/source/blender/compositor/intern/COM_MemoryBuffer.cpp index 0aae8853795..f8c842d8e67 100644 --- a/source/blender/compositor/intern/COM_MemoryBuffer.cpp +++ b/source/blender/compositor/intern/COM_MemoryBuffer.cpp @@ -87,6 +87,33 @@ float *MemoryBuffer::convertToValueBuffer() return result; } +float MemoryBuffer::getMaximumValue() +{ + float result = this->m_buffer[0]; + const unsigned int size = this->determineBufferSize(); + unsigned int i; + + const float *fp_src = this->m_buffer; + + for (i = 0; i < size; i++, fp_src += COM_NUMBER_OF_CHANNELS) { + float value = *fp_src; + if (value > result) { + result = value; + } + } + + return result; +} + +float MemoryBuffer::getMaximumValue(rcti* rect) +{ + MemoryBuffer *temp = new MemoryBuffer(NULL, rect); + temp->copyContentFrom(this); + float result = temp->getMaximumValue(); + delete temp; + return result; +} + MemoryBuffer::~MemoryBuffer() { if (this->m_buffer) { |