[Bf-blender-cvs] [bfcd25b3139] blender2.8: Texture Paint: avoid rebuilding evaluated mesh on first stroke.

Alexander Gavrilov noreply at git.blender.org
Sat Dec 1 10:46:05 CET 2018


Commit: bfcd25b313998d5d62e927f80a837555c5113de7
Author: Alexander Gavrilov
Date:   Sat Dec 1 12:12:18 2018 +0300
Branches: blender2.8
https://developer.blender.org/rBbfcd25b313998d5d62e927f80a837555c5113de7

Texture Paint: avoid rebuilding evaluated mesh on first stroke.

Ensure all relevant CustomDataMask bits are set during normal evaluation.

===================================================================

M	source/blender/blenkernel/intern/DerivedMesh.c

===================================================================

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);
 	}



More information about the Bf-blender-cvs mailing list