[Bf-blender-cvs] [ba0fbba] blender-tiles: Defocus + VarSizedBokeh
Jeroen Bakker
noreply at git.blender.org
Tue Jul 15 20:25:54 CEST 2014
Commit: ba0fbba897a405ed80dc20eec95e6750def7cc9d
Author: Jeroen Bakker
Date: Tue Jul 15 20:25:11 2014 +0200
https://developer.blender.org/rBba0fbba897a405ed80dc20eec95e6750def7cc9d
Defocus + VarSizedBokeh
===================================================================
M source/blender/compositor/intern/COM_MemoryBuffer.cpp
M source/blender/compositor/intern/COM_MemoryBuffer.h
M source/blender/compositor/intern/COM_MemoryBufferColor.h
M source/blender/compositor/intern/COM_MemoryBufferValue.cpp
M source/blender/compositor/intern/COM_MemoryBufferValue.h
M source/blender/compositor/operations/COM_BokehBlurOperation.cpp
M source/blender/compositor/operations/COM_VariableSizeBokehBlurOperation.cpp
===================================================================
diff --git a/source/blender/compositor/intern/COM_MemoryBuffer.cpp b/source/blender/compositor/intern/COM_MemoryBuffer.cpp
index 55c819f..bdec873 100644
--- a/source/blender/compositor/intern/COM_MemoryBuffer.cpp
+++ b/source/blender/compositor/intern/COM_MemoryBuffer.cpp
@@ -170,25 +170,6 @@ float MemoryBuffer::getMaximumValue() const
return 0.0f;
}
-float MemoryBuffer::getMaximumValue(rcti *rect)
-{
- 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 = MemoryBuffer::create(COM_DT_VALUE, &rect_clamp);
- temp->copyContentFrom(this);
- float result = temp->getMaximumValue();
- delete temp;
- return result;
- }
- else {
- BLI_assert(0);
- return 0.0f;
- }
-}
MemoryBuffer::~MemoryBuffer()
{
diff --git a/source/blender/compositor/intern/COM_MemoryBuffer.h b/source/blender/compositor/intern/COM_MemoryBuffer.h
index 60dee84..1802c6f 100644
--- a/source/blender/compositor/intern/COM_MemoryBuffer.h
+++ b/source/blender/compositor/intern/COM_MemoryBuffer.h
@@ -251,7 +251,6 @@ public:
float *convertToValueBuffer();
virtual float getMaximumValue() const;
- float getMaximumValue(rcti *rect);
/**
* @brief return the number of channels that form a single pixel.
diff --git a/source/blender/compositor/intern/COM_MemoryBufferColor.h b/source/blender/compositor/intern/COM_MemoryBufferColor.h
index c7591fc..f87736c 100644
--- a/source/blender/compositor/intern/COM_MemoryBufferColor.h
+++ b/source/blender/compositor/intern/COM_MemoryBufferColor.h
@@ -28,7 +28,7 @@ class MemoryBufferColor;
#include "COM_MemoryBuffer.h"
#include "COM_Sampler.h"
-class MemoryBufferColor: MemoryBuffer
+class MemoryBufferColor: public MemoryBuffer
{
private:
SamplerNearestColor *m_sampler_nearest;
diff --git a/source/blender/compositor/intern/COM_MemoryBufferValue.cpp b/source/blender/compositor/intern/COM_MemoryBufferValue.cpp
index 8672f11..c9c71f5 100644
--- a/source/blender/compositor/intern/COM_MemoryBufferValue.cpp
+++ b/source/blender/compositor/intern/COM_MemoryBufferValue.cpp
@@ -122,3 +122,23 @@ float MemoryBufferValue::getMaximumValue() const
return result;
}
+
+float MemoryBufferValue::getMaximumValue(rcti *rect)
+{
+ 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 = MemoryBuffer::create(COM_DT_VALUE, &rect_clamp);
+ temp->copyContentFrom(this);
+ float result = temp->getMaximumValue();
+ delete temp;
+ return result;
+ }
+ else {
+ BLI_assert(0);
+ return 0.0f;
+ }
+}
diff --git a/source/blender/compositor/intern/COM_MemoryBufferValue.h b/source/blender/compositor/intern/COM_MemoryBufferValue.h
index ef9ab3d..75e4b15 100644
--- a/source/blender/compositor/intern/COM_MemoryBufferValue.h
+++ b/source/blender/compositor/intern/COM_MemoryBufferValue.h
@@ -70,8 +70,10 @@ public:
SamplerBilinearValue* get_sampler_bilinear() {return this->m_sampler_bilinear;}
float getMaximumValue() const;
+ float getMaximumValue(rcti *rect);
MemoryBuffer *duplicate();
+
friend class MemoryBuffer;
#ifdef WITH_CXX_GUARDEDALLOC
diff --git a/source/blender/compositor/operations/COM_BokehBlurOperation.cpp b/source/blender/compositor/operations/COM_BokehBlurOperation.cpp
index 58785de..7156c3c 100644
--- a/source/blender/compositor/operations/COM_BokehBlurOperation.cpp
+++ b/source/blender/compositor/operations/COM_BokehBlurOperation.cpp
@@ -63,7 +63,6 @@ void BokehBlurOperation::initExecution()
this->m_inputBokehProgram = getInputSocketReader(1);
this->m_inputBoundingBoxReader = getInputSocketReader(2);
-
this->m_bokeh_sampler = ((ReadBufferOperation*)getInputOperation(1))->get_sampler_nearest_color();
this->m_boundingbox_sampler = ((ReadBufferOperation*)getInputOperation(2))->get_sampler_nearest_value();
diff --git a/source/blender/compositor/operations/COM_VariableSizeBokehBlurOperation.cpp b/source/blender/compositor/operations/COM_VariableSizeBokehBlurOperation.cpp
index 5ef9ddc..26cff6a 100644
--- a/source/blender/compositor/operations/COM_VariableSizeBokehBlurOperation.cpp
+++ b/source/blender/compositor/operations/COM_VariableSizeBokehBlurOperation.cpp
@@ -64,18 +64,18 @@ void VariableSizeBokehBlurOperation::initExecution()
}
struct VariableSizeBokehBlurTileData
{
- MemoryBuffer *color;
- MemoryBuffer *bokeh;
- MemoryBuffer *size;
+ MemoryBufferColor *color;
+ MemoryBufferColor *bokeh;
+ MemoryBufferValue *size;
int maxBlurScalar;
};
void *VariableSizeBokehBlurOperation::initializeTileData(rcti *rect)
{
VariableSizeBokehBlurTileData *data = new VariableSizeBokehBlurTileData();
- data->color = (MemoryBuffer *)this->m_inputProgram->initializeTileData(rect);
- data->bokeh = (MemoryBuffer *)this->m_inputBokehProgram->initializeTileData(rect);
- data->size = (MemoryBuffer *)this->m_inputSizeProgram->initializeTileData(rect);
+ data->color = (MemoryBufferColor *)this->m_inputProgram->initializeTileData(rect);
+ data->bokeh = (MemoryBufferColor *)this->m_inputBokehProgram->initializeTileData(rect);
+ data->size = (MemoryBufferValue *)this->m_inputSizeProgram->initializeTileData(rect);
rcti rect2;
@@ -98,9 +98,11 @@ void VariableSizeBokehBlurOperation::deinitializeTileData(rcti *rect, void *data
void VariableSizeBokehBlurOperation::executePixel(float output[4], int x, int y, void *data)
{
VariableSizeBokehBlurTileData *tileData = (VariableSizeBokehBlurTileData *)data;
- MemoryBuffer *inputProgramBuffer = tileData->color;
- MemoryBuffer *inputBokehBuffer = tileData->bokeh;
- MemoryBuffer *inputSizeBuffer = tileData->size;
+ MemoryBufferColor *inputProgramBuffer = tileData->color;
+ MemoryBufferColor *inputBokehBuffer = tileData->bokeh;
+ MemoryBufferValue *inputSizeBuffer = tileData->size;
+ SamplerNearestNoCheckColor *bokeh_sampler = inputBokehBuffer->get_sampler_nocheck();
+ SamplerNearestNoCheckValue *size_sampler = inputSizeBuffer->get_sampler_nocheck();
float *inputSizeFloatBuffer = inputSizeBuffer->getBuffer();
float *inputProgramFloatBuffer = inputProgramBuffer->getBuffer();
float readColor[4];
@@ -130,7 +132,7 @@ void VariableSizeBokehBlurOperation::executePixel(float output[4], int x, int y,
int maxy = min(y + maxBlurScalar, (int)m_height);
#endif
{
- inputSizeBuffer->readNoCheck(tempSize, x, y);
+ size_sampler->read(tempSize, x, y);
inputProgramBuffer->readNoCheck(readColor, x, y);
copy_v4_v4(color_accum, readColor);
@@ -156,7 +158,7 @@ void VariableSizeBokehBlurOperation::executePixel(float output[4], int x, int y,
float uv[2] = {
(float)(COM_BLUR_BOKEH_PIXELS / 2) + (dx / size) * (float)((COM_BLUR_BOKEH_PIXELS / 2) - 1),
(float)(COM_BLUR_BOKEH_PIXELS / 2) + (dy / size) * (float)((COM_BLUR_BOKEH_PIXELS / 2) - 1)};
- inputBokehBuffer->readNoCheck(bokeh, uv[0], uv[1]);
+ bokeh_sampler->read(bokeh, uv[0], uv[1]);
madd_v4_v4v4(color_accum, bokeh, &inputProgramFloatBuffer[offsetColorNxNy]);
add_v4_v4(multiplier_accum, bokeh);
}
More information about the Bf-blender-cvs
mailing list