[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [43104] branches/tile/source/blender/ compositor: Merge changes from commits 42814, 42928, 43004 into new compositing nodes code,

Brecht Van Lommel brechtvanlommel at pandora.be
Tue Jan 3 18:33:39 CET 2012


Revision: 43104
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43104
Author:   blendix
Date:     2012-01-03 17:33:38 +0000 (Tue, 03 Jan 2012)
Log Message:
-----------
Merge changes from commits 42814, 42928, 43004 into new compositing nodes code,
to complete the previous merge commit.

Modified Paths:
--------------
    branches/tile/source/blender/compositor/nodes/COM_ViewerNode.cpp
    branches/tile/source/blender/compositor/operations/COM_AlphaOverPremultiplyOperation.cpp
    branches/tile/source/blender/compositor/operations/COM_PreviewOperation.cpp
    branches/tile/source/blender/compositor/operations/COM_SplitViewerOperation.cpp
    branches/tile/source/blender/compositor/operations/COM_ViewerBaseOperation.h
    branches/tile/source/blender/compositor/operations/COM_ViewerOperation.cpp

Modified: branches/tile/source/blender/compositor/nodes/COM_ViewerNode.cpp
===================================================================
--- branches/tile/source/blender/compositor/nodes/COM_ViewerNode.cpp	2012-01-03 15:28:53 UTC (rev 43103)
+++ branches/tile/source/blender/compositor/nodes/COM_ViewerNode.cpp	2012-01-03 17:33:38 UTC (rev 43104)
@@ -37,7 +37,8 @@
 	if (imageSocket->isConnected()) {
 		bNode* editorNode = this->getbNode();
 		ViewerOperation *viewerOperation = new ViewerOperation();
-		viewerOperation->setColorManagement( context->getScene()->r.color_mgt_flag);
+		viewerOperation->setColorManagement( context->getScene()->r.color_mgt_flag & R_COLOR_MANAGEMENT);
+		viewerOperation->setColorPredivide( context->getScene()->r.color_mgt_flag & R_COLOR_MANAGEMENT_PREDIVIDE);
 		viewerOperation->setbNodeTree(context->getbNodeTree());
 		viewerOperation->setImage(image);
 		viewerOperation->setImageUser(imageUser);

Modified: branches/tile/source/blender/compositor/operations/COM_AlphaOverPremultiplyOperation.cpp
===================================================================
--- branches/tile/source/blender/compositor/operations/COM_AlphaOverPremultiplyOperation.cpp	2012-01-03 15:28:53 UTC (rev 43103)
+++ branches/tile/source/blender/compositor/operations/COM_AlphaOverPremultiplyOperation.cpp	2012-01-03 17:33:38 UTC (rev 43104)
@@ -36,7 +36,8 @@
 	inputColor1Operation->read(inputColor1, x, y, inputBuffers);
 	inputColor2Operation->read(inputOverColor, x, y, inputBuffers);
 
-    if(inputOverColor[3]<=0.0f) {
+	/* Zero alpha values should still permit an add of RGB data */
+    if(inputOverColor[3]<0.0f) {
         outputValue[0] = inputColor1[0];
         outputValue[1] = inputColor1[1];
         outputValue[2] = inputColor1[2];

Modified: branches/tile/source/blender/compositor/operations/COM_PreviewOperation.cpp
===================================================================
--- branches/tile/source/blender/compositor/operations/COM_PreviewOperation.cpp	2012-01-03 15:28:53 UTC (rev 43103)
+++ branches/tile/source/blender/compositor/operations/COM_PreviewOperation.cpp	2012-01-03 17:33:38 UTC (rev 43104)
@@ -89,11 +89,9 @@
             color[2] = 0.0f;
             color[3] = 1.0f;
 			input->read(color, rx, ry, memoryBuffers);
-            /// @todo: linear conversion only when scene color management is selected.
-            outputBuffer[offset] = FTOCHAR(linearrgb_to_srgb(color[0]));
-            outputBuffer[offset+1] = FTOCHAR(linearrgb_to_srgb(color[1]));
-            outputBuffer[offset+2] = FTOCHAR(linearrgb_to_srgb(color[2]));
-            outputBuffer[offset+3] = FTOCHAR(color[3]);
+            /// @todo: linear conversion only when scene color management is selected, also check predivide.
+			linearrgb_to_srgb_v4(color, color);
+            F4TOCHAR4(color, outputBuffer+offset);
             offset +=4;
         }
     }

Modified: branches/tile/source/blender/compositor/operations/COM_SplitViewerOperation.cpp
===================================================================
--- branches/tile/source/blender/compositor/operations/COM_SplitViewerOperation.cpp	2012-01-03 15:28:53 UTC (rev 43103)
+++ branches/tile/source/blender/compositor/operations/COM_SplitViewerOperation.cpp	2012-01-03 17:33:38 UTC (rev 43104)
@@ -27,6 +27,7 @@
 #include "BKE_image.h"
 #include "BLI_utildefines.h"
 #include "BLI_math_color.h"
+#include "BLI_math_vector.h"
 
 extern "C" {
     #include "MEM_guardedalloc.h"
@@ -72,25 +73,26 @@
     for (y = y1 ; y < y2 ; y++) {
         for (x = x1 ; x < x2 ; x++) {
             bool image1;
+			float srgb[4];
             image1 = xSplit?x>perc:y>perc;
             if (image1) {
 				image1Input->read(&(buffer[offset]), x, y, memoryBuffers);
             } else {
 				image2Input->read(&(buffer[offset]), x, y, memoryBuffers);
             }
-            /// @todo: linear conversion only when scene color management is selected.
+            /// @todo: linear conversion only when scene color management is selected, also check predivide.
             if (this->doColorManagement) {
-                bufferDisplay[offset] = FTOCHAR(linearrgb_to_srgb(buffer[offset]));
-                bufferDisplay[offset+1] = FTOCHAR(linearrgb_to_srgb(buffer[offset+1]));
-                bufferDisplay[offset+2] = FTOCHAR(linearrgb_to_srgb(buffer[offset+2]));
-                bufferDisplay[offset+3] = FTOCHAR(buffer[offset+3]);
+				if(this->doColorPredivide) {
+					linearrgb_to_srgb_predivide_v4(srgb, buffer+offset);
+				} else {
+					linearrgb_to_srgb_v4(srgb, buffer+offset);
+				}
             } else {
-                bufferDisplay[offset] = FTOCHAR((buffer[offset]));
-                bufferDisplay[offset+1] = FTOCHAR((buffer[offset+1]));
-                bufferDisplay[offset+2] = FTOCHAR((buffer[offset+2]));
-                bufferDisplay[offset+3] = FTOCHAR(buffer[offset+3]);
+				copy_v4_v4(srgb, buffer+offset);
             }
 
+			F4TOCHAR4(srgb, bufferDisplay+offset);
+
             offset +=4;
         }
         offset += (this->getWidth()-(x2-x1))*4;

Modified: branches/tile/source/blender/compositor/operations/COM_ViewerBaseOperation.h
===================================================================
--- branches/tile/source/blender/compositor/operations/COM_ViewerBaseOperation.h	2012-01-03 15:28:53 UTC (rev 43103)
+++ branches/tile/source/blender/compositor/operations/COM_ViewerBaseOperation.h	2012-01-03 17:33:38 UTC (rev 43104)
@@ -39,6 +39,7 @@
     float centerY;
 	OrderOfChunks chunkOrder;
     bool doColorManagement;
+	bool doColorPredivide;
 
 public:
 	bool isOutputOperation(bool rendering) const {return !rendering;}
@@ -56,7 +57,8 @@
     float getCenterY() { return this->centerY; }
 	OrderOfChunks getChunkOrder() { return this->chunkOrder; }
 	const int getRenderPriority() const;
-        void setColorManagement(bool doColorManagement) {this->doColorManagement = doColorManagement;}
+	void setColorManagement(bool doColorManagement) {this->doColorManagement = doColorManagement;}
+	void setColorPredivide(bool doColorPredivide) {this->doColorPredivide = doColorPredivide;}
 	bool isViewerOperation() {return true;}
 		
 protected:

Modified: branches/tile/source/blender/compositor/operations/COM_ViewerOperation.cpp
===================================================================
--- branches/tile/source/blender/compositor/operations/COM_ViewerOperation.cpp	2012-01-03 15:28:53 UTC (rev 43103)
+++ branches/tile/source/blender/compositor/operations/COM_ViewerOperation.cpp	2012-01-03 17:33:38 UTC (rev 43104)
@@ -30,6 +30,7 @@
 #include "PIL_time.h"
 #include "BLI_utildefines.h"
 #include "BLI_math_color.h"
+#include "BLI_math_vector.h"
 
 extern "C" {
 	#include "MEM_guardedalloc.h"
@@ -70,7 +71,7 @@
 	const int y2 = rect->ymax;
 	const int offsetadd = (this->getWidth()-(x2-x1))*4;
 	int offset = (y1*this->getWidth() + x1 ) * 4;
-	float alpha[4];
+	float alpha[4], srgb[4];
 	int x;
 	int y;
 	bool breaked = false;
@@ -82,19 +83,19 @@
 				alphaInput->read(alpha, x, y, memoryBuffers);
 				buffer[offset+3] = alpha[0];
 			}
-			/// @todo: linear conversion only when scene color management is selected.
+			/// @todo: linear conversion only when scene color management is selected, also check predivide.
 			if (this->doColorManagement) {
-				bufferDisplay[offset] = FTOCHAR(linearrgb_to_srgb(buffer[offset]));
-				bufferDisplay[offset+1] = FTOCHAR(linearrgb_to_srgb(buffer[offset+1]));
-				bufferDisplay[offset+2] = FTOCHAR(linearrgb_to_srgb(buffer[offset+2]));
-				bufferDisplay[offset+3] = FTOCHAR(buffer[offset+3]);
+				if(this->doColorPredivide) {
+					linearrgb_to_srgb_predivide_v4(srgb, buffer+offset);
+				} else {
+					linearrgb_to_srgb_v4(srgb, buffer+offset);
+				}
 			} else {
-				bufferDisplay[offset] = FTOCHAR((buffer[offset]));
-				bufferDisplay[offset+1] = FTOCHAR((buffer[offset+1]));
-				bufferDisplay[offset+2] = FTOCHAR((buffer[offset+2]));
-				bufferDisplay[offset+3] = FTOCHAR(buffer[offset+3]);
+				copy_v4_v4(srgb, buffer+offset);
 			}
-			
+
+			F4TOCHAR4(srgb, bufferDisplay+offset);
+
 			offset +=4;
 		}
 		if (tree->test_break && tree->test_break(tree->tbh)) {



More information about the Bf-blender-cvs mailing list