Blender V4.5
input_single_value_operation.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#include "BLI_assert.h"
7
8#include "DNA_node_types.h"
9
11#include "COM_operation.hh"
12#include "COM_result.hh"
13#include "COM_utilities.hh"
14
15namespace blender::compositor {
16
17const StringRef InputSingleValueOperation::output_identifier_ = StringRef("Output");
18
20 : Operation(context), input_socket_(input_socket)
21{
22 const ResultType result_type = get_node_socket_result_type(input_socket_.bsocket());
23 this->populate_result(context.create_result(result_type));
24}
25
27{
28 Result &result = this->get_result();
29 result.allocate_single_value();
30
31 switch (input_socket_->type) {
32 case SOCK_FLOAT: {
33 const float value = input_socket_->default_value_typed<bNodeSocketValueFloat>()->value;
34 result.set_single_value(value);
35 break;
36 }
37 case SOCK_INT: {
38 const int value = input_socket_->default_value_typed<bNodeSocketValueInt>()->value;
39 result.set_single_value(value);
40 break;
41 }
42 case SOCK_BOOLEAN: {
43 const bool value = input_socket_->default_value_typed<bNodeSocketValueBoolean>()->value;
44 result.set_single_value(value);
45 break;
46 }
47 case SOCK_VECTOR: {
48 const float3 value = input_socket_->default_value_typed<bNodeSocketValueVector>()->value;
49 result.set_single_value(value);
50 break;
51 }
52 case SOCK_RGBA: {
53 const float4 value = input_socket_->default_value_typed<bNodeSocketValueRGBA>()->value;
54 result.set_single_value(value);
55 break;
56 }
57 default:
59 break;
60 }
61}
62
64{
65 return Operation::get_result(output_identifier_);
66}
67
68void InputSingleValueOperation::populate_result(Result result)
69{
70 Operation::populate_result(output_identifier_, result);
71}
72
73} // namespace blender::compositor
#define BLI_assert_unreachable()
Definition BLI_assert.h:93
@ SOCK_INT
@ SOCK_VECTOR
@ SOCK_BOOLEAN
@ SOCK_FLOAT
@ SOCK_RGBA
InputSingleValueOperation(Context &context, DInputSocket input_socket)
Result & get_result(StringRef identifier)
Definition operation.cc:39
void populate_result(StringRef identifier, Result result)
Definition operation.cc:148
Operation(Context &context)
Definition operation.cc:22
ResultType get_node_socket_result_type(const bNodeSocket *socket)
Definition utilities.cc:66
VecBase< float, 4 > float4
VecBase< float, 3 > float3