Changeset View
Changeset View
Standalone View
Standalone View
source/blender/nodes/geometry/nodes/node_geo_set_material_index.cc
| Show All 18 Lines | |||||
| { | { | ||||
| const int domain_size = component.attribute_domain_size(domain); | const int domain_size = component.attribute_domain_size(domain); | ||||
| if (domain_size == 0) { | if (domain_size == 0) { | ||||
| return; | return; | ||||
| } | } | ||||
| MutableAttributeAccessor attributes = *component.attributes_for_write(); | MutableAttributeAccessor attributes = *component.attributes_for_write(); | ||||
| bke::GeometryFieldContext field_context{component, domain}; | bke::GeometryFieldContext field_context{component, domain}; | ||||
| const bke::AttributeValidator validator = attributes.lookup_validator("material_index"); | |||||
| AttributeWriter<int> indices = attributes.lookup_or_add_for_write<int>("material_index", domain); | AttributeWriter<int> indices = attributes.lookup_or_add_for_write<int>("material_index", domain); | ||||
| fn::FieldEvaluator evaluator{field_context, domain_size}; | fn::FieldEvaluator evaluator{field_context, domain_size}; | ||||
| evaluator.set_selection(selection_field); | evaluator.set_selection(selection_field); | ||||
| evaluator.add_with_destination(index_field, indices.varray); | evaluator.add_with_destination(validator.validate_field_if_necessary(index_field), | ||||
| indices.varray); | |||||
| evaluator.evaluate(); | evaluator.evaluate(); | ||||
| indices.finish(); | indices.finish(); | ||||
| } | } | ||||
| static void node_geo_exec(GeoNodeExecParams params) | static void node_geo_exec(GeoNodeExecParams params) | ||||
| { | { | ||||
| GeometrySet geometry_set = params.extract_input<GeometrySet>("Geometry"); | GeometrySet geometry_set = params.extract_input<GeometrySet>("Geometry"); | ||||
| Field<bool> selection_field = params.extract_input<Field<bool>>("Selection"); | Field<bool> selection_field = params.extract_input<Field<bool>>("Selection"); | ||||
| Show All 27 Lines | |||||