Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/blenkernel/intern/paint.cc')
-rw-r--r--source/blender/blenkernel/intern/paint.cc43
1 files changed, 23 insertions, 20 deletions
diff --git a/source/blender/blenkernel/intern/paint.cc b/source/blender/blenkernel/intern/paint.cc
index 10dfa3f59e7..73db00e7306 100644
--- a/source/blender/blenkernel/intern/paint.cc
+++ b/source/blender/blenkernel/intern/paint.cc
@@ -1667,16 +1667,16 @@ static void sculpt_update_object(Depsgraph *depsgraph,
/* These are assigned to the base mesh in Multires. This is needed because Face Sets operators
* and tools use the Face Sets data from the base mesh when Multires is active. */
- ss->mvert = BKE_mesh_vertices_for_write(me);
- ss->mpoly = BKE_mesh_polygons(me);
+ ss->mvert = BKE_mesh_verts_for_write(me);
+ ss->mpoly = BKE_mesh_polys(me);
ss->mloop = BKE_mesh_loops(me);
}
else {
ss->totvert = me->totvert;
ss->totpoly = me->totpoly;
ss->totfaces = me->totpoly;
- ss->mvert = BKE_mesh_vertices_for_write(me);
- ss->mpoly = BKE_mesh_polygons(me);
+ ss->mvert = BKE_mesh_verts_for_write(me);
+ ss->mpoly = BKE_mesh_polys(me);
ss->mloop = BKE_mesh_loops(me);
ss->multires.active = false;
ss->multires.modifier = nullptr;
@@ -1729,7 +1729,7 @@ static void sculpt_update_object(Depsgraph *depsgraph,
if (need_pmap && ob->type == OB_MESH && !ss->pmap) {
BKE_mesh_vert_poly_map_create(&ss->pmap,
&ss->pmap_mem,
- BKE_mesh_polygons(me),
+ BKE_mesh_polys(me),
BKE_mesh_loops(me),
me->totvert,
me->totpoly,
@@ -1744,27 +1744,30 @@ static void sculpt_update_object(Depsgraph *depsgraph,
pbvh_show_face_sets_set(ss->pbvh, ss->show_face_sets);
if (ss->deform_modifiers_active) {
- /* Painting doesn't need crazyspace, use already evaluated mesh coordinates. */
+ /* Painting doesn't need crazyspace, use already evaluated mesh coordinates if possible. */
+ bool used_me_eval = false;
+
if (ob->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT)) {
Mesh *me_eval_deform = ob_eval->runtime.mesh_deform_eval;
/* If the fully evaluated mesh has the same topology as the deform-only version, use it.
- * This matters because 'deform eval' is very restrictive and excludes even modifiers that
- * simply recompute vertex weights. */
- if (me_eval_deform->polygons().data() == me_eval->polygons().data() &&
+ * This matters because crazyspace evaluation is very restrictive and excludes even modifiers
+ * that simply recompute vertex weights (which can even include Geometry Nodes). */
+ if (me_eval_deform->polys().data() == me_eval->polys().data() &&
me_eval_deform->loops().data() == me_eval->loops().data() &&
me_eval_deform->totvert == me_eval->totvert) {
- me_eval_deform = me_eval;
- }
+ BKE_sculptsession_free_deformMats(ss);
- BKE_sculptsession_free_deformMats(ss);
+ BLI_assert(me_eval_deform->totvert == me->totvert);
- BLI_assert(me_eval_deform->totvert == me->totvert);
+ ss->deform_cos = BKE_mesh_vert_coords_alloc(me_eval, NULL);
+ BKE_pbvh_vert_coords_apply(ss->pbvh, ss->deform_cos, me->totvert);
- ss->deform_cos = BKE_mesh_vert_coords_alloc(me_eval_deform, NULL);
- BKE_pbvh_vert_coords_apply(ss->pbvh, ss->deform_cos, me->totvert);
+ used_me_eval = true;
+ }
}
- else if (!ss->orig_cos) {
+
+ if (!ss->orig_cos && !used_me_eval) {
int a;
BKE_sculptsession_free_deformMats(ss);
@@ -1926,7 +1929,7 @@ void BKE_sculpt_color_layer_create_if_needed(Object *object)
return;
}
- CustomData_add_layer(&orig_me->vdata, CD_PROP_COLOR, CD_CONSTRUCT, nullptr, orig_me->totvert);
+ CustomData_add_layer(&orig_me->vdata, CD_PROP_COLOR, CD_SET_DEFAULT, nullptr, orig_me->totvert);
CustomDataLayer *layer = orig_me->vdata.layers +
CustomData_get_layer_index(&orig_me->vdata, CD_PROP_COLOR);
@@ -1953,7 +1956,7 @@ void BKE_sculpt_update_object_for_edit(
int BKE_sculpt_mask_layers_ensure(Object *ob, MultiresModifierData *mmd)
{
Mesh *me = static_cast<Mesh *>(ob->data);
- const Span<MPoly> polys = me->polygons();
+ const Span<MPoly> polys = me->polys();
const Span<MLoop> loops = me->loops();
int ret = 0;
@@ -2245,8 +2248,8 @@ static PBVH *build_pbvh_from_regular_mesh(Object *ob, Mesh *me_eval_deform, bool
PBVH *pbvh = BKE_pbvh_new();
BKE_pbvh_respect_hide_set(pbvh, respect_hide);
- MutableSpan<MVert> verts = me->vertices_for_write();
- const Span<MPoly> polys = me->polygons();
+ MutableSpan<MVert> verts = me->verts_for_write();
+ const Span<MPoly> polys = me->polys();
const Span<MLoop> loops = me->loops();
MLoopTri *looptri = static_cast<MLoopTri *>(