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