From bfcd25b313998d5d62e927f80a837555c5113de7 Mon Sep 17 00:00:00 2001 From: Alexander Gavrilov Date: Sat, 1 Dec 2018 12:12:18 +0300 Subject: Texture Paint: avoid rebuilding evaluated mesh on first stroke. Ensure all relevant CustomDataMask bits are set during normal evaluation. --- source/blender/blenkernel/intern/DerivedMesh.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'source') diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c index 992771d368d..a34d9642a90 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.c +++ b/source/blender/blenkernel/intern/DerivedMesh.c @@ -2007,6 +2007,11 @@ static void mesh_build_data( BKE_object_free_derived_caches(ob); BKE_object_sculpt_modifiers_changed(ob); + if (need_mapping) { + /* Also add the flag so that it is recorded in lastDataMask. */ + dataMask |= CD_MASK_ORIGINDEX; + } + mesh_calc_modifiers( depsgraph, scene, ob, NULL, 1, need_mapping, dataMask, -1, true, build_shapekey_layers, &ob->runtime.mesh_deform_eval, &ob->runtime.mesh_eval); @@ -2078,7 +2083,7 @@ static CustomDataMask object_get_datamask(const Depsgraph *depsgraph, Object *ob } if (DEG_get_original_object(ob) == actob) { - bool editing = BKE_paint_select_face_test(ob); + bool editing = BKE_paint_select_face_test(actob); /* weight paint and face select need original indices because of selection buffer drawing */ if (r_need_mapping) { @@ -2087,7 +2092,7 @@ static CustomDataMask object_get_datamask(const Depsgraph *depsgraph, Object *ob /* check if we need tfaces & mcols due to face select or texture paint */ if ((ob->mode & OB_MODE_TEXTURE_PAINT) || editing) { - mask |= CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL; + mask |= CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL | CD_MASK_MTFACE; } /* check if we need mcols due to vertex paint or weightpaint */ @@ -2156,7 +2161,7 @@ Mesh *mesh_get_eval_final( if (!ob->runtime.mesh_eval || ((dataMask & ob->lastDataMask) != dataMask) || - (need_mapping != ob->lastNeedMapping)) + (need_mapping && !ob->lastNeedMapping)) { mesh_build_data(depsgraph, scene, ob, dataMask, false, need_mapping); } -- cgit v1.2.3