22using namespace nodes::derived_node_tree_types;
54 for (
const bNode *
node : tree_context->
btree().nodes_by_type(
"CompositorNodeViewer")) {
63 if (!context.treat_viewer_as_composite_output()) {
68 for (
const bNode *
node : tree_context->
btree().nodes_by_type(
"CompositorNodeComposite")) {
81 for (
const bNode *
node : tree_context.
btree().nodes_by_type(
"CompositorNodeOutputFile")) {
82 if (
node->is_muted()) {
90 if (
node->is_muted()) {
110 const DerivedNodeTree &
tree,
125 if (!context.treat_viewer_as_composite_output()) {
126 for (
const bNode *
node : root_context.
btree().nodes_by_type(
"CompositorNodeComposite")) {
143 if (viewer_was_added) {
149 if (active_context.
is_root()) {
268 int number_of_input_buffers = 0;
269 int buffers_needed_by_dependencies = 0;
287 number_of_input_buffers++;
293 const int buffers_needed_by_dependency = needed_buffers.
lookup(doutput.
node());
294 buffers_needed_by_dependencies = std::max(buffers_needed_by_dependency,
295 buffers_needed_by_dependencies);
299 int number_of_output_buffers = 0;
308 if (!
output->is_logically_linked()) {
315 number_of_output_buffers++;
322 const int total_buffers = std::max(number_of_input_buffers + number_of_output_buffers,
323 buffers_needed_by_dependencies);
324 needed_buffers.
add(
node, total_buffers);
327 return needed_buffers;
405 int insertion_position = 0;
406 for (
int i = 0; i < sorted_dependency_nodes.
size(); i++) {
408 needed_buffers.
lookup(sorted_dependency_nodes[i]))
410 insertion_position++;
416 sorted_dependency_nodes.
insert(insertion_position, doutput.
node());
420 for (
const DNode &dependency_node : sorted_dependency_nodes) {
421 node_stack.
push(dependency_node);
426 if (sorted_dependency_nodes.
is_empty()) {
429 schedule.
add(node_stack.
pop());
bool add(const Key &key, const Value &value)
const Value & lookup(const Key &key) const
bool contains(const Key &key) const
bool contains(const Key &key) const
void add_new(const Key &key)
void push(const T &value)
bool contains(const Key &key) const
bool contains(const T &value) const
void insert(const int64_t insert_index, const T &value)
const DTreeContext * context() const
const DTreeContext * child_context(const bNode &node) const
const DTreeContext * parent_context() const
const bNode * parent_node() const
const bNodeTree & btree() const
static bool add_viewer_nodes_in_context(const Context &context, const DTreeContext *tree_context, Stack< DNode > &node_stack)
bool is_output_linked_to_node_conditioned(DOutputSocket output, FunctionRef< bool(DNode)> condition)
static void add_output_nodes(const Context &context, const DerivedNodeTree &tree, Stack< DNode > &node_stack)
static bool is_tree_context_muted(const DTreeContext &tree_context)
Schedule compute_schedule(const Context &context, const DerivedNodeTree &tree)
DOutputSocket get_output_linked_to_input(DInputSocket input)
static NeededBuffers compute_number_of_needed_buffers(Stack< DNode > &output_nodes)
bool is_pixel_node(DNode node)
bool is_socket_available(const bNodeSocket *socket)
static void add_file_output_nodes(const DTreeContext &tree_context, Stack< DNode > &node_stack)