[Bf-blender-cvs] [88d634ca051] blender2.8: Vertex parent: Remove CCGDM optimization

Sergey Sharybin noreply at git.blender.org
Tue Nov 20 14:57:31 CET 2018


Commit: 88d634ca0517c26cefaf9f4212e32c59e3d995f1
Author: Sergey Sharybin
Date:   Tue Nov 20 11:29:38 2018 +0100
Branches: blender2.8
https://developer.blender.org/rB88d634ca0517c26cefaf9f4212e32c59e3d995f1

Vertex parent: Remove CCGDM optimization

Currently we never return CCGDM from the modifier stack,
so the optimization was doing pretty much nothing.

Removing it completely for now, it needs to be re-done
with the new evaluated Mesh/Subdiv.

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

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

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

diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 6590768917a..1a67822d260 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -2029,69 +2029,29 @@ static void give_parvert(Object *par, int nr, float vec[3])
 	if (par->type == OB_MESH) {
 		Mesh *me = par->data;
 		BMEditMesh *em = me->edit_btmesh;
-		DerivedMesh *dm = NULL;
 		Mesh *me_eval = (em) ? em->mesh_eval_final : par->runtime.mesh_eval;
 
-		/* Keep this until subsurf code ported away from derived mesh - campbell. */
-		dm = par->derivedFinal;
-		if (dm && dm->type != DM_TYPE_CCGDM) {
-			dm = NULL;
-		}
-
 		if (me_eval) {
 			int count = 0;
 			const int numVerts = me_eval->totvert;
 
 			if (nr < numVerts) {
-				bool use_special_ss_case = false;
-
-				if (dm && dm->type == DM_TYPE_CCGDM) {
-					ModifierData *md;
-					VirtualModifierData virtualModifierData;
-					use_special_ss_case = true;
-					for (md = modifiers_getVirtualModifierList(par, &virtualModifierData);
-					     md != NULL;
-					     md = md->next)
-					{
-						const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
-						/* TODO(sergey): Check for disabled modifiers. */
-						if (mti->type != eModifierTypeType_OnlyDeform && md->next != NULL) {
-							use_special_ss_case = false;
-							break;
-						}
-					}
-				}
-
-				if (!use_special_ss_case) {
-					/* avoid dm->getVertDataArray() since it allocates arrays in the dm (not thread safe) */
-					if (em && me_eval->runtime.is_original) {
-						if (em->bm->elem_table_dirty & BM_VERT) {
+				if (em && me_eval->runtime.is_original) {
+					if (em->bm->elem_table_dirty & BM_VERT) {
 #ifdef VPARENT_THREADING_HACK
-							BLI_mutex_lock(&vparent_lock);
-							if (em->bm->elem_table_dirty & BM_VERT) {
-								BM_mesh_elem_table_ensure(em->bm, BM_VERT);
-							}
-							BLI_mutex_unlock(&vparent_lock);
-#else
-							BLI_assert(!"Not safe for threading");
+						BLI_mutex_lock(&vparent_lock);
+						if (em->bm->elem_table_dirty & BM_VERT) {
 							BM_mesh_elem_table_ensure(em->bm, BM_VERT);
-#endif
 						}
+						BLI_mutex_unlock(&vparent_lock);
+#else
+						BLI_assert(!"Not safe for threading");
+						BM_mesh_elem_table_ensure(em->bm, BM_VERT);
+#endif
 					}
 				}
 
-				if (use_special_ss_case) {
-					/* Special case if the last modifier is SS and no constructive modifier are in front of it. */
-					CCGDerivedMesh *ccgdm = (CCGDerivedMesh *)dm;
-					CCGVert *ccg_vert = ccgSubSurf_getVert(ccgdm->ss, POINTER_FROM_INT(nr));
-					/* In case we deleted some verts, nr may refer to inexistent one now, see T42557. */
-					if (ccg_vert) {
-						float *co = ccgSubSurf_getVertData(ccgdm->ss, ccg_vert);
-						add_v3_v3(vec, co);
-						count++;
-					}
-				}
-				else if (CustomData_has_layer(&me_eval->vdata, CD_ORIGINDEX) &&
+				if (CustomData_has_layer(&me_eval->vdata, CD_ORIGINDEX) &&
 				         !(em && me_eval->runtime.is_original))
 				{
 					const int *index = CustomData_get_layer(&me_eval->vdata, CD_ORIGINDEX);
@@ -2126,7 +2086,7 @@ static void give_parvert(Object *par, int nr, float vec[3])
 		}
 		else {
 			fprintf(stderr,
-			        "%s: DerivedMesh is needed to solve parenting, "
+			        "%s: Evaluated mesh is needed to solve parenting, "
 			        "object position can be wrong now\n", __func__);
 		}
 	}



More information about the Bf-blender-cvs mailing list