diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-11-20 13:29:38 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-11-20 16:53:41 +0300 |
commit | 88d634ca0517c26cefaf9f4212e32c59e3d995f1 (patch) | |
tree | 18c3491859e5d00ef11b562fe9fce70060f79dfc /source/blender/blenkernel/intern/object.c | |
parent | 129b8833c6619ad0b4389d28eed6c8dc015ad23c (diff) |
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.
Diffstat (limited to 'source/blender/blenkernel/intern/object.c')
-rw-r--r-- | source/blender/blenkernel/intern/object.c | 62 |
1 files changed, 11 insertions, 51 deletions
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__); } } |