34 converter, context, *node, cryptomatte_settings);
72 return std::string(prefix,
BLI_strnlen(prefix,
sizeof(prefix)));
77 if (render_layer->
name[0] ==
'\0') {
78 return std::string(render_pass->
name,
82 std::string combined_name =
91void CryptomatteNode::input_operations_from_render_source(
92 const CompositorContext &context,
105 if (!render_result) {
112 short view_layer_id = 0;
118 if (context.has_explicit_view() && !
STREQ(render_pass->view, context.get_view_name())) {
123 if (combined_name != prefix &&
blender::StringRef(combined_name).startswith(prefix)) {
124 RenderLayersProg *op =
new RenderLayersProg(
126 op->set_scene(scene);
127 op->set_layer_id(view_layer_id);
128 op->set_render_data(context.get_render_data());
129 op->set_view_name(context.get_view_name());
130 r_input_operations.append(op);
138void CryptomatteNode::input_operations_from_image_source(
139 const CompositorContext &context,
141 Vector<NodeOperation *> &r_input_operations)
154 ImageUser *iuser = &cryptomatte_settings->iuser;
169 if (combined_name != prefix &&
blender::StringRef(combined_name).startswith(prefix)) {
170 MultilayerColorOperation *op =
new MultilayerColorOperation();
171 iuser->
layer = layer_index;
172 op->set_image(image);
173 op->set_image_user(*iuser);
174 op->set_framenumber(context.get_framenumber());
175 op->set_render_data(context.get_render_data());
176 op->set_view_name(context.get_view_name());
177 op->set_layer_name(render_layer->
name);
178 op->set_pass_name(render_pass->name);
179 r_input_operations.append(op);
188Vector<NodeOperation *> CryptomatteNode::create_input_operations(
const CompositorContext &context,
191 Vector<NodeOperation *> input_operations;
192 switch (node.custom1) {
194 input_operations_from_render_source(context, node, input_operations);
197 input_operations_from_image_source(context, node, input_operations);
201 if (input_operations.is_empty()) {
202 SetColorOperation *op =
new SetColorOperation();
203 op->set_channel1(0.0f);
204 op->set_channel2(1.0f);
205 op->set_channel3(0.0f);
206 op->set_channel4(0.0f);
207 input_operations.append(op);
209 return input_operations;
222 for (
int i = 0; i < input_operations.
size(); ++i) {
241 const int num_inputs =
inputs_.size() - 1;
243 if (cryptomatte_settings) {
249 for (
int i = 0; i < num_inputs; i++) {
ImBuf * BKE_image_acquire_ibuf(Image *ima, ImageUser *iuser, void **r_lock)
void BKE_image_user_frame_calc(Image *ima, ImageUser *iuser, int cfra)
void BKE_image_release_ibuf(Image *ima, ImBuf *ibuf, void *lock)
#define LISTBASE_FOREACH(type, var, list)
#define LISTBASE_FOREACH_INDEX(type, var, list, index_var)
int char char int int int int size_t BLI_strnlen(const char *str, size_t maxlen) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
@ CMP_NODE_CRYPTOMATTE_SOURCE_IMAGE
@ CMP_NODE_CRYPTOMATTE_SOURCE_RENDER
Overall context of the compositor.
virtual CryptomatteOperation * create_cryptomatte_operation(NodeConverter &converter, const CompositorContext &context, const bNode &node, const NodeCryptomatte *cryptomatte_settings) const =0
void convert_to_operations(NodeConverter &converter, const CompositorContext &context) const override
convert node to operation
CryptomatteOperation * create_cryptomatte_operation(NodeConverter &converter, const CompositorContext &context, const bNode &node, const NodeCryptomatte *cryptomatte_settings) const override
CryptomatteOperation * create_cryptomatte_operation(NodeConverter &converter, const CompositorContext &context, const bNode &node, const NodeCryptomatte *cryptomatte_settings) const override
void add_object_index(float object_index)
void add_link(NodeOperationOutput *from, NodeOperationInput *to)
void map_output_socket(NodeOutput *node_socket, NodeOperationOutput *operation_socket)
void add_input_value(NodeOperationInput *input, float value)
void add_operation(NodeOperation *operation)
void map_input_socket(NodeInput *node_socket, NodeOperationInput *operation_socket)
NodeOperationOutput * get_output_socket(unsigned int index=0)
NodeOperationInput * get_input_socket(unsigned int index)
NodeOutput are sockets that can send data/input.
NodeOutput * get_output_socket(unsigned int index=0) const
NodeInput * get_input_socket(unsigned int index) const
Vector< NodeInput * > inputs_
the list of actual input-sockets
const bNode * get_bnode() const
get the reference to the SDNA bNode struct
void set_channel(int channel)
static std::string prefix_from_node(const bNode &node)
static std::string combined_layer_pass_name(RenderLayer *render_layer, RenderPass *render_pass)
void ntreeCompositCryptomatteLayerPrefix(const bNode *node, char *r_prefix, size_t prefix_maxncpy)
RenderResult * RE_AcquireResultRead(Render *re)
RenderLayer * RE_GetRenderLayer(RenderResult *rr, const char *name)
void RE_ReleaseResult(Render *re)
Render * RE_GetSceneRender(const Scene *scene)