+ // 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();
+
+ float aspect_nom, aspect_denom;