We've reconsidered previous patch in IRC.
authorSergey Sharybin <sergey.vfx@gmail.com>
Sun, 10 Feb 2013 13:14:51 +0000 (13:14 +0000)
committerSergey Sharybin <sergey.vfx@gmail.com>
Sun, 10 Feb 2013 13:14:51 +0000 (13:14 +0000)
It's more useful to completely ignore alpha for display of straight
colors.

Supporting straight pipeline is possible, but not a topic for bcon4.

source/blender/compositor/nodes/COM_CompositorNode.cpp
source/blender/compositor/nodes/COM_ViewerNode.cpp
source/blender/compositor/operations/COM_CompositorOperation.cpp
source/blender/compositor/operations/COM_CompositorOperation.h
source/blender/compositor/operations/COM_ViewerBaseOperation.cpp
source/blender/compositor/operations/COM_ViewerBaseOperation.h
source/blender/compositor/operations/COM_ViewerOperation.cpp
source/blender/editors/space_node/drawnode.c
source/blender/makesrna/intern/rna_nodetree.c

index e5c01c7..fc4dea8 100644 (file)
@@ -41,7 +41,7 @@ void CompositorNode::convertToOperations(ExecutionSystem *graph, CompositorConte
        compositorOperation->setSceneName(editorNode->id->name);
        compositorOperation->setRenderData(context->getRenderData());
        compositorOperation->setbNodeTree(context->getbNodeTree());
-       compositorOperation->setStraightAlpha(editorNode->custom2 & 1);
+       compositorOperation->setIgnoreAlpha(editorNode->custom2 & 1);
        imageSocket->relinkConnections(compositorOperation->getInputSocket(0), 0, graph);
        alphaSocket->relinkConnections(compositorOperation->getInputSocket(1));
        depthSocket->relinkConnections(compositorOperation->getInputSocket(2));
index 7625014..94f3c2e 100644 (file)
@@ -47,7 +47,7 @@ void ViewerNode::convertToOperations(ExecutionSystem *graph, CompositorContext *
        viewerOperation->setChunkOrder((OrderOfChunks)editorNode->custom1);
        viewerOperation->setCenterX(editorNode->custom3);
        viewerOperation->setCenterY(editorNode->custom4);
-       viewerOperation->setStraightAlpha(editorNode->custom2 & 1);
+       viewerOperation->setIgnoreAlpha(editorNode->custom2 & 1);
 
        viewerOperation->setViewSettings(context->getViewSettings());
        viewerOperation->setDisplaySettings(context->getDisplaySettings());
index 7cb3a61..43f491a 100644 (file)
@@ -49,7 +49,7 @@ CompositorOperation::CompositorOperation() : NodeOperation()
        this->m_alphaInput = NULL;
        this->m_depthInput = NULL;
 
-       this->m_straightAlpha = false;
+       this->m_ignoreAlpha = false;
 
        this->m_sceneName[0] = '\0';
 }
@@ -140,12 +140,14 @@ void CompositorOperation::executeRegion(rcti *rect, unsigned int tileNumber)
        for (y = y1; y < y2 && (!breaked); y++) {
                for (x = x1; x < x2 && (!breaked); x++) {
                        this->m_imageInput->read(color, x, y, COM_PS_NEAREST);
-                       if (this->m_alphaInput != NULL) {
-                               this->m_alphaInput->read(&(color[3]), x, y, COM_PS_NEAREST);
+                       if (this->m_ignoreAlpha) {
+                               color[3] = 1.0f;
+                       }
+                       else {
+                               if (this->m_alphaInput != NULL) {
+                                       this->m_alphaInput->read(&(color[3]), x, y, COM_PS_NEAREST);
+                               }
                        }
-
-                       if (this->m_straightAlpha)
-                               straight_to_premul_v4(color);
 
                        copy_v4_v4(buffer + offset4, color);
 
index e60862b..27d2966 100644 (file)
@@ -66,8 +66,8 @@ private:
         */
        SocketReader *m_depthInput;
 
-       /* node input has got straight alpha which shall be premultiplied */
-       bool m_straightAlpha;
+       /* Ignore any alpha input */
+       bool m_ignoreAlpha;
 
 public:
        CompositorOperation();
@@ -79,6 +79,6 @@ public:
        void deinitExecution();
        const CompositorPriority getRenderPriority() const { return COM_PRIORITY_MEDIUM; }
        void determineResolution(unsigned int resolution[2], unsigned int preferredResolution[2]);
-       void setStraightAlpha(bool value) { this->m_straightAlpha = value; }
+       void setIgnoreAlpha(bool value) { this->m_ignoreAlpha = value; }
 };
 #endif
index 87d7a81..0722469 100644 (file)
@@ -48,7 +48,7 @@ ViewerBaseOperation::ViewerBaseOperation() : NodeOperation()
        this->m_doDepthBuffer = false;
        this->m_viewSettings = NULL;
        this->m_displaySettings = NULL;
-       this->m_straightAlpha = false;
+       this->m_ignoreAlpha = false;
 }
 
 void ViewerBaseOperation::initExecution()
index 1f773c5..9f7e80a 100644 (file)
@@ -39,7 +39,7 @@ protected:
        OrderOfChunks m_chunkOrder;
        bool m_doDepthBuffer;
        ImBuf *m_ibuf;
-       bool m_straightAlpha;
+       bool m_ignoreAlpha;
 
        const ColorManagedViewSettings *m_viewSettings;
        const ColorManagedDisplaySettings *m_displaySettings;
@@ -60,7 +60,7 @@ public:
        OrderOfChunks getChunkOrder() { return this->m_chunkOrder; }
        const CompositorPriority getRenderPriority() const;
        bool isViewerOperation() { return true; }
-       void setStraightAlpha(bool value) { this->m_straightAlpha = value; }
+       void setIgnoreAlpha(bool value) { this->m_ignoreAlpha = value; }
 
        void setViewSettings(const ColorManagedViewSettings *viewSettings) { this->m_viewSettings = viewSettings; }
        void setDisplaySettings(const ColorManagedDisplaySettings *displaySettings) { this->m_displaySettings = displaySettings; }
index f1ac893..4d10e49 100644 (file)
@@ -89,18 +89,20 @@ void ViewerOperation::executeRegion(rcti *rect, unsigned int tileNumber)
        for (y = y1; y < y2 && (!breaked); y++) {
                for (x = x1; x < x2; x++) {
                        this->m_imageInput->read(&(buffer[offset4]), x, y, COM_PS_NEAREST);
-                       if (this->m_alphaInput != NULL) {
-                               this->m_alphaInput->read(alpha, x, y, COM_PS_NEAREST);
-                               buffer[offset4 + 3] = alpha[0];
+                       if (this->m_ignoreAlpha) {
+                               buffer[offset4 + 3] = 1.0f;
+                       }
+                       else {
+                               if (this->m_alphaInput != NULL) {
+                                       this->m_alphaInput->read(alpha, x, y, COM_PS_NEAREST);
+                                       buffer[offset4 + 3] = alpha[0];
+                               }
                        }
                        if (m_depthInput) {
                                this->m_depthInput->read(depth, x, y, COM_PS_NEAREST);
                                depthbuffer[offset] = depth[0];
                        }
 
-                       if (this->m_straightAlpha)
-                               straight_to_premul_v4(buffer + offset4);
-
                        offset ++;
                        offset4 += 4;
                }
index 9dd588e..57851e8 100644 (file)
@@ -2656,12 +2656,12 @@ static void node_composit_buts_ellipsemask(uiLayout *layout, bContext *UNUSED(C)
 
 static void node_composit_buts_composite(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
 {
-       uiItemR(layout, ptr, "use_straight_alpha", 0, NULL, ICON_NONE);
+       uiItemR(layout, ptr, "use_alpha", 0, NULL, ICON_NONE);
 }
 
 static void node_composit_buts_viewer(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
 {
-       uiItemR(layout, ptr, "use_straight_alpha", 0, NULL, ICON_NONE);
+       uiItemR(layout, ptr, "use_alpha", 0, NULL, ICON_NONE);
 }
 
 static void node_composit_buts_viewer_but(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
index cf60e3b..397e05b 100644 (file)
@@ -4084,9 +4084,9 @@ static void def_cmp_viewer(StructRNA *srna)
        RNA_def_property_ui_text(prop, "Y", "");
        RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
 
-       prop = RNA_def_property(srna, "use_straight_alpha", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_sdna(prop, NULL, "custom2", 1);
-       RNA_def_property_ui_text(prop, "Straight Alpha", "Treat alpha input of this node as straight");
+       prop = RNA_def_property(srna, "use_alpha", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_negative_sdna(prop, NULL, "custom2", 1);
+       RNA_def_property_ui_text(prop, "Use Alpha", "Colors are treated alpha premultiplied, or colors output straight (alpha gets set to 1)");
        RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
 }
 
@@ -4094,9 +4094,9 @@ static void def_cmp_composite(StructRNA *srna)
 {
        PropertyRNA *prop;
 
-       prop = RNA_def_property(srna, "use_straight_alpha", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_sdna(prop, NULL, "custom2", 1);
-       RNA_def_property_ui_text(prop, "Straight Alpha", "Treat alpha input of this node as straight");
+       prop = RNA_def_property(srna, "use_alpha", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_negative_sdna(prop, NULL, "custom2", 1);
+       RNA_def_property_ui_text(prop, "Use Alpha", "Colors are treated alpha premultiplied, or colors output straight (alpha gets set to 1)");
        RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
 }