diff options
Diffstat (limited to 'source/blender/editors/sculpt_paint')
5 files changed, 32 insertions, 13 deletions
diff --git a/source/blender/editors/sculpt_paint/paint_image_proj.c b/source/blender/editors/sculpt_paint/paint_image_proj.c index 6da33ad8b72..e39abd591cf 100644 --- a/source/blender/editors/sculpt_paint/paint_image_proj.c +++ b/source/blender/editors/sculpt_paint/paint_image_proj.c @@ -61,6 +61,7 @@ #include "BKE_colorband.h" #include "BKE_context.h" #include "BKE_colortools.h" +#include "BKE_customdata.h" #include "BKE_idprop.h" #include "BKE_image.h" #include "BKE_library.h" @@ -3780,17 +3781,26 @@ static bool proj_paint_state_mesh_eval_init(const bContext *C, ProjPaintState *p return false; } + CustomData_MeshMasks cddata_masks = scene_eval->customdata_mask; + cddata_masks.fmask |= CD_MASK_MTFACE; + cddata_masks.lmask |= CD_MASK_MLOOPUV; + /* Workaround for subsurf selection, try the display mesh first */ if (ps->source == PROJ_SRC_IMAGE_CAM) { /* using render mesh, assume only camera was rendered from */ ps->me_eval = mesh_create_eval_final_render( - depsgraph, scene_eval, ob_eval, scene_eval->customdata_mask | CD_MASK_MLOOPUV | CD_MASK_MTFACE); + depsgraph, scene_eval, ob_eval, &cddata_masks); ps->me_eval_free = true; } else { + if (ps->do_face_sel) { + cddata_masks.vmask |= CD_MASK_ORIGINDEX; + cddata_masks.emask |= CD_MASK_ORIGINDEX; + cddata_masks.pmask |= CD_MASK_ORIGINDEX; + } ps->me_eval = mesh_get_eval_final( depsgraph, scene_eval, ob_eval, - scene_eval->customdata_mask | CD_MASK_MLOOPUV | CD_MASK_MTFACE | (ps->do_face_sel ? CD_MASK_ORIGINDEX : 0)); + &cddata_masks); ps->me_eval_free = false; } diff --git a/source/blender/editors/sculpt_paint/paint_vertex_proj.c b/source/blender/editors/sculpt_paint/paint_vertex_proj.c index ca26d2050e4..9246c852b3a 100644 --- a/source/blender/editors/sculpt_paint/paint_vertex_proj.c +++ b/source/blender/editors/sculpt_paint/paint_vertex_proj.c @@ -33,6 +33,7 @@ #include "DNA_object_types.h" #include "BKE_context.h" +#include "BKE_customdata.h" #include "BKE_mesh_iterators.h" #include "BKE_mesh_runtime.h" @@ -103,7 +104,9 @@ static void vpaint_proj_dm_map_cosnos_init( Scene *scene_eval = DEG_get_evaluated_scene(depsgraph); Object *ob_eval = DEG_get_evaluated_object(depsgraph, ob); Mesh *me = ob->data; - Mesh *me_eval = mesh_get_eval_final(depsgraph, scene_eval, ob_eval, CD_MASK_BAREMESH | CD_MASK_ORIGINDEX); + + CustomData_MeshMasks cddata_masks = CD_MASK_BAREMESH_ORIGINDEX; + Mesh *me_eval = mesh_get_eval_final(depsgraph, scene_eval, ob_eval, &cddata_masks); memset(vp_handle->vcosnos, 0, sizeof(*vp_handle->vcosnos) * me->totvert); BKE_mesh_foreach_mapped_vert(me_eval, vpaint_proj_dm_map_cosnos_init__map_cb, vp_handle, MESH_FOREACH_USE_NORMAL); @@ -168,7 +171,9 @@ static void vpaint_proj_dm_map_cosnos_update( Scene *scene_eval = DEG_get_evaluated_scene(depsgraph); Object *ob_eval = DEG_get_evaluated_object(depsgraph, ob); Mesh *me = ob->data; - Mesh *me_eval = mesh_get_eval_final(depsgraph, scene_eval, ob_eval, CD_MASK_BAREMESH | CD_MASK_ORIGINDEX); + + CustomData_MeshMasks cddata_masks = CD_MASK_BAREMESH_ORIGINDEX; + Mesh *me_eval = mesh_get_eval_final(depsgraph, scene_eval, ob_eval, &cddata_masks); /* quick sanity check - we shouldn't have to run this if there are no modifiers */ BLI_assert(BLI_listbase_is_empty(&ob->modifiers) == false); diff --git a/source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c b/source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c index 5db01610886..aa3f424f816 100644 --- a/source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c +++ b/source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c @@ -788,7 +788,11 @@ static int paint_weight_gradient_exec(bContext *C, wmOperator *op) Scene *scene_eval = DEG_get_evaluated_scene(depsgraph); Object *ob_eval = DEG_get_evaluated_object(depsgraph, ob); - Mesh *me_eval = mesh_get_eval_final(depsgraph, scene_eval, ob_eval, scene->customdata_mask | CD_MASK_ORIGINDEX); + CustomData_MeshMasks cddata_masks = scene->customdata_mask; + cddata_masks.vmask |= CD_MASK_ORIGINDEX; + cddata_masks.emask |= CD_MASK_ORIGINDEX; + cddata_masks.pmask |= CD_MASK_ORIGINDEX; + Mesh *me_eval = mesh_get_eval_final(depsgraph, scene_eval, ob_eval, &cddata_masks); if (data.is_init) { data.vert_visit = BLI_BITMAP_NEW(me->totvert, __func__); diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c index 800d9e6d562..7bce2464ef7 100644 --- a/source/blender/editors/sculpt_paint/sculpt.c +++ b/source/blender/editors/sculpt_paint/sculpt.c @@ -5532,13 +5532,13 @@ void sculpt_dynamic_topology_disable_ex( me->totpoly = unode->bm_enter_totpoly; me->totedge = unode->bm_enter_totedge; me->totface = 0; - CustomData_copy(&unode->bm_enter_vdata, &me->vdata, CD_MASK_MESH, + CustomData_copy(&unode->bm_enter_vdata, &me->vdata, CD_MASK_MESH.vmask, CD_DUPLICATE, unode->bm_enter_totvert); - CustomData_copy(&unode->bm_enter_edata, &me->edata, CD_MASK_MESH, + CustomData_copy(&unode->bm_enter_edata, &me->edata, CD_MASK_MESH.emask, CD_DUPLICATE, unode->bm_enter_totedge); - CustomData_copy(&unode->bm_enter_ldata, &me->ldata, CD_MASK_MESH, + CustomData_copy(&unode->bm_enter_ldata, &me->ldata, CD_MASK_MESH.lmask, CD_DUPLICATE, unode->bm_enter_totloop); - CustomData_copy(&unode->bm_enter_pdata, &me->pdata, CD_MASK_MESH, + CustomData_copy(&unode->bm_enter_pdata, &me->pdata, CD_MASK_MESH.pmask, CD_DUPLICATE, unode->bm_enter_totpoly); BKE_mesh_update_customdata_pointers(me, false); diff --git a/source/blender/editors/sculpt_paint/sculpt_undo.c b/source/blender/editors/sculpt_paint/sculpt_undo.c index 53329c4cf78..8c934b6a16a 100644 --- a/source/blender/editors/sculpt_paint/sculpt_undo.c +++ b/source/blender/editors/sculpt_paint/sculpt_undo.c @@ -845,13 +845,13 @@ static SculptUndoNode *sculpt_undo_bmesh_push(Object *ob, * dynamic-topology immediately does topological edits * (converting polys to triangles) that the BMLog can't * fully restore from */ - CustomData_copy(&me->vdata, &unode->bm_enter_vdata, CD_MASK_MESH, + CustomData_copy(&me->vdata, &unode->bm_enter_vdata, CD_MASK_MESH.vmask, CD_DUPLICATE, me->totvert); - CustomData_copy(&me->edata, &unode->bm_enter_edata, CD_MASK_MESH, + CustomData_copy(&me->edata, &unode->bm_enter_edata, CD_MASK_MESH.emask, CD_DUPLICATE, me->totedge); - CustomData_copy(&me->ldata, &unode->bm_enter_ldata, CD_MASK_MESH, + CustomData_copy(&me->ldata, &unode->bm_enter_ldata, CD_MASK_MESH.lmask, CD_DUPLICATE, me->totloop); - CustomData_copy(&me->pdata, &unode->bm_enter_pdata, CD_MASK_MESH, + CustomData_copy(&me->pdata, &unode->bm_enter_pdata, CD_MASK_MESH.pmask, CD_DUPLICATE, me->totpoly); unode->bm_enter_totvert = me->totvert; unode->bm_enter_totedge = me->totedge; |