+ // Create all GLSL programs needed to compute the given effect, and all outputs
+ // that depends on it (whenever possible).
+ void construct_glsl_programs(Node *output);
+
+ // Output the current graph to the given file in a Graphviz-compatible format;
+ // only useful for debugging.
+ void output_dot(const char *filename);
+
+ // Some of the graph algorithms assume that the nodes array is sorted
+ // topologically (inputs are always before outputs), but some operations
+ // (like graph rewriting) can change that. This function restores that order.
+ void sort_nodes_topologically();
+ void topological_sort_visit_node(Node *node, std::set<Node *> *visited_nodes, std::vector<Node *> *sorted_list);
+
+ // Used during finalize().
+ void propagate_gamma_and_color_space();
+ Node *find_output_node();
+
+ bool node_needs_colorspace_fix(Node *node);
+ void fix_internal_color_spaces();
+ void fix_output_color_space();
+
+ bool node_needs_gamma_fix(Node *node);
+ void fix_internal_gamma_by_asking_inputs(unsigned step);
+ void fix_internal_gamma_by_inserting_nodes(unsigned step);
+ void fix_output_gamma();