Cleanup: simplify extracting GField from geometry nodes parameters

Pull Request: https://projects.blender.org/blender/blender/pulls/113743
This commit is contained in:
Iliya Katueshenock
2023-10-16 19:19:53 +02:00
committed by Jacques Lucke
parent d0e6f894fe
commit fb57767f78
9 changed files with 54 additions and 45 deletions

View File

@@ -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>());

View File

@@ -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,

View File

@@ -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;

View File

@@ -471,17 +471,17 @@ static GField get_input_attribute_field(GeoNodeExecParams &params, 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();
}

View File

@@ -246,32 +246,32 @@ static GField get_input_attribute_field(GeoNodeExecParams &params, 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:

View File

@@ -268,17 +268,17 @@ static GField get_input_attribute_field(GeoNodeExecParams &params, 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();
}

View File

@@ -162,17 +162,17 @@ static GField get_input_attribute_field(GeoNodeExecParams &params, 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();
}

View File

@@ -188,17 +188,17 @@ static GField get_input_attribute_field(GeoNodeExecParams &params, 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();
}

View File

@@ -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;