Refactor: Sculpt: Specialize face set access in mask init

Part of #118145.
This commit is contained in:
Hans Goudey
2024-09-18 08:37:44 -04:00
parent 45b5ea7d1e
commit 7f26485f68

View File

@@ -144,14 +144,21 @@ static int sculpt_mask_init_exec(bContext *C, wmOperator *op)
}
});
break;
case InitMode::FaceSet:
case InitMode::FaceSet: {
const Mesh &mesh = *static_cast<const Mesh *>(ob.data);
const GroupedSpan<int> vert_to_face_map = mesh.vert_to_face_map();
const bke::AttributeAccessor attributes = mesh.attributes();
const VArraySpan face_sets = *attributes.lookup_or_default<int>(
".sculpt_face_set", bke::AttrDomain::Face, 1);
write_mask_mesh(depsgraph, ob, node_mask, [&](MutableSpan<float> mask, Span<int> verts) {
for (const int vert : verts) {
const int face_set = face_set::vert_face_set_get(ob, PBVHVertRef{vert});
const int face_set = face_set::vert_face_set_get(vert_to_face_map, face_sets, vert);
mask[vert] = BLI_hash_int_01(face_set + seed);
}
});
break;
}
case InitMode::Island:
islands::ensure_cache(ob);
write_mask_mesh(depsgraph, ob, node_mask, [&](MutableSpan<float> mask, Span<int> verts) {