Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2018-11-20 13:29:38 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2018-11-20 16:53:41 +0300
commit88d634ca0517c26cefaf9f4212e32c59e3d995f1 (patch)
tree18c3491859e5d00ef11b562fe9fce70060f79dfc /source/blender/blenkernel/intern/object.c
parent129b8833c6619ad0b4389d28eed6c8dc015ad23c (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.c62
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__);
}
}