Cleanup: Use socket type in single input value operation
This patch uses the socket type as opposed to the result type in the switch case that initialize the values of the single input value results, since that makes more sense as we are retrieving the values from the sockets. This also matches the implementation in pixel operations.
This commit is contained in:
@@ -5,6 +5,8 @@
|
||||
#include "BLI_assert.h"
|
||||
#include "BLI_math_vector_types.hh"
|
||||
|
||||
#include "DNA_node_types.h"
|
||||
|
||||
#include "COM_input_single_value_operation.hh"
|
||||
#include "COM_operation.hh"
|
||||
#include "COM_result.hh"
|
||||
@@ -18,44 +20,36 @@ InputSingleValueOperation::InputSingleValueOperation(Context &context, DInputSoc
|
||||
: Operation(context), input_socket_(input_socket)
|
||||
{
|
||||
const ResultType result_type = get_node_socket_result_type(input_socket_.bsocket());
|
||||
Result result = context.create_result(result_type);
|
||||
|
||||
/* The result of an input single value operation is guaranteed to have a single user. */
|
||||
result.set_reference_count(1);
|
||||
|
||||
populate_result(result);
|
||||
this->populate_result(context.create_result(result_type));
|
||||
}
|
||||
|
||||
void InputSingleValueOperation::execute()
|
||||
{
|
||||
/* Allocate a single value for the result. */
|
||||
Result &result = get_result();
|
||||
Result &result = this->get_result();
|
||||
result.allocate_single_value();
|
||||
|
||||
const bNodeSocket *bsocket = input_socket_.bsocket();
|
||||
|
||||
/* Set the value of the result to the default value of the input socket. */
|
||||
switch (result.type()) {
|
||||
case ResultType::Float:
|
||||
result.set_single_value(bsocket->default_value_typed<bNodeSocketValueFloat>()->value);
|
||||
switch (input_socket_->type) {
|
||||
case SOCK_FLOAT: {
|
||||
const float value = input_socket_->default_value_typed<bNodeSocketValueFloat>()->value;
|
||||
result.set_single_value(value);
|
||||
break;
|
||||
case ResultType::Int:
|
||||
result.set_single_value(bsocket->default_value_typed<bNodeSocketValueInt>()->value);
|
||||
}
|
||||
case SOCK_INT: {
|
||||
const int value = input_socket_->default_value_typed<bNodeSocketValueInt>()->value;
|
||||
result.set_single_value(value);
|
||||
break;
|
||||
case ResultType::Float3:
|
||||
result.set_single_value(
|
||||
float3(bsocket->default_value_typed<bNodeSocketValueVector>()->value));
|
||||
}
|
||||
case SOCK_VECTOR: {
|
||||
const float3 value = input_socket_->default_value_typed<bNodeSocketValueVector>()->value;
|
||||
result.set_single_value(value);
|
||||
break;
|
||||
case ResultType::Color:
|
||||
result.set_single_value(float4(bsocket->default_value_typed<bNodeSocketValueRGBA>()->value));
|
||||
}
|
||||
case SOCK_RGBA: {
|
||||
const float4 value = input_socket_->default_value_typed<bNodeSocketValueRGBA>()->value;
|
||||
result.set_single_value(value);
|
||||
break;
|
||||
case ResultType::Float4:
|
||||
result.set_single_value(
|
||||
float4(float3(bsocket->default_value_typed<bNodeSocketValueVector>()->value), 0.0f));
|
||||
break;
|
||||
case ResultType::Float2:
|
||||
case ResultType::Int2:
|
||||
/* Those types are internal and needn't be handled by operations. */
|
||||
}
|
||||
default:
|
||||
BLI_assert_unreachable();
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user