Cleanup: simplify extracting GField from geometry nodes parameters
Pull Request: https://projects.blender.org/blender/blender/pulls/113743
This commit is contained in:
committed by
Jacques Lucke
parent
d0e6f894fe
commit
fb57767f78
@@ -8,6 +8,7 @@
|
||||
#include "BLI_math_quaternion_types.hh"
|
||||
|
||||
#include "FN_field.hh"
|
||||
#include "FN_field_cpp_type.hh"
|
||||
#include "FN_lazy_function.hh"
|
||||
#include "FN_multi_function_builder.hh"
|
||||
|
||||
@@ -104,6 +105,14 @@ class GeoNodeExecParams {
|
||||
identifier);
|
||||
return value_or_field.as_field();
|
||||
}
|
||||
else if constexpr (std::is_same_v<std::decay_t<T>, GField>) {
|
||||
const int index = this->get_input_index(identifier);
|
||||
const bNodeSocket &input_socket = node_.input_by_identifier(identifier);
|
||||
const CPPType &value_type = *input_socket.typeinfo->geometry_nodes_cpp_type;
|
||||
const fn::ValueOrFieldCPPType &value_or_field_type = *fn::ValueOrFieldCPPType::get_from_self(
|
||||
value_type);
|
||||
return value_or_field_type.as_field(params_.try_get_input_data_ptr(index));
|
||||
}
|
||||
else {
|
||||
#ifdef DEBUG
|
||||
this->check_input_access(identifier, &CPPType::get<T>());
|
||||
|
||||
@@ -419,7 +419,7 @@ static void node_geo_exec(GeoNodeExecParams params)
|
||||
using T = decltype(dummy);
|
||||
if constexpr (is_same_any_v<T, int, float, float3>) {
|
||||
const std::string suffix = " " + identifier_suffix<T>();
|
||||
Field<T> input_field = params.extract_input<Field<T>>("Value" + suffix);
|
||||
GField input_field = params.extract_input<GField>("Value" + suffix);
|
||||
if (params.output_is_required("Leading" + suffix)) {
|
||||
params.set_output(
|
||||
"Leading" + suffix,
|
||||
|
||||
@@ -199,22 +199,22 @@ static void node_geo_exec(GeoNodeExecParams params)
|
||||
|
||||
switch (data_type) {
|
||||
case CD_PROP_FLOAT:
|
||||
field = params.get_input<Field<float>>(input_identifier);
|
||||
field = params.extract_input<GField>(input_identifier);
|
||||
break;
|
||||
case CD_PROP_FLOAT3:
|
||||
field = params.get_input<Field<float3>>(input_identifier);
|
||||
field = params.extract_input<GField>(input_identifier);
|
||||
break;
|
||||
case CD_PROP_COLOR:
|
||||
field = params.get_input<Field<ColorGeometry4f>>(input_identifier);
|
||||
field = params.extract_input<GField>(input_identifier);
|
||||
break;
|
||||
case CD_PROP_BOOL:
|
||||
field = params.get_input<Field<bool>>(input_identifier);
|
||||
field = params.extract_input<GField>(input_identifier);
|
||||
break;
|
||||
case CD_PROP_INT32:
|
||||
field = params.get_input<Field<int>>(input_identifier);
|
||||
field = params.extract_input<GField>(input_identifier);
|
||||
break;
|
||||
case CD_PROP_QUATERNION:
|
||||
field = params.get_input<Field<math::Quaternion>>(input_identifier);
|
||||
field = params.extract_input<GField>(input_identifier);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
@@ -471,17 +471,17 @@ static GField get_input_attribute_field(GeoNodeExecParams ¶ms, const eCustom
|
||||
{
|
||||
switch (data_type) {
|
||||
case CD_PROP_FLOAT:
|
||||
return params.extract_input<Field<float>>("Value_Float");
|
||||
return params.extract_input<GField>("Value_Float");
|
||||
case CD_PROP_FLOAT3:
|
||||
return params.extract_input<Field<float3>>("Value_Vector");
|
||||
return params.extract_input<GField>("Value_Vector");
|
||||
case CD_PROP_COLOR:
|
||||
return params.extract_input<Field<ColorGeometry4f>>("Value_Color");
|
||||
return params.extract_input<GField>("Value_Color");
|
||||
case CD_PROP_BOOL:
|
||||
return params.extract_input<Field<bool>>("Value_Bool");
|
||||
return params.extract_input<GField>("Value_Bool");
|
||||
case CD_PROP_INT32:
|
||||
return params.extract_input<Field<int>>("Value_Int");
|
||||
return params.extract_input<GField>("Value_Int");
|
||||
case CD_PROP_QUATERNION:
|
||||
return params.extract_input<Field<math::Quaternion>>("Value_Rotation");
|
||||
return params.extract_input<GField>("Value_Rotation");
|
||||
default:
|
||||
BLI_assert_unreachable();
|
||||
}
|
||||
|
||||
@@ -246,32 +246,32 @@ static GField get_input_attribute_field(GeoNodeExecParams ¶ms, const eCustom
|
||||
switch (data_type) {
|
||||
case CD_PROP_FLOAT:
|
||||
if (params.output_is_required("Attribute_001")) {
|
||||
return params.extract_input<Field<float>>("Attribute_001");
|
||||
return params.extract_input<GField>("Attribute_001");
|
||||
}
|
||||
break;
|
||||
case CD_PROP_FLOAT3:
|
||||
if (params.output_is_required("Attribute")) {
|
||||
return params.extract_input<Field<float3>>("Attribute");
|
||||
return params.extract_input<GField>("Attribute");
|
||||
}
|
||||
break;
|
||||
case CD_PROP_COLOR:
|
||||
if (params.output_is_required("Attribute_002")) {
|
||||
return params.extract_input<Field<ColorGeometry4f>>("Attribute_002");
|
||||
return params.extract_input<GField>("Attribute_002");
|
||||
}
|
||||
break;
|
||||
case CD_PROP_BOOL:
|
||||
if (params.output_is_required("Attribute_003")) {
|
||||
return params.extract_input<Field<bool>>("Attribute_003");
|
||||
return params.extract_input<GField>("Attribute_003");
|
||||
}
|
||||
break;
|
||||
case CD_PROP_INT32:
|
||||
if (params.output_is_required("Attribute_004")) {
|
||||
return params.extract_input<Field<int>>("Attribute_004");
|
||||
return params.extract_input<GField>("Attribute_004");
|
||||
}
|
||||
break;
|
||||
case CD_PROP_QUATERNION:
|
||||
if (params.output_is_required("Attribute_005")) {
|
||||
return params.extract_input<Field<math::Quaternion>>("Attribute_005");
|
||||
return params.extract_input<GField>("Attribute_005");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -268,17 +268,17 @@ static GField get_input_attribute_field(GeoNodeExecParams ¶ms, const eCustom
|
||||
{
|
||||
switch (data_type) {
|
||||
case CD_PROP_FLOAT:
|
||||
return params.extract_input<Field<float>>("Value_Float");
|
||||
return params.extract_input<GField>("Value_Float");
|
||||
case CD_PROP_FLOAT3:
|
||||
return params.extract_input<Field<float3>>("Value_Vector");
|
||||
return params.extract_input<GField>("Value_Vector");
|
||||
case CD_PROP_COLOR:
|
||||
return params.extract_input<Field<ColorGeometry4f>>("Value_Color");
|
||||
return params.extract_input<GField>("Value_Color");
|
||||
case CD_PROP_BOOL:
|
||||
return params.extract_input<Field<bool>>("Value_Bool");
|
||||
return params.extract_input<GField>("Value_Bool");
|
||||
case CD_PROP_INT32:
|
||||
return params.extract_input<Field<int>>("Value_Int");
|
||||
return params.extract_input<GField>("Value_Int");
|
||||
case CD_PROP_QUATERNION:
|
||||
return params.extract_input<Field<math::Quaternion>>("Value_Rotation");
|
||||
return params.extract_input<GField>("Value_Rotation");
|
||||
default:
|
||||
BLI_assert_unreachable();
|
||||
}
|
||||
|
||||
@@ -162,17 +162,17 @@ static GField get_input_attribute_field(GeoNodeExecParams ¶ms, const eCustom
|
||||
{
|
||||
switch (data_type) {
|
||||
case CD_PROP_FLOAT:
|
||||
return params.extract_input<Field<float>>("Value_Float");
|
||||
return params.extract_input<GField>("Value_Float");
|
||||
case CD_PROP_FLOAT3:
|
||||
return params.extract_input<Field<float3>>("Value_Vector");
|
||||
return params.extract_input<GField>("Value_Vector");
|
||||
case CD_PROP_COLOR:
|
||||
return params.extract_input<Field<ColorGeometry4f>>("Value_Color");
|
||||
return params.extract_input<GField>("Value_Color");
|
||||
case CD_PROP_BOOL:
|
||||
return params.extract_input<Field<bool>>("Value_Bool");
|
||||
return params.extract_input<GField>("Value_Bool");
|
||||
case CD_PROP_INT32:
|
||||
return params.extract_input<Field<int>>("Value_Int");
|
||||
return params.extract_input<GField>("Value_Int");
|
||||
case CD_PROP_QUATERNION:
|
||||
return params.extract_input<Field<math::Quaternion>>("Value_Rotation");
|
||||
return params.extract_input<GField>("Value_Rotation");
|
||||
default:
|
||||
BLI_assert_unreachable();
|
||||
}
|
||||
|
||||
@@ -188,17 +188,17 @@ static GField get_input_attribute_field(GeoNodeExecParams ¶ms, const eCustom
|
||||
{
|
||||
switch (data_type) {
|
||||
case CD_PROP_FLOAT:
|
||||
return params.extract_input<Field<float>>("Value_Float");
|
||||
return params.extract_input<GField>("Value_Float");
|
||||
case CD_PROP_FLOAT3:
|
||||
return params.extract_input<Field<float3>>("Value_Vector");
|
||||
return params.extract_input<GField>("Value_Vector");
|
||||
case CD_PROP_COLOR:
|
||||
return params.extract_input<Field<ColorGeometry4f>>("Value_Color");
|
||||
return params.extract_input<GField>("Value_Color");
|
||||
case CD_PROP_BOOL:
|
||||
return params.extract_input<Field<bool>>("Value_Bool");
|
||||
return params.extract_input<GField>("Value_Bool");
|
||||
case CD_PROP_INT32:
|
||||
return params.extract_input<Field<int>>("Value_Int");
|
||||
return params.extract_input<GField>("Value_Int");
|
||||
case CD_PROP_QUATERNION:
|
||||
return params.extract_input<Field<math::Quaternion>>("Value_Rotation");
|
||||
return params.extract_input<GField>("Value_Rotation");
|
||||
default:
|
||||
BLI_assert_unreachable();
|
||||
}
|
||||
|
||||
@@ -126,33 +126,33 @@ static void node_geo_exec(GeoNodeExecParams params)
|
||||
GField field;
|
||||
switch (data_type) {
|
||||
case CD_PROP_FLOAT:
|
||||
field = params.get_input<Field<float>>("Value_Float");
|
||||
field = params.extract_input<GField>("Value_Float");
|
||||
break;
|
||||
case CD_PROP_FLOAT2: {
|
||||
field = params.get_input<Field<float3>>("Value_Vector");
|
||||
field = params.extract_input<GField>("Value_Vector");
|
||||
field = bke::get_implicit_type_conversions().try_convert(field, CPPType::get<float2>());
|
||||
break;
|
||||
}
|
||||
case CD_PROP_FLOAT3:
|
||||
field = params.get_input<Field<float3>>("Value_Vector");
|
||||
field = params.extract_input<GField>("Value_Vector");
|
||||
break;
|
||||
case CD_PROP_COLOR:
|
||||
field = params.get_input<Field<ColorGeometry4f>>("Value_Color");
|
||||
field = params.extract_input<GField>("Value_Color");
|
||||
break;
|
||||
case CD_PROP_BYTE_COLOR: {
|
||||
field = params.get_input<Field<ColorGeometry4f>>("Value_Color");
|
||||
field = params.extract_input<GField>("Value_Color");
|
||||
field = bke::get_implicit_type_conversions().try_convert(field,
|
||||
CPPType::get<ColorGeometry4b>());
|
||||
break;
|
||||
}
|
||||
case CD_PROP_BOOL:
|
||||
field = params.get_input<Field<bool>>("Value_Bool");
|
||||
field = params.extract_input<GField>("Value_Bool");
|
||||
break;
|
||||
case CD_PROP_INT32:
|
||||
field = params.get_input<Field<int>>("Value_Int");
|
||||
field = params.extract_input<GField>("Value_Int");
|
||||
break;
|
||||
case CD_PROP_QUATERNION:
|
||||
field = params.get_input<Field<math::Quaternion>>("Value_Rotation");
|
||||
field = params.extract_input<GField>("Value_Rotation");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user