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>2014-09-19 13:21:32 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2014-09-25 15:08:32 +0400
commitd165b1b266b9d19775ee73733b63824b8551aea6 (patch)
tree09ff334c725e519c8c3cd946b876b28e5675263c /intern/cycles/render/graph.cpp
parentb3d414cc216222e115924aa4d6b4ecf43f459d78 (diff)
Cycles: Add method to dump current shader graph to the graphiz file
This is rather useful to see how good optimization went and so. Currently uses quite simple notation: shader nodes are nodes on the graph, connects between graph nodes are named by the sockets names, so i.e. connection between BSDF and Mix would be named bsdf:closure1. Could be improved in the feature to draw fancier graph, but it's good enough already. Use in the following way: - To create graphix file call graph->dump_graph("graph.dot") - To visualize the grapf call: dot -Tpng graph.dot -o graph.png
Diffstat (limited to 'intern/cycles/render/graph.cpp')
-rw-r--r--intern/cycles/render/graph.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/intern/cycles/render/graph.cpp b/intern/cycles/render/graph.cpp
index d90e5c4b2c9..45b08832fea 100644
--- a/intern/cycles/render/graph.cpp
+++ b/intern/cycles/render/graph.cpp
@@ -835,5 +835,47 @@ void ShaderGraph::transform_multi_closure(ShaderNode *node, ShaderOutput *weight
}
}
+void ShaderGraph::dump_graph(const char *filename)
+{
+ FILE *fd = fopen(filename, "w");
+
+ if(fd == NULL) {
+ printf("Error opening file for dumping the graph: %s\n", filename);
+ return;
+ }
+
+ fprintf(fd, "digraph dependencygraph {\n");
+ fprintf(fd, "ranksep=1.5\n");
+ fprintf(fd, "splines=false\n");
+
+ foreach(ShaderNode *node, nodes) {
+ fprintf(fd, "// NODE: %p\n", node);
+ fprintf(fd,
+ "\"%p\" [shape=record,label=\"%s\"]\n",
+ node,
+ node->name.c_str());
+ }
+
+ foreach(ShaderNode *node, nodes) {
+ foreach(ShaderOutput *output, node->outputs) {
+ foreach(ShaderInput *input, output->links) {
+ fprintf(fd,
+ "// CONNECTION: %p->%p (%s:%s)\n",
+ output,
+ input,
+ output->name, input->name);
+ fprintf(fd,
+ "\"%p\":s -> \"%p\":n [label=\"%s:%s\"]\n",
+ output->parent,
+ input->parent,
+ output->name, input->name);
+ }
+ }
+ }
+
+ fprintf(fd, "}\n");
+ fclose(fd);
+}
+
CCL_NAMESPACE_END