Cleanup: comment line length (editors)
[blender.git] / source / blender / compositor / nodes / COM_ViewerNode.cpp
index 679589a7ce12c86150e85fec2f8464cd0e798c66..773476f588afc318813169dad6e214df0ed63ea7 100644 (file)
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  *
- * Contributor: 
- *             Jeroen Bakker 
- *             Monique Dewanchand
+ * Contributor:
+ *      Jeroen Bakker
+ *      Monique Dewanchand
  */
 
 #include "COM_ViewerNode.h"
 #include "BKE_global.h"
+#include "BKE_image.h"
+#include "BLI_listbase.h"
+#include "BKE_scene.h"
 
 #include "COM_ViewerOperation.h"
 #include "COM_ExecutionSystem.h"
 
-ViewerNode::ViewerNode(bNode *editorNode): Node(editorNode)
+ViewerNode::ViewerNode(bNode *editorNode) : Node(editorNode)
 {
+       /* pass */
 }
 
-void ViewerNode::convertToOperations(ExecutionSystem *graph, CompositorContext * context)\
+void ViewerNode::convertToOperations(NodeConverter &converter, const CompositorContext &context) const
 {
-       InputSocket *imageSocket = this->getInputSocket(0);
-       InputSocket *alphaSocket = this->getInputSocket(1);
-       Image *image = (Image*)this->getbNode()->id;
-       ImageUser * imageUser = (ImageUser*) this->getbNode()->storage;
        bNode *editorNode = this->getbNode();
-       if (imageSocket->isConnected()) {
-               ViewerOperation *viewerOperation = new ViewerOperation();
-               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);
-               viewerOperation->setActive(editorNode->flag & NODE_DO_OUTPUT);
-               viewerOperation->setChunkOrder((OrderOfChunks)editorNode->custom1);
-               viewerOperation->setCenterX(editorNode->custom3);
-               viewerOperation->setCenterY(editorNode->custom4);
-               imageSocket->relinkConnections(viewerOperation->getInputSocket(0), 0, graph);
-               alphaSocket->relinkConnections(viewerOperation->getInputSocket(1));
-               graph->addOperation(viewerOperation);
-               addPreviewOperation(graph, viewerOperation->getInputSocket(0), 0);
+       bool do_output = (editorNode->flag & NODE_DO_OUTPUT_RECALC || context.isRendering()) && (editorNode->flag & NODE_DO_OUTPUT);
+       bool ignore_alpha = (editorNode->custom2 & CMP_NODE_OUTPUT_IGNORE_ALPHA) != 0;
+
+       NodeInput *imageSocket = this->getInputSocket(0);
+       NodeInput *alphaSocket = this->getInputSocket(1);
+       NodeInput *depthSocket = this->getInputSocket(2);
+       Image *image = (Image *)this->getbNode()->id;
+       ImageUser *imageUser = (ImageUser *) this->getbNode()->storage;
+       ViewerOperation *viewerOperation = new ViewerOperation();
+       viewerOperation->setbNodeTree(context.getbNodeTree());
+       viewerOperation->setImage(image);
+       viewerOperation->setImageUser(imageUser);
+       viewerOperation->setChunkOrder((OrderOfChunks)editorNode->custom1);
+       viewerOperation->setCenterX(editorNode->custom3);
+       viewerOperation->setCenterY(editorNode->custom4);
+       /* alpha socket gives either 1 or a custom alpha value if "use alpha" is enabled */
+       viewerOperation->setUseAlphaInput(ignore_alpha || alphaSocket->isLinked());
+       viewerOperation->setRenderData(context.getRenderData());
+       viewerOperation->setViewName(context.getViewName());
+
+       viewerOperation->setViewSettings(context.getViewSettings());
+       viewerOperation->setDisplaySettings(context.getDisplaySettings());
+
+       viewerOperation->setResolutionInputSocketIndex(0);
+       if (!imageSocket->isLinked()) {
+               if (alphaSocket->isLinked()) {
+                       viewerOperation->setResolutionInputSocketIndex(1);
+               }
        }
+
+       converter.addOperation(viewerOperation);
+       converter.mapInputSocket(imageSocket, viewerOperation->getInputSocket(0));
+       /* only use alpha link if "use alpha" is enabled */
+       if (ignore_alpha)
+               converter.addInputValue(viewerOperation->getInputSocket(1), 1.0f);
+       else
+               converter.mapInputSocket(alphaSocket, viewerOperation->getInputSocket(1));
+       converter.mapInputSocket(depthSocket, viewerOperation->getInputSocket(2));
+
+       converter.addNodeInputPreview(imageSocket);
+
+       if (do_output)
+               converter.registerViewer(viewerOperation);
 }