[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [43486] branches/tile/source/blender/ compositor: TileBranch

Jeroen Bakker j.bakker at atmind.nl
Wed Jan 18 11:39:12 CET 2012


Revision: 43486
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43486
Author:   jbakker
Date:     2012-01-18 10:39:07 +0000 (Wed, 18 Jan 2012)
Log Message:
-----------
TileBranch
 * Removed storage of tiles to disc. in order to support buffer caching
 * Cleaned up spaces/tabs

Jeroen

Modified Paths:
--------------
    branches/tile/source/blender/compositor/COM_defines.h
    branches/tile/source/blender/compositor/intern/COM_ExecutionGroup.cpp
    branches/tile/source/blender/compositor/intern/COM_MemoryBuffer.cpp
    branches/tile/source/blender/compositor/intern/COM_MemoryBuffer.h
    branches/tile/source/blender/compositor/intern/COM_MemoryManager.cpp
    branches/tile/source/blender/compositor/intern/COM_MemoryManager.h
    branches/tile/source/blender/compositor/operations/COM_WriteBufferOperation.cpp

Modified: branches/tile/source/blender/compositor/COM_defines.h
===================================================================
--- branches/tile/source/blender/compositor/COM_defines.h	2012-01-18 10:16:39 UTC (rev 43485)
+++ branches/tile/source/blender/compositor/COM_defines.h	2012-01-18 10:39:07 UTC (rev 43486)
@@ -94,10 +94,6 @@
 #define COM_MM_MAX_ALLOCATED_MEMORY 1*1024*1024*1024
 
 #define COM_NUMBER_OF_CHANNELS 4
-/**
-  * enable the balancing of memory (saving MemoryBuffer to disc) to free memory
-  */
-#define COM_MM_ENABLE FALSE
 
 #define COM_RM_NORMAL 0
 #define COM_RM_LINEAR 1

Modified: branches/tile/source/blender/compositor/intern/COM_ExecutionGroup.cpp
===================================================================
--- branches/tile/source/blender/compositor/intern/COM_ExecutionGroup.cpp	2012-01-18 10:16:39 UTC (rev 43485)
+++ branches/tile/source/blender/compositor/intern/COM_ExecutionGroup.cpp	2012-01-18 10:39:07 UTC (rev 43486)
@@ -384,7 +384,7 @@
 
 	if (maxxchunk== minxchunk+1 && maxychunk == minychunk+1) {
 		const int chunkNumber = minxchunk+minychunk*numberOfXChunks;
-		MemoryBuffer *result = MemoryManager::getMemoryBuffer(memoryProxy, chunkNumber, true);
+		MemoryBuffer *result = MemoryManager::getMemoryBuffer(memoryProxy, chunkNumber);
 		return result;
 	}
 
@@ -404,9 +404,8 @@
 	for (indexx = max(minxchunk, 0); indexx<min((int)this->numberOfXChunks, maxxchunk) ; indexx++) {
 		for (indexy = max(minychunk, 0); indexy<min((int)this->numberOfYChunks, maxychunk) ; indexy++) {
 			int chunkNumber = indexx+indexy*this->numberOfXChunks;
-			MemoryBuffer *chunkBuffer = MemoryManager::getMemoryBuffer(memoryProxy, chunkNumber, true);
+			MemoryBuffer *chunkBuffer = MemoryManager::getMemoryBuffer(memoryProxy, chunkNumber);
 			result->copyContentFrom(chunkBuffer);
-			MemoryManager::releaseUser(chunkBuffer);
 		}
 	}
 
@@ -427,8 +426,6 @@
 				if (buffer->isTemporarily()) {
 					memoryBuffers[index] = NULL;
 					delete buffer;
-				} else {
-					buffer->removeUser();
 				}
 			}
 		}
@@ -460,7 +457,7 @@
 	NodeOperation * operation = this->getOutputNodeOperation();
 	if (operation->isWriteBufferOperation()) {
 		WriteBufferOperation* writeOperation = (WriteBufferOperation*)operation;
-		outputBuffer = MemoryManager::allocateMemoryBuffer(writeOperation->getMemoryProxy(), chunkNumber, rect, false);
+		outputBuffer = MemoryManager::allocateMemoryBuffer(writeOperation->getMemoryProxy(), chunkNumber, rect);
 	}
 	return outputBuffer;
 }

Modified: branches/tile/source/blender/compositor/intern/COM_MemoryBuffer.cpp
===================================================================
--- branches/tile/source/blender/compositor/intern/COM_MemoryBuffer.cpp	2012-01-18 10:16:39 UTC (rev 43485)
+++ branches/tile/source/blender/compositor/intern/COM_MemoryBuffer.cpp	2012-01-18 10:39:07 UTC (rev 43486)
@@ -38,25 +38,22 @@
 }
 
 MemoryBuffer::MemoryBuffer(MemoryProxy * memoryProxy, unsigned int chunkNumber, rcti* rect) {
-    BLI_init_rcti(&this->rect, rect->xmin, rect->xmax, rect->ymin, rect->ymax);
+	BLI_init_rcti(&this->rect, rect->xmin, rect->xmax, rect->ymin, rect->ymax);
 	this->memoryProxy = memoryProxy;
 	this->chunkNumber = chunkNumber;
-    this->buffer = (float*)MEM_mallocN(sizeof(float)*determineBufferSize()*4, "COM_MemoryBuffer");
-    this->state = COM_MB_ALLOCATED;
-    this->datatype = COM_DT_COLOR;
+	this->buffer = (float*)MEM_mallocN(sizeof(float)*determineBufferSize()*4, "COM_MemoryBuffer");
+	this->state = COM_MB_ALLOCATED;
+	this->datatype = COM_DT_COLOR;
 	this->chunkWidth = this->rect.xmax - this->rect.xmin;
-    this->filename = "";
-    this->numberOfUsers = 0;
-    BLI_mutex_init(&this->mutex);
 }
 
 MemoryBuffer::MemoryBuffer(MemoryProxy * memoryProxy, rcti* rect) {
-    BLI_init_rcti(&this->rect, rect->xmin, rect->xmax, rect->ymin, rect->ymax);
+	BLI_init_rcti(&this->rect, rect->xmin, rect->xmax, rect->ymin, rect->ymax);
 	this->memoryProxy = memoryProxy;
 	this->chunkNumber = -1;
-    this->buffer = (float*)MEM_mallocN(sizeof(float)*determineBufferSize()*4, "COM_MemoryBuffer");
-    this->state = COM_MB_TEMPORARILY;
-    this->datatype = COM_DT_COLOR;
+	this->buffer = (float*)MEM_mallocN(sizeof(float)*determineBufferSize()*4, "COM_MemoryBuffer");
+	this->state = COM_MB_TEMPORARILY;
+	this->datatype = COM_DT_COLOR;
 	this->chunkWidth = this->rect.xmax - this->rect.xmin;
 }
 MemoryBuffer* MemoryBuffer::duplicate() {
@@ -66,58 +63,50 @@
 }
 
 MemoryBuffer::~MemoryBuffer() {
-    if (this->buffer) {
-        MEM_freeN(this->buffer);
-        this->buffer = NULL;
-    }
-    if (this->state != COM_MB_TEMPORARILY) {
-        BLI_mutex_end(&this->mutex);
-        if (this->filename.length() != 0) {
-            if (remove(this->filename.c_str()) != 0) {
-//                printf("ERROR: remove tempfile %s\n", this->filename);
-            }
-        }
-    }
+	if (this->buffer) {
+		MEM_freeN(this->buffer);
+		this->buffer = NULL;
+	}
 }
 
 void MemoryBuffer::copyContentFrom(MemoryBuffer *otherBuffer) {
-    if (!otherBuffer) {
-        printf("no buffer to copy from\n");
-        return;
-    }
-    unsigned int otherY;
-    unsigned int minX = max(this->rect.xmin, otherBuffer->rect.xmin);
-    unsigned int maxX = min(this->rect.xmax, otherBuffer->rect.xmax);
-    unsigned int minY = max(this->rect.ymin, otherBuffer->rect.ymin);
-    unsigned int maxY = min(this->rect.ymax, otherBuffer->rect.ymax);
-    int offset;
-    int otherOffset;
+	if (!otherBuffer) {
+		printf("no buffer to copy from\n");
+		return;
+	}
+	unsigned int otherY;
+	unsigned int minX = max(this->rect.xmin, otherBuffer->rect.xmin);
+	unsigned int maxX = min(this->rect.xmax, otherBuffer->rect.xmax);
+	unsigned int minY = max(this->rect.ymin, otherBuffer->rect.ymin);
+	unsigned int maxY = min(this->rect.ymax, otherBuffer->rect.ymax);
+	int offset;
+	int otherOffset;
 
 
-    for (otherY = minY ; otherY<maxY ; otherY ++) {
+	for (otherY = minY ; otherY<maxY ; otherY ++) {
 		otherOffset = ((otherY-otherBuffer->rect.ymin) * otherBuffer->chunkWidth + minX-otherBuffer->rect.xmin)*4;
 		offset = ((otherY - this->rect.ymin) * this->chunkWidth + minX-this->rect.xmin)*4;
-        memcpy(&this->buffer[offset], &otherBuffer->buffer[otherOffset], (maxX-minX) * 4*sizeof(float));
-    }
+		memcpy(&this->buffer[offset], &otherBuffer->buffer[otherOffset], (maxX-minX) * 4*sizeof(float));
+	}
 }
 
 void MemoryBuffer::read(float* result, int x, int y) {
-    if (x>=this->rect.xmin && x < this->rect.xmax &&
-	        y>=this->rect.ymin && y < this->rect.ymax) {
-        int dx = x-this->rect.xmin;
-        int dy = y-this->rect.ymin;
+	if (x>=this->rect.xmin && x < this->rect.xmax &&
+			y>=this->rect.ymin && y < this->rect.ymax) {
+		int dx = x-this->rect.xmin;
+		int dy = y-this->rect.ymin;
 		int offset = (this->chunkWidth*dy+dx)*4;
-        result[0] = this->buffer[offset];
-        result[1] = this->buffer[offset+1];
-        result[2] = this->buffer[offset+2];
-        result[3] = this->buffer[offset+3];
-    }
-    else {
-        result[0] = 0.0f;
-        result[1] = 0.0f;
-        result[2] = 0.0f;
-        result[3] = 0.0f;
-    }
+		result[0] = this->buffer[offset];
+		result[1] = this->buffer[offset+1];
+		result[2] = this->buffer[offset+2];
+		result[3] = this->buffer[offset+3];
+	}
+	else {
+		result[0] = 0.0f;
+		result[1] = 0.0f;
+		result[2] = 0.0f;
+		result[3] = 0.0f;
+	}
 }
 void MemoryBuffer::writePixel(int x, int y, float color[4]) {
 	if (x>=this->rect.xmin && x < this->rect.xmax &&
@@ -131,41 +120,40 @@
 }
 
 void MemoryBuffer::readCubic(float* result, float x, float y) {
-    int x1 = floor(x);
-    int x2 = x1 + 1;
-    int y1 = floor(y);
-    int y2 = y1 + 1;
-
-    float valuex = x - x1;
-    float valuey = y - y1;
-    float mvaluex = 1.0 - valuex;
-    float mvaluey = 1.0 - valuey;
-
-    float color1[4];
-    float color2[4];
-    float color3[4];
-    float color4[4];
-
-    read(color1, x1, y1);
-    read(color2, x1, y2);
-    read(color3, x2, y1);
-    read(color4, x2, y2);
-
-    color1[0] = color1[0]*mvaluey + color2[0]*valuey;
-    color1[1] = color1[1]*mvaluey + color2[1]*valuey;
-    color1[2] = color1[2]*mvaluey + color2[2]*valuey;
-    color1[3] = color1[3]*mvaluey + color2[3]*valuey;
-
-    color3[0] = color3[0]*mvaluey + color4[0]*valuey;
-    color3[1] = color3[1]*mvaluey + color4[1]*valuey;
-    color3[2] = color3[2]*mvaluey + color4[2]*valuey;
-    color3[3] = color3[3]*mvaluey + color4[3]*valuey;
-
-    result[0] = color1[0]*mvaluex + color3[0]*valuex;
-    result[1] = color1[1]*mvaluex + color3[1]*valuex;
-    result[2] = color1[2]*mvaluex + color3[2]*valuex;
-    result[3] = color1[3]*mvaluex + color3[3]*valuex;
-
+	int x1 = floor(x);
+	int x2 = x1 + 1;
+	int y1 = floor(y);
+	int y2 = y1 + 1;
+	
+	float valuex = x - x1;
+	float valuey = y - y1;
+	float mvaluex = 1.0 - valuex;
+	float mvaluey = 1.0 - valuey;
+	
+	float color1[4];
+	float color2[4];
+	float color3[4];
+	float color4[4];
+	
+	read(color1, x1, y1);
+	read(color2, x1, y2);
+	read(color3, x2, y1);
+	read(color4, x2, y2);
+	
+	color1[0] = color1[0]*mvaluey + color2[0]*valuey;
+	color1[1] = color1[1]*mvaluey + color2[1]*valuey;
+	color1[2] = color1[2]*mvaluey + color2[2]*valuey;
+	color1[3] = color1[3]*mvaluey + color2[3]*valuey;
+	
+	color3[0] = color3[0]*mvaluey + color4[0]*valuey;
+	color3[1] = color3[1]*mvaluey + color4[1]*valuey;
+	color3[2] = color3[2]*mvaluey + color4[2]*valuey;
+	color3[3] = color3[3]*mvaluey + color4[3]*valuey;
+	
+	result[0] = color1[0]*mvaluex + color3[0]*valuex;
+	result[1] = color1[1]*mvaluex + color3[1]*valuex;
+	result[2] = color1[2]*mvaluex + color3[2]*valuex;
+	result[3] = color1[3]*mvaluex + color3[3]*valuex;
 }
 
 
@@ -335,98 +323,3 @@
 	// clipping can be ignored if alpha used, texr->ta already includes filtered edge
 	result[3] = result[3] ? result[3] *d : 1.f;
 }
-
-long MemoryBuffer::getAllocatedMemorySize() {
-    if (this->state == COM_MB_STORED) {
-        return 0l;
-    } else {
-        return sizeof(float)*determineBufferSize()*4;
-    }
-}
-
-bool MemoryBuffer::makeAvailable(bool addUser) {
-    bool result = false;
-    BLI_mutex_lock(&this->mutex);
-    if (this->state == COM_MB_STORED) {
-        result = true;
-        readFromDisc();
-    }
-    if (addUser) {
-        this->numberOfUsers++;
-    }
-    BLI_mutex_unlock(&this->mutex);
-    return result;
-}
-
-bool MemoryBuffer::isAvailable() {
-    return this->state == COM_MB_AVAILABLE;
-}
-
-bool MemoryBuffer::saveToDisc() {

@@ Diff output truncated at 10240 characters. @@


More information about the Bf-blender-cvs mailing list