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>2016-09-05 18:08:09 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2016-09-05 18:08:09 +0300
commit922aefba25c35be8e3696d0ebc3637d769755cae (patch)
treec8ef56a3473fea395af85889da75745e80b0d467
parenta31eca3fdd0d2e18b73f180b87a4c77ac5a8da78 (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.
-rw-r--r--source/blender/blenkernel/intern/DerivedMesh.c14
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;
}