diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2016-09-05 18:08:09 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2016-09-05 18:08:09 +0300 |
commit | 922aefba25c35be8e3696d0ebc3637d769755cae (patch) | |
tree | c8ef56a3473fea395af85889da75745e80b0d467 /source/blender/blenkernel/intern/DerivedMesh.c | |
parent | a31eca3fdd0d2e18b73f180b87a4c77ac5a8da78 (diff) |
OpenSubdiv: Fix missing ORCO when enabling OSD but having dependency to the geometry
Was causing huge viewport lags.
Reported by angavrilov in IRC, thanks!
Safe and nice for 2.78.
Diffstat (limited to 'source/blender/blenkernel/intern/DerivedMesh.c')
-rw-r--r-- | source/blender/blenkernel/intern/DerivedMesh.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c index ad3c4f81438..5f759c61bcb 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.c +++ b/source/blender/blenkernel/intern/DerivedMesh.c @@ -80,6 +80,7 @@ static DerivedMesh *navmesh_dm_createNavMeshForVisualization(DerivedMesh *dm); #include "GPU_shader.h" #ifdef WITH_OPENSUBDIV +# include "BKE_depsgraph.h" # include "DNA_userdef_types.h" #endif @@ -2566,7 +2567,7 @@ static void editbmesh_calc_modifiers( * playback performance is kept as high as possible. */ static bool calc_modifiers_skip_orco(Scene *scene, - const Object *ob, + Object *ob, bool use_render_params) { ModifierData *last_md = ob->modifiers.last; @@ -2575,9 +2576,18 @@ static bool calc_modifiers_skip_orco(Scene *scene, last_md->type == eModifierType_Subsurf && modifier_isEnabled(scene, last_md, required_mode)) { + if (U.opensubdiv_compute_type == USER_OPENSUBDIV_COMPUTE_NONE) { + return false; + } + else if ((ob->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)) != 0) { + return false; + } + else if ((DAG_get_eval_flags_for_object(scene, ob) & DAG_EVAL_NEED_CPU) != 0) { + return false; + } SubsurfModifierData *smd = (SubsurfModifierData *)last_md; /* TODO(sergey): Deduplicate this with checks from subsurf_ccg.c. */ - return smd->use_opensubdiv && U.opensubdiv_compute_type != USER_OPENSUBDIV_COMPUTE_NONE; + return smd->use_opensubdiv != 0; } return false; } |