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:
authorAlexander Gavrilov <angavrilov@gmail.com>2018-12-01 14:46:55 +0300
committerAlexander Gavrilov <angavrilov@gmail.com>2018-12-01 14:46:55 +0300
commitee8a2edb967627370ba70c31d7e900dcd4746482 (patch)
treec2fd47371ec8c3f7367f90c1faad256aec0914e4 /source/blender/blenkernel
parent47ef301c76f8a5471c962a4453112a0a49a8f975 (diff)
Fix usage of mesh_get_eval_final in vertex selection.
It's a very bad idea to call this on non-COW instances - see T58150. Also, when rebuilding mesh it's better to accumulate mask flags to avoid possible repeated rebuilds from different users.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/intern/DerivedMesh.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index a34d9642a90..55898381fde 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -2153,6 +2153,9 @@ DerivedMesh *mesh_get_derived_final(
Mesh *mesh_get_eval_final(
struct Depsgraph *depsgraph, Scene *scene, Object *ob, CustomDataMask dataMask)
{
+ /* Evaluation meshes on original instances aren't cleaned up properly, causing crashes. */
+ BLI_assert(ob->id.tag & LIB_TAG_COPIED_ON_WRITE);
+
/* if there's no evaluated mesh or the last data mask used doesn't include
* the data we need, rebuild the derived mesh
*/
@@ -2163,7 +2166,7 @@ Mesh *mesh_get_eval_final(
((dataMask & ob->lastDataMask) != dataMask) ||
(need_mapping && !ob->lastNeedMapping))
{
- mesh_build_data(depsgraph, scene, ob, dataMask, false, need_mapping);
+ mesh_build_data(depsgraph, scene, ob, dataMask | ob->lastDataMask, false, need_mapping || ob->lastNeedMapping);
}
if (ob->runtime.mesh_eval) { BLI_assert(!(ob->runtime.mesh_eval->runtime.cd_dirty_vert & CD_MASK_NORMAL)); }