Blender V5.0
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 <string>
6
7#include "BLI_assert.h"
9
10#include "DNA_node_types.h"
11
13#include "COM_operation.hh"
14#include "COM_result.hh"
15#include "COM_utilities.hh"
16
17namespace blender::compositor {
18
19const StringRef InputSingleValueOperation::output_identifier_ = StringRef("Output");
20
22 : Operation(context), input_socket_(input_socket)
23{
24 const ResultType result_type = get_node_socket_result_type(input_socket_.bsocket());
25 this->populate_result(context.create_result(result_type));
26}
27
29{
30 Result &result = this->get_result();
31 result.allocate_single_value();
32
33 switch (input_socket_->type) {
34 case SOCK_FLOAT: {
35 const float value = input_socket_->default_value_typed<bNodeSocketValueFloat>()->value;
36 result.set_single_value(value);
37 break;
38 }
39 case SOCK_INT: {
40 const int value = input_socket_->default_value_typed<bNodeSocketValueInt>()->value;
41 result.set_single_value(value);
42 break;
43 }
44 case SOCK_BOOLEAN: {
45 const bool value = input_socket_->default_value_typed<bNodeSocketValueBoolean>()->value;
46 result.set_single_value(value);
47 break;
48 }
49 case SOCK_VECTOR: {
50 switch (input_socket_->default_value_typed<bNodeSocketValueVector>()->dimensions) {
51 case 2: {
52 const float2 value = input_socket_->default_value_typed<bNodeSocketValueVector>()->value;
53 result.set_single_value(value);
54 break;
55 }
56 case 3: {
57 const float3 value = input_socket_->default_value_typed<bNodeSocketValueVector>()->value;
58 result.set_single_value(value);
59 break;
60 }
61 case 4: {
62 const float4 value = input_socket_->default_value_typed<bNodeSocketValueVector>()->value;
63 result.set_single_value(value);
64 break;
65 }
66 default:
68 break;
69 }
70 break;
71 }
72 case SOCK_RGBA: {
73 const float4 value = input_socket_->default_value_typed<bNodeSocketValueRGBA>()->value;
74 result.set_single_value(value);
75 break;
76 }
77 case SOCK_MENU: {
78 const int32_t value = input_socket_->default_value_typed<bNodeSocketValueMenu>()->value;
79 result.set_single_value(nodes::MenuValue(value));
80 break;
81 }
82 case SOCK_STRING: {
83 const std::string value =
84 input_socket_->default_value_typed<bNodeSocketValueString>()->value;
85 result.set_single_value(value);
86 break;
87 }
88 default:
90 break;
91 }
92}
93
95{
96 return Operation::get_result(output_identifier_);
97}
98
99void InputSingleValueOperation::populate_result(Result result)
100{
101 Operation::populate_result(output_identifier_, result);
102}
103
104} // namespace blender::compositor
#define BLI_assert_unreachable()
Definition BLI_assert.h:93
@ SOCK_INT
@ SOCK_VECTOR
@ SOCK_BOOLEAN
@ SOCK_FLOAT
@ SOCK_STRING
@ SOCK_RGBA
@ SOCK_MENU
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:102
VecBase< float, 4 > float4
VecBase< float, 2 > float2
VecBase< float, 3 > float3