tornavis/source/blender/compositor/nodes/COM_ColorBalanceNode.cc

61 lines
1.9 KiB
C++

/* SPDX-FileCopyrightText: 2011 Blender Authors
*
* SPDX-License-Identifier: GPL-2.0-or-later */
#include "COM_ColorBalanceNode.h"
#include "COM_ColorBalanceASCCDLOperation.h"
#include "COM_ColorBalanceLGGOperation.h"
namespace blender::compositor {
ColorBalanceNode::ColorBalanceNode(bNode *editor_node) : Node(editor_node)
{
/* pass */
}
void ColorBalanceNode::convert_to_operations(NodeConverter &converter,
const CompositorContext & /*context*/) const
{
const bNode *node = this->get_bnode();
NodeColorBalance *n = (NodeColorBalance *)node->storage;
NodeInput *input_socket = this->get_input_socket(0);
NodeInput *input_image_socket = this->get_input_socket(1);
NodeOutput *output_socket = this->get_output_socket(0);
NodeOperation *operation;
if (node->custom1 == 0) {
ColorBalanceLGGOperation *operationLGG = new ColorBalanceLGGOperation();
float lift_lgg[3], gamma_inv[3];
for (int c = 0; c < 3; c++) {
lift_lgg[c] = 2.0f - n->lift[c];
gamma_inv[c] = (n->gamma[c] != 0.0f) ? 1.0f / n->gamma[c] : 1000000.0f;
}
operationLGG->set_gain(n->gain);
operationLGG->set_lift(lift_lgg);
operationLGG->set_gamma_inv(gamma_inv);
operation = operationLGG;
}
else {
ColorBalanceASCCDLOperation *operationCDL = new ColorBalanceASCCDLOperation();
float offset[3];
copy_v3_fl(offset, n->offset_basis);
add_v3_v3(offset, n->offset);
operationCDL->set_offset(offset);
operationCDL->set_power(n->power);
operationCDL->set_slope(n->slope);
operation = operationCDL;
}
converter.add_operation(operation);
converter.map_input_socket(input_socket, operation->get_input_socket(0));
converter.map_input_socket(input_image_socket, operation->get_input_socket(1));
converter.map_output_socket(output_socket, operation->get_output_socket(0));
}
} // namespace blender::compositor