Blender V4.3
COM_MixNode.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#include "COM_MixNode.h"
6
7#include "COM_MixOperation.h"
8
9#include "DNA_material_types.h" /* the ramp types */
10
11namespace blender::compositor {
12
13MixNode::MixNode(bNode *editor_node) : Node(editor_node)
14{
15 /* pass */
16}
17
19 const CompositorContext & /*context*/) const
20{
21 NodeInput *value_socket = this->get_input_socket(0);
22 NodeInput *color1Socket = this->get_input_socket(1);
23 NodeInput *color2Socket = this->get_input_socket(2);
24 NodeOutput *output_socket = this->get_output_socket(0);
25 const bNode *editor_node = this->get_bnode();
26 bool use_alpha_premultiply = (this->get_bnode()->custom2 & 1) != 0;
27 bool use_clamp = (this->get_bnode()->custom2 & 2) != 0;
28
29 MixBaseOperation *convert_prog;
30 switch (editor_node->custom1) {
31 case MA_RAMP_ADD:
32 convert_prog = new MixAddOperation();
33 break;
34 case MA_RAMP_MULT:
35 convert_prog = new MixMultiplyOperation();
36 break;
37 case MA_RAMP_LIGHT:
38 convert_prog = new MixLightenOperation();
39 break;
40 case MA_RAMP_BURN:
41 convert_prog = new MixColorBurnOperation();
42 break;
43 case MA_RAMP_HUE:
44 convert_prog = new MixHueOperation();
45 break;
46 case MA_RAMP_COLOR:
47 convert_prog = new MixColorOperation();
48 break;
49 case MA_RAMP_SOFT:
50 convert_prog = new MixSoftLightOperation();
51 break;
52 case MA_RAMP_SCREEN:
53 convert_prog = new MixScreenOperation();
54 break;
55 case MA_RAMP_LINEAR:
56 convert_prog = new MixLinearLightOperation();
57 break;
58 case MA_RAMP_DIFF:
59 convert_prog = new MixDifferenceOperation();
60 break;
62 convert_prog = new MixExclusionOperation();
63 break;
64 case MA_RAMP_SAT:
65 convert_prog = new MixSaturationOperation();
66 break;
67 case MA_RAMP_DIV:
68 convert_prog = new MixDivideOperation();
69 break;
70 case MA_RAMP_SUB:
71 convert_prog = new MixSubtractOperation();
72 break;
73 case MA_RAMP_DARK:
74 convert_prog = new MixDarkenOperation();
75 break;
76 case MA_RAMP_OVERLAY:
77 convert_prog = new MixOverlayOperation();
78 break;
79 case MA_RAMP_VAL:
80 convert_prog = new MixValueOperation();
81 break;
82 case MA_RAMP_DODGE:
83 convert_prog = new MixDodgeOperation();
84 break;
85
86 case MA_RAMP_BLEND:
87 default:
88 convert_prog = new MixBlendOperation();
89 break;
90 }
91 convert_prog->set_use_value_alpha_multiply(use_alpha_premultiply);
92 convert_prog->set_use_clamp(use_clamp);
93 converter.add_operation(convert_prog);
94
95 converter.map_input_socket(value_socket, convert_prog->get_input_socket(0));
96 converter.map_input_socket(color1Socket, convert_prog->get_input_socket(1));
97 converter.map_input_socket(color2Socket, convert_prog->get_input_socket(2));
98 converter.map_output_socket(output_socket, convert_prog->get_output_socket(0));
99
100 converter.add_preview(convert_prog->get_output_socket(0));
101}
102
103} // namespace blender::compositor
@ MA_RAMP_LIGHT
@ MA_RAMP_COLOR
@ MA_RAMP_SAT
@ MA_RAMP_HUE
@ MA_RAMP_LINEAR
@ MA_RAMP_DIV
@ MA_RAMP_EXCLUSION
@ MA_RAMP_ADD
@ MA_RAMP_DODGE
@ MA_RAMP_SUB
@ MA_RAMP_SCREEN
@ MA_RAMP_SOFT
@ MA_RAMP_DARK
@ MA_RAMP_BURN
@ MA_RAMP_BLEND
@ MA_RAMP_VAL
@ MA_RAMP_OVERLAY
@ MA_RAMP_MULT
@ MA_RAMP_DIFF
Overall context of the compositor.
void set_use_value_alpha_multiply(const bool value)
void convert_to_operations(NodeConverter &converter, const CompositorContext &context) const override
convert node to operation
MixNode(bNode *editor_node)
void map_output_socket(NodeOutput *node_socket, NodeOperationOutput *operation_socket)
void add_preview(NodeOperationOutput *output)
void add_operation(NodeOperation *operation)
void map_input_socket(NodeInput *node_socket, NodeOperationInput *operation_socket)
NodeInput are sockets that can receive data/input.
Definition COM_Node.h:191
NodeOperationOutput * get_output_socket(unsigned int index=0)
NodeOperationInput * get_input_socket(unsigned int index)
NodeOutput are sockets that can send data/input.
Definition COM_Node.h:239
NodeOutput * get_output_socket(unsigned int index=0) const
Definition COM_Node.cc:85
NodeInput * get_input_socket(unsigned int index) const
Definition COM_Node.cc:90
const bNode * get_bnode() const
get the reference to the SDNA bNode struct
Definition COM_Node.h:65
int16_t custom1
int16_t custom2