[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