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:
authorJeroen Bakker <jeroen@blender.org>2021-04-06 13:04:47 +0300
committerJeroen Bakker <jeroen@blender.org>2021-04-06 13:06:47 +0300
commit19ff2479cf686f32c29120ea8be02eef5c2423a2 (patch)
treeeb9684415289732c9550f2ca85e553d93de9c39c /source/blender/compositor/intern
parent663a82b10d23a8fd8468fec314b2d5ba740542e4 (diff)
Compositor: Add Streaming Operator for NodeOperationBuilder.
For debugging purposes to convert the internal state of the NodeOperationBuilder to a graphviz. Usage: std::cout << *this << "\n"; Inside any method of the NodeOperationBuilder.
Diffstat (limited to 'source/blender/compositor/intern')
-rw-r--r--source/blender/compositor/intern/COM_NodeOperation.cc7
-rw-r--r--source/blender/compositor/intern/COM_NodeOperation.h11
-rw-r--r--source/blender/compositor/intern/COM_NodeOperationBuilder.cc38
-rw-r--r--source/blender/compositor/intern/COM_NodeOperationBuilder.h13
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