* Blur node had some irregularities at the edge of the screen
authorJeroen Bakker <j.bakker@atmind.nl>
Mon, 11 Jun 2012 08:28:04 +0000 (08:28 +0000)
committerJeroen Bakker <j.bakker@atmind.nl>
Mon, 11 Jun 2012 08:28:04 +0000 (08:28 +0000)
 only visible when doing large size blurs.
 also solved the catcom/mitch filter that didn't work at low/medium quality

 PS never use BokehBlur Gausian filter as it is 99%+ identicat as non bokeh <= top for sergey- :)

source/blender/compositor/nodes/COM_BlurNode.cpp
source/blender/compositor/operations/COM_GaussianBokehBlurOperation.cpp
source/blender/compositor/operations/COM_GaussianXBlurOperation.cpp
source/blender/compositor/operations/COM_GaussianYBlurOperation.cpp

index d9cf2c2fef0a4856691441bf6e04746c5beecac3..b27b6323f4913db570c5a0c268085567515c0857 100644 (file)
@@ -45,9 +45,6 @@ void BlurNode::convertToOperations(ExecutionSystem *graph, CompositorContext * c
        
        CompositorQuality quality = context->getQuality();
        
-       if (data->filtertype == R_FILTER_MITCH || data->filtertype == R_FILTER_CATROM) {
-               quality = COM_QUALITY_HIGH;
-       }
        if (data->filtertype == R_FILTER_FAST_GAUSS) {
                FastGaussianBlurOperation *operationfgb = new FastGaussianBlurOperation();
                operationfgb->setData(data);
index e522d334d8bc211baf911a100f50072ede9d4c41..07cc07880e7e23f6d83dbd81a39252ab6fe283dd 100644 (file)
@@ -131,10 +131,11 @@ void GaussianBokehBlurOperation::executePixel(float *color, int x, int y, Memory
        maxy = min(maxy, inputBuffer->getRect()->ymax);
        maxx = min(maxx, inputBuffer->getRect()->xmax);
 
-       int index = 0;
+       int index;
        int step = QualityStepHelper::getStep();
        int offsetadd = QualityStepHelper::getOffsetAdd();
        for (int ny = miny ; ny < maxy ; ny +=step) {
+               index = ((ny-y)+this->rady) * (this->radx*2+1) + (minx-x+this->radx);
                int bufferindex = ((minx - bufferstartx)*4)+((ny-bufferstarty)*4*bufferwidth);
                for (int nx = minx ; nx < maxx ; nx +=step) {
                        float multiplyer = gausstab[index];
index 2eb51b4577fcdb075707eca600f3304cf6ad3d67..a7e443838a9cd15175b75e02a2134f2c6069fe26 100644 (file)
@@ -93,12 +93,13 @@ void GaussianXBlurOperation::executePixel(float *color, int x, int y, MemoryBuff
        maxy = min(maxy, inputBuffer->getRect()->ymax);
        maxx = min(maxx, inputBuffer->getRect()->xmax);
 
-       int index = 0;
+       int index;
        int step = getStep();
        int offsetadd = getOffsetAdd();
        int bufferindex = ((minx - bufferstartx)*4)+((miny-bufferstarty)*4*bufferwidth);
        for (int nx = minx ; nx < maxx ; nx +=step) {
-               float multiplyer = gausstab[index++];
+               index = (nx-x)+this->rad;
+               float multiplyer = gausstab[index];
                tempColor[0] += multiplyer * buffer[bufferindex];
                tempColor[1] += multiplyer * buffer[bufferindex+1];
                tempColor[2] += multiplyer * buffer[bufferindex+2];
index 28e8e548530df9703dbf41b712e657d7881b2bc3..c7da43fc20f45be81d9227e5554760116a4eccf4 100644 (file)
@@ -91,10 +91,11 @@ void GaussianYBlurOperation::executePixel(float *color, int x, int y, MemoryBuff
        maxx = min(maxx, inputBuffer->getRect()->xmax);
 
        int step = getStep();
-       int index = 0;
+       int index;
        for (int ny = miny ; ny < maxy ; ny +=step) {
+               index = (ny-y)+this->rad;
                int bufferindex = ((minx - bufferstartx)*4)+((ny-bufferstarty)*4*bufferwidth);
-               float multiplyer = gausstab[index++];
+               float multiplyer = gausstab[index];
                tempColor[0] += multiplyer * buffer[bufferindex];
                tempColor[1] += multiplyer * buffer[bufferindex+1];
                tempColor[2] += multiplyer * buffer[bufferindex+2];