Files
test/source/blender/compositor/intern/COM_NodeGraph.h
Sergey Sharybin c1bc70b711 Cleanup: Add a copyright notice to files and use SPDX format
A lot of files were missing copyright field in the header and
the Blender Foundation contributed to them in a sense of bug
fixing and general maintenance.

This change makes it explicit that those files are at least
partially copyrighted by the Blender Foundation.

Note that this does not make it so the Blender Foundation is
the only holder of the copyright in those files, and developers
who do not have a signed contract with the foundation still
hold the copyright as well.

Another aspect of this change is using SPDX format for the
header. We already used it for the license specification,
and now we state it for the copyright as well, following the
FAQ:

    https://reuse.software/faq/
2023-05-31 16:19:06 +02:00

105 lines
2.9 KiB
C++

/* SPDX-FileCopyrightText: 2013 Blender Foundation.
*
* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#include "DNA_node_types.h"
#ifdef WITH_CXX_GUARDEDALLOC
# include "MEM_guardedalloc.h"
#endif
namespace blender::compositor {
class CompositorContext;
class Node;
class NodeInput;
class NodeOutput;
/**
* Internal representation of DNA node data.
* This structure is converted into operations by \a NodeCompiler.
*/
class NodeGraph {
public:
struct Link {
NodeOutput *from;
NodeInput *to;
Link(NodeOutput *from, NodeInput *to) : from(from), to(to) {}
};
private:
Vector<Node *> nodes_;
Vector<Link> links_;
public:
~NodeGraph();
const Vector<Node *> &nodes() const
{
return nodes_;
}
const Vector<Link> &links() const
{
return links_;
}
void from_bNodeTree(const CompositorContext &context, bNodeTree *tree);
protected:
typedef std::pair<Vector<Node *>::iterator, Vector<Node *>::iterator> NodeRange;
static bNodeSocket *find_b_node_input(bNode *b_node, const char *identifier);
static bNodeSocket *find_b_node_output(bNode *b_node, const char *identifier);
void add_node(Node *node, bNodeTree *b_ntree, bNodeInstanceKey key, bool is_active_group);
void add_link(NodeOutput *from_socket, NodeInput *to_socket);
void add_bNodeTree(const CompositorContext &context,
int nodes_start,
bNodeTree *tree,
bNodeInstanceKey parent_key);
void add_bNode(const CompositorContext &context,
bNodeTree *b_ntree,
bNode *b_node,
bNodeInstanceKey key,
bool is_active_group);
NodeOutput *find_output(const NodeRange &node_range, bNodeSocket *b_socket);
void add_bNodeLink(const NodeRange &node_range, bNodeLink *b_nodelink);
/* **** Special proxy node type conversions **** */
/* These nodes are not represented in the node graph themselves,
* but converted into a number of proxy links
*/
void add_proxies_mute(bNodeTree *b_ntree,
bNode *b_node,
bNodeInstanceKey key,
bool is_active_group);
void add_proxies_skip(bNodeTree *b_ntree,
bNode *b_node,
bNodeInstanceKey key,
bool is_active_group);
void add_proxies_group_inputs(bNode *b_node, bNode *b_node_io);
void add_proxies_group_outputs(const CompositorContext &context,
bNode *b_node,
bNode *b_node_io);
void add_proxies_group(const CompositorContext &context, bNode *b_node, bNodeInstanceKey key);
void add_proxies_reroute(bNodeTree *b_ntree,
bNode *b_node,
bNodeInstanceKey key,
bool is_active_group);
#ifdef WITH_CXX_GUARDEDALLOC
MEM_CXX_CLASS_ALLOC_FUNCS("COM:NodeGraph")
#endif
};
} // namespace blender::compositor