Blender V4.3
COM_Debug.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2013 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
7#include <map>
8#include <string>
9
10#include "BLI_vector.hh"
11
12#include "COM_ExecutionSystem.h"
13#include "COM_MemoryBuffer.h"
14#include "COM_Node.h"
15
16namespace blender::compositor {
17
18static constexpr bool COM_EXPORT_GRAPHVIZ = false;
19static constexpr bool COM_GRAPHVIZ_SHOW_NODE_NAME = false;
20
21/* Saves operations results to image files. */
22static constexpr bool COM_EXPORT_OPERATION_BUFFERS = false;
23
24class Node;
25class NodeOperation;
26class ExecutionSystem;
27
28class DebugInfo {
29 public:
30 typedef std::map<const Node *, std::string> NodeNameMap;
31 typedef std::map<const NodeOperation *, std::string> OpNameMap;
32
33 static std::string node_name(const Node *node);
34 static std::string operation_name(const NodeOperation *op);
35
36 private:
37 static int file_index_;
39 static NodeNameMap node_names_;
41 static OpNameMap op_names_;
43 static std::string current_node_name_;
45 static std::string current_op_name_;
46
47 public:
48 static void convert_started()
49 {
51 op_names_.clear();
52 }
53 }
54
55 static void execute_started()
56 {
58 file_index_ = 1;
59 }
62 }
63 };
64
65 static void node_added(const Node *node)
66 {
68 node_names_[node] = std::string(node->get_bnode() ? node->get_bnode()->name : "");
69 }
70 }
71
72 static void node_to_operations(const Node *node)
73 {
75 current_node_name_ = node_names_[node];
76 }
77 }
78
79 static void operation_added(const NodeOperation *operation)
80 {
82 op_names_[operation] = current_node_name_;
83 }
84 };
85
86 static void operation_read_write_buffer(const NodeOperation *operation)
87 {
89 current_op_name_ = op_names_[operation];
90 }
91 };
92
93 static void operation_rendered(const NodeOperation *op, MemoryBuffer *render)
94 {
95 /* Don't export constant operations as there are too many and it's rarely useful. */
96 if (COM_EXPORT_OPERATION_BUFFERS && render && !render->is_a_single_elem()) {
97 export_operation(op, render);
98 }
99 }
100
101 static void graphviz(const ExecutionSystem *system, StringRefNull name = "");
102
103 protected:
104 static int graphviz_operation(const ExecutionSystem *system,
105 NodeOperation *operation,
106 char *str,
107 int maxlen);
108 static int graphviz_legend_color(const char *name, const char *color, char *str, int maxlen);
109 static int graphviz_legend_line(
110 const char *name, const char *color, const char *style, char *str, int maxlen);
111 static int graphviz_legend_group(
112 const char *name, const char *color, const char *style, char *str, int maxlen);
113 static int graphviz_legend(char *str, int maxlen);
114 static bool graphviz_system(const ExecutionSystem *system, char *str, int maxlen);
115
116 static void export_operation(const NodeOperation *op, MemoryBuffer *render);
117 static void delete_operation_exports();
118};
119
120} // namespace blender::compositor
static std::string node_name(const Node *node)
Definition COM_Debug.cc:42
static void node_to_operations(const Node *node)
Definition COM_Debug.h:72
static void operation_read_write_buffer(const NodeOperation *operation)
Definition COM_Debug.h:86
static void operation_added(const NodeOperation *operation)
Definition COM_Debug.h:79
static void delete_operation_exports()
Definition COM_Debug.cc:392
static int graphviz_operation(const ExecutionSystem *system, NodeOperation *operation, char *str, int maxlen)
Definition COM_Debug.cc:60
static std::string operation_name(const NodeOperation *op)
Definition COM_Debug.cc:51
static int graphviz_legend_line(const char *name, const char *color, const char *style, char *str, int maxlen)
Definition COM_Debug.cc:199
static bool graphviz_system(const ExecutionSystem *system, char *str, int maxlen)
Definition COM_Debug.cc:256
static void node_added(const Node *node)
Definition COM_Debug.h:65
std::map< const Node *, std::string > NodeNameMap
Definition COM_Debug.h:30
static void export_operation(const NodeOperation *op, MemoryBuffer *render)
Definition COM_Debug.cc:374
static void operation_rendered(const NodeOperation *op, MemoryBuffer *render)
Definition COM_Debug.h:93
std::map< const NodeOperation *, std::string > OpNameMap
Definition COM_Debug.h:31
static int graphviz_legend(char *str, int maxlen)
Definition COM_Debug.cc:222
static int graphviz_legend_color(const char *name, const char *color, char *str, int maxlen)
Definition COM_Debug.cc:188
static void graphviz(const ExecutionSystem *system, StringRefNull name="")
Definition COM_Debug.cc:340
static int graphviz_legend_group(const char *name, const char *color, const char *style, char *str, int maxlen)
Definition COM_Debug.cc:208
the ExecutionSystem contains the whole compositor tree.
a MemoryBuffer contains access to the data
NodeOperation contains calculation logic.
OperationNode * node
#define str(s)
static constexpr bool COM_EXPORT_GRAPHVIZ
Definition COM_Debug.h:18
static constexpr bool COM_GRAPHVIZ_SHOW_NODE_NAME
Definition COM_Debug.h:19
static constexpr bool COM_EXPORT_OPERATION_BUFFERS
Definition COM_Debug.h:22