Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2013-04-02 21:56:41 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2013-04-02 21:56:41 +0400
commited792b5de08258f3c906d36381d67da55456ec34 (patch)
treec404856d85935db64036a93074c3a5e7079fa7d3 /source/blender/compositor/nodes/COM_EllipseMaskNode.cpp
parentf7efb510547e9686787128df99a616b940485382 (diff)
Box and Ellipse mask nodes will now output shape
even if nothing is attached to input. They'll use black image with render resolution as a background if nothing is attached to mask input. Was a request from 4K ToS project.
Diffstat (limited to 'source/blender/compositor/nodes/COM_EllipseMaskNode.cpp')
-rw-r--r--source/blender/compositor/nodes/COM_EllipseMaskNode.cpp40
1 files changed, 38 insertions, 2 deletions
diff --git a/source/blender/compositor/nodes/COM_EllipseMaskNode.cpp b/source/blender/compositor/nodes/COM_EllipseMaskNode.cpp
index dc4421abb25..fe0c85c173a 100644
--- a/source/blender/compositor/nodes/COM_EllipseMaskNode.cpp
+++ b/source/blender/compositor/nodes/COM_EllipseMaskNode.cpp
@@ -24,6 +24,9 @@
#include "COM_EllipseMaskOperation.h"
#include "COM_ExecutionSystem.h"
+#include "COM_SetValueOperation.h"
+#include "COM_ScaleOperation.h"
+
EllipseMaskNode::EllipseMaskNode(bNode *editorNode) : Node(editorNode)
{
/* pass */
@@ -32,11 +35,44 @@ EllipseMaskNode::EllipseMaskNode(bNode *editorNode) : Node(editorNode)
void EllipseMaskNode::convertToOperations(ExecutionSystem *graph, CompositorContext *context)
{
EllipseMaskOperation *operation;
+
operation = new EllipseMaskOperation();
operation->setData((NodeEllipseMask *)this->getbNode()->storage);
- this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), 0, graph);
+
+ InputSocket *inputSocket = this->getInputSocket(0);
+ OutputSocket *outputSocket = this->getOutputSocket(0);
+
+ if (inputSocket->isConnected()) {
+ inputSocket->relinkConnections(operation->getInputSocket(0), 0, graph);
+ outputSocket->relinkConnections(operation->getOutputSocket());
+ }
+ else {
+ /* Value operation to produce original transparent image */
+ SetValueOperation *valueOperation = new SetValueOperation();
+ valueOperation->setValue(0.0f);
+ graph->addOperation(valueOperation);
+
+ /* Scale that image up to render resolution */
+ const RenderData *rd = context->getRenderData();
+ ScaleFixedSizeOperation *scaleOperation = new ScaleFixedSizeOperation();
+
+ scaleOperation->setIsAspect(false);
+ scaleOperation->setIsCrop(false);
+ scaleOperation->setOffset(0.0f, 0.0f);
+
+ scaleOperation->setNewWidth(rd->xsch * rd->size / 100.0f);
+ scaleOperation->setNewHeight(rd->ysch * rd->size / 100.0f);
+
+ addLink(graph, valueOperation->getOutputSocket(0), scaleOperation->getInputSocket(0));
+ addLink(graph, scaleOperation->getOutputSocket(0), operation->getInputSocket(0));
+ outputSocket->relinkConnections(operation->getOutputSocket(0));
+
+ scaleOperation->getInputSocket(0)->getConnection()->setIgnoreResizeCheck(true);
+
+ graph->addOperation(scaleOperation);
+ }
+
this->getInputSocket(1)->relinkConnections(operation->getInputSocket(1), 1, graph);
- this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket(0));
operation->setMaskType(this->getbNode()->custom1);
graph->addOperation(operation);