diff options
Diffstat (limited to 'source/blender/compositor/intern/COM_NodeConverter.cc')
-rw-r--r-- | source/blender/compositor/intern/COM_NodeConverter.cc | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/source/blender/compositor/intern/COM_NodeConverter.cc b/source/blender/compositor/intern/COM_NodeConverter.cc new file mode 100644 index 00000000000..2db31bd4133 --- /dev/null +++ b/source/blender/compositor/intern/COM_NodeConverter.cc @@ -0,0 +1,162 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Copyright 2013, Blender Foundation. + */ + +#include "BLI_utildefines.h" + +#include "COM_Debug.h" + +#include "COM_NodeOperation.h" +#include "COM_NodeOperationBuilder.h" +#include "COM_SetColorOperation.h" +#include "COM_SetValueOperation.h" +#include "COM_SetVectorOperation.h" +#include "COM_SocketProxyOperation.h" + +#include "COM_NodeConverter.h" /* own include */ + +NodeConverter::NodeConverter(NodeOperationBuilder *builder) : m_builder(builder) +{ +} + +void NodeConverter::addOperation(NodeOperation *operation) +{ + m_builder->addOperation(operation); +} + +void NodeConverter::mapInputSocket(NodeInput *node_socket, NodeOperationInput *operation_socket) +{ + m_builder->mapInputSocket(node_socket, operation_socket); +} + +void NodeConverter::mapOutputSocket(NodeOutput *node_socket, NodeOperationOutput *operation_socket) +{ + m_builder->mapOutputSocket(node_socket, operation_socket); +} + +void NodeConverter::addLink(NodeOperationOutput *from, NodeOperationInput *to) +{ + m_builder->addLink(from, to); +} + +void NodeConverter::addPreview(NodeOperationOutput *output) +{ + m_builder->addPreview(output); +} + +void NodeConverter::addNodeInputPreview(NodeInput *input) +{ + m_builder->addNodeInputPreview(input); +} + +NodeOperation *NodeConverter::setInvalidOutput(NodeOutput *output) +{ + /* this is a really bad situation - bring on the pink! - so artists know this is bad */ + const float warning_color[4] = {1.0f, 0.0f, 1.0f, 1.0f}; + + SetColorOperation *operation = new SetColorOperation(); + operation->setChannels(warning_color); + + m_builder->addOperation(operation); + m_builder->mapOutputSocket(output, operation->getOutputSocket()); + + return operation; +} + +NodeOperationOutput *NodeConverter::addInputProxy(NodeInput *input, bool use_conversion) +{ + SocketProxyOperation *proxy = new SocketProxyOperation(input->getDataType(), use_conversion); + m_builder->addOperation(proxy); + + m_builder->mapInputSocket(input, proxy->getInputSocket(0)); + + return proxy->getOutputSocket(); +} + +NodeOperationInput *NodeConverter::addOutputProxy(NodeOutput *output, bool use_conversion) +{ + SocketProxyOperation *proxy = new SocketProxyOperation(output->getDataType(), use_conversion); + m_builder->addOperation(proxy); + + m_builder->mapOutputSocket(output, proxy->getOutputSocket()); + + return proxy->getInputSocket(0); +} + +void NodeConverter::addInputValue(NodeOperationInput *input, float value) +{ + SetValueOperation *operation = new SetValueOperation(); + operation->setValue(value); + + m_builder->addOperation(operation); + m_builder->addLink(operation->getOutputSocket(), input); +} + +void NodeConverter::addInputColor(NodeOperationInput *input, const float value[4]) +{ + SetColorOperation *operation = new SetColorOperation(); + operation->setChannels(value); + + m_builder->addOperation(operation); + m_builder->addLink(operation->getOutputSocket(), input); +} + +void NodeConverter::addInputVector(NodeOperationInput *input, const float value[3]) +{ + SetVectorOperation *operation = new SetVectorOperation(); + operation->setVector(value); + + m_builder->addOperation(operation); + m_builder->addLink(operation->getOutputSocket(), input); +} + +void NodeConverter::addOutputValue(NodeOutput *output, float value) +{ + SetValueOperation *operation = new SetValueOperation(); + operation->setValue(value); + + m_builder->addOperation(operation); + m_builder->mapOutputSocket(output, operation->getOutputSocket()); +} + +void NodeConverter::addOutputColor(NodeOutput *output, const float value[4]) +{ + SetColorOperation *operation = new SetColorOperation(); + operation->setChannels(value); + + m_builder->addOperation(operation); + m_builder->mapOutputSocket(output, operation->getOutputSocket()); +} + +void NodeConverter::addOutputVector(NodeOutput *output, const float value[3]) +{ + SetVectorOperation *operation = new SetVectorOperation(); + operation->setVector(value); + + m_builder->addOperation(operation); + m_builder->mapOutputSocket(output, operation->getOutputSocket()); +} + +void NodeConverter::registerViewer(ViewerOperation *viewer) +{ + m_builder->registerViewer(viewer); +} + +ViewerOperation *NodeConverter::active_viewer() const +{ + return m_builder->active_viewer(); +} |