diff options
4 files changed, 66 insertions, 3 deletions
diff --git a/source/blender/compositor/intern/COM_NodeOperation.cc b/source/blender/compositor/intern/COM_NodeOperation.cc index 6c60a858b6c..35e7f1adc7d 100644 --- a/source/blender/compositor/intern/COM_NodeOperation.cc +++ b/source/blender/compositor/intern/COM_NodeOperation.cc @@ -259,17 +259,18 @@ std::ostream &operator<<(std::ostream &os, const NodeOperation &node_operation) { NodeOperationFlags flags = node_operation.get_flags(); os << "NodeOperation("; + os << "id=" << node_operation.get_id(); if (!node_operation.get_name().empty()) { - os << "name=" << node_operation.get_name() << ","; + os << ",name=" << node_operation.get_name(); } - os << "flags={" << flags << "},"; + os << ",flags={" << flags << "}"; if (flags.is_read_buffer_operation) { const ReadBufferOperation *read_operation = (const ReadBufferOperation *)&node_operation; const MemoryProxy *proxy = read_operation->getMemoryProxy(); if (proxy) { const WriteBufferOperation *write_operation = proxy->getWriteBufferOperation(); if (write_operation) { - os << "write=" << (NodeOperation &)*write_operation << ","; + os << ",write=" << (NodeOperation &)*write_operation; } } } diff --git a/source/blender/compositor/intern/COM_NodeOperation.h b/source/blender/compositor/intern/COM_NodeOperation.h index 783c1fd63c8..d0bfe3c1311 100644 --- a/source/blender/compositor/intern/COM_NodeOperation.h +++ b/source/blender/compositor/intern/COM_NodeOperation.h @@ -251,6 +251,7 @@ struct NodeOperationFlags { */ class NodeOperation { private: + int m_id; std::string m_name; Vector<NodeOperationInput> m_inputs; Vector<NodeOperationOutput> m_outputs; @@ -307,6 +308,16 @@ class NodeOperation { return m_name; } + void set_id(const int id) + { + m_id = id; + } + + const int get_id() const + { + return m_id; + } + const NodeOperationFlags get_flags() const { return flags; diff --git a/source/blender/compositor/intern/COM_NodeOperationBuilder.cc b/source/blender/compositor/intern/COM_NodeOperationBuilder.cc index 59ce56a7cd5..889af4ea39a 100644 --- a/source/blender/compositor/intern/COM_NodeOperationBuilder.cc +++ b/source/blender/compositor/intern/COM_NodeOperationBuilder.cc @@ -124,6 +124,7 @@ void NodeOperationBuilder::convertToOperations(ExecutionSystem *system) void NodeOperationBuilder::addOperation(NodeOperation *operation) { + operation->set_id(m_operations.size()); m_operations.append(operation); if (m_current_node) { operation->set_name(m_current_node->getbNode()->name); @@ -691,4 +692,41 @@ void NodeOperationBuilder::group_operations() } } +/** Create a graphviz representation of the NodeOperationBuilder. */ +std::ostream &operator<<(std::ostream &os, const NodeOperationBuilder &builder) +{ + os << "# Builder start\n"; + os << "digraph G {\n"; + os << " rankdir=LR;\n"; + os << " node [shape=box];\n"; + for (const NodeOperation *operation : builder.get_operations()) { + os << " op" << operation->get_id() << " [label=\"" << *operation << "\"];\n"; + } + + os << "\n"; + for (const NodeOperationBuilder::Link &link : builder.get_links()) { + os << " op" << link.from()->getOperation().get_id() << " -> op" + << link.to()->getOperation().get_id() << ";\n"; + } + for (const NodeOperation *operation : builder.get_operations()) { + if (operation->get_flags().is_read_buffer_operation) { + const ReadBufferOperation &read_operation = static_cast<const ReadBufferOperation &>( + *operation); + const WriteBufferOperation &write_operation = + *read_operation.getMemoryProxy()->getWriteBufferOperation(); + os << " op" << write_operation.get_id() << " -> op" << read_operation.get_id() << ";\n"; + } + } + + os << "}\n"; + os << "# Builder end\n"; + return os; +} + +std::ostream &operator<<(std::ostream &os, const NodeOperationBuilder::Link &link) +{ + os << link.from()->getOperation().get_id() << " -> " << link.to()->getOperation().get_id(); + return os; +} + } // namespace blender::compositor diff --git a/source/blender/compositor/intern/COM_NodeOperationBuilder.h b/source/blender/compositor/intern/COM_NodeOperationBuilder.h index b6fb0ebcc9e..3b0ce57ed26 100644 --- a/source/blender/compositor/intern/COM_NodeOperationBuilder.h +++ b/source/blender/compositor/intern/COM_NodeOperationBuilder.h @@ -119,6 +119,16 @@ class NodeOperationBuilder { return m_active_viewer; } + const Vector<NodeOperation *> &get_operations() const + { + return m_operations; + } + + const Vector<Link> &get_links() const + { + return m_links; + } + protected: /** Add datatype conversion where needed */ void add_datatype_conversions(); @@ -160,4 +170,7 @@ class NodeOperationBuilder { #endif }; +std::ostream &operator<<(std::ostream &os, const NodeOperationBuilder &builder); +std::ostream &operator<<(std::ostream &os, const NodeOperationBuilder::Link &link); + } // namespace blender::compositor |