Revision: 43742
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43742
Author:   dfelinto
Date:     2012-01-27 09:03:47 +0000 (Fri, 27 Jan 2012)
Log Message:
-----------
displace node cleanup (using clamp) + simple displace glitch fix + not using 
protected variables

Modified Paths:
--------------
    branches/tile/source/blender/compositor/nodes/COM_DisplaceNode.cpp
    branches/tile/source/blender/compositor/operations/COM_DisplaceOperation.cpp
    
branches/tile/source/blender/compositor/operations/COM_DisplaceSimpleOperation.cpp

Modified: branches/tile/source/blender/compositor/nodes/COM_DisplaceNode.cpp
===================================================================
--- branches/tile/source/blender/compositor/nodes/COM_DisplaceNode.cpp  
2012-01-27 08:17:53 UTC (rev 43741)
+++ branches/tile/source/blender/compositor/nodes/COM_DisplaceNode.cpp  
2012-01-27 09:03:47 UTC (rev 43742)
@@ -30,10 +30,10 @@
 void DisplaceNode::convertToOperations(ExecutionSystem *graph, 
CompositorContext * context)
 {
        NodeOperation *operation;
-       if (context->getQuality() == COM_QUALITY_HIGH)
+       if (context->getQuality() == COM_QUALITY_LOW)
+               operation = new DisplaceSimpleOperation();
+       else
                operation = new DisplaceOperation();
-       else
-               operation = new DisplaceSimpleOperation();
 
        
this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), true, 
0, graph);
        
this->getInputSocket(1)->relinkConnections(operation->getInputSocket(1), true, 
1, graph);

Modified: 
branches/tile/source/blender/compositor/operations/COM_DisplaceOperation.cpp
===================================================================
--- 
branches/tile/source/blender/compositor/operations/COM_DisplaceOperation.cpp    
    2012-01-27 08:17:53 UTC (rev 43741)
+++ 
branches/tile/source/blender/compositor/operations/COM_DisplaceOperation.cpp    
    2012-01-27 09:03:47 UTC (rev 43742)
@@ -21,6 +21,7 @@
 
 #include "COM_DisplaceOperation.h"
 #include "BLI_math.h"
+#include "BLI_utildefines.h"
 
 DisplaceOperation::DisplaceOperation(): NodeOperation() {
        this->addInputSocket(COM_DT_COLOR);
@@ -42,8 +43,8 @@
        this->inputScaleXProgram = this->getInputSocketReader(2);
        this->inputScaleYProgram = this->getInputSocketReader(3);
 
-       width_x4 = this->width * 4;
-       height_x4 = this->height * 4;
+       width_x4 = this->getWidth() * 4;
+       height_x4 = this->getHeight() * 4;
 }
 
 
@@ -68,19 +69,13 @@
 
        /* clamp x and y displacement to triple image resolution - 
         * to prevent hangs from huge values mistakenly plugged in eg. z 
buffers */
-       xs = min(width_x4, max(-width_x4, xs));
-       ys = min(height_x4, max(-height_x4, ys));
+       CLAMP(xs, -width_x4, width_x4);
+       CLAMP(ys, -height_x4, height_x4);
 
        this->inputVectorProgram->read(inVector, x, y, inputBuffers);
        p_dx = inVector[0] * xs;
        p_dy = inVector[1] * ys;
 
-       /* if no displacement, then just copy this pixel */
-       if (fabsf(p_dx) < DISPLACE_EPSILON && fabsf(p_dy) < DISPLACE_EPSILON) {
-               this->inputColorProgram->read(color, x, y, inputBuffers);
-               return;
-       }
-
        /* displaced pixel in uv coords, for image sampling */
        u = x - p_dx + 0.5f;
        v = y - p_dy + 0.5f;
@@ -95,8 +90,8 @@
        dxt = p_dx - d_dx;
        dyt = p_dy - d_dy;
 
-       dxt = signf(dxt)*maxf(fabsf(dxt), DISPLACE_EPSILON)/this->width;
-       dyt = signf(dyt)*maxf(fabsf(dyt), DISPLACE_EPSILON)/this->height;
+       dxt = signf(dxt)*maxf(fabsf(dxt), DISPLACE_EPSILON)/this->getWidth();
+       dyt = signf(dyt)*maxf(fabsf(dyt), DISPLACE_EPSILON)/this->getHeight();
 
        /* EWA filtering */
        this->inputColorProgram->read(color, u, v, dxt, dyt, inputBuffers);

Modified: 
branches/tile/source/blender/compositor/operations/COM_DisplaceSimpleOperation.cpp
===================================================================
--- 
branches/tile/source/blender/compositor/operations/COM_DisplaceSimpleOperation.cpp
  2012-01-27 08:17:53 UTC (rev 43741)
+++ 
branches/tile/source/blender/compositor/operations/COM_DisplaceSimpleOperation.cpp
  2012-01-27 09:03:47 UTC (rev 43742)
@@ -21,6 +21,7 @@
 
 #include "COM_DisplaceSimpleOperation.h"
 #include "BLI_math.h"
+#include "BLI_utildefines.h"
 
 DisplaceSimpleOperation::DisplaceSimpleOperation(): NodeOperation() {
        this->addInputSocket(COM_DT_COLOR);
@@ -41,8 +42,8 @@
        this->inputScaleXProgram = this->getInputSocketReader(2);
        this->inputScaleYProgram = this->getInputSocketReader(3);
 
-       width_x4 = this->width * 4;
-       height_x4 = this->height * 4;
+       width_x4 = this->getWidth() * 4;
+       height_x4 = this->getHeight() * 4;
 }
 
 
@@ -65,22 +66,19 @@
 
        /* clamp x and y displacement to triple image resolution - 
         * to prevent hangs from huge values mistakenly plugged in eg. z 
buffers */
-       xs = min(width_x4, max(-width_x4, xs));
-       ys = min(height_x4, max(-height_x4, ys));
+       CLAMP(xs, -width_x4, width_x4);
+       CLAMP(ys, -height_x4, height_x4);
 
        this->inputVectorProgram->read(inVector, x, y, inputBuffers);
        p_dx = inVector[0] * xs;
        p_dy = inVector[1] * ys;
 
-       /* if no displacement, then just copy this pixel */
-       if (fabsf(p_dx) < DISPLACE_EPSILON && fabsf(p_dy) < DISPLACE_EPSILON) {
-               this->inputColorProgram->read(color, x, y, inputBuffers);
-               return;
-       }
-
        /* displaced pixel in uv coords, for image sampling */
+       /* clamp nodes to avoid glitches */
        u = x - p_dx + 0.5f;
        v = y - p_dy + 0.5f;
+       CLAMP(u, 0.f, this->getWidth()-1.f);
+       CLAMP(v, 0.f, this->getHeight()-1.f);
 
        this->inputColorProgram->read(color, u, v, inputBuffers);
 }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to