[Bf-blender-cvs] [e6560c1] opensubdiv-modifier: OpenSubdiv: Fix crash when switching object and edit modes

Sergey Sharybin noreply at git.blender.org
Wed Aug 6 11:17:27 CEST 2014


Commit: e6560c19a1864dff920e9cf7acc3093220fe4be0
Author: Sergey Sharybin
Date:   Wed Aug 6 15:09:41 2014 +0600
Branches: opensubdiv-modifier
https://developer.blender.org/rBe6560c19a1864dff920e9cf7acc3093220fe4be0

OpenSubdiv: Fix crash when switching object and edit modes

Crash was caused by by the OpenGL access from the treads.

===================================================================

M	source/blender/blenkernel/intern/scene.c

===================================================================

diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index ecaaf48..806f8b4 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -1521,17 +1521,24 @@ static void scene_update_objects(EvaluationContext *eval_ctx, Main *bmain, Scene
 				for (md = object->modifiers.first; md; md = md->next) {
 					if (md->type == eModifierType_Subsurf) {
 						SubsurfModifierData *smd = (SubsurfModifierData *) md;
-						if (smd->mCache != NULL) {
-							bool old_simple =
-								ccgSubSurf_getSimpleSubdiv(smd->mCache);
-							bool use_simple =
-								smd->subdivType == ME_SIMPLE_SUBSURF;
+						bool use_simple = smd->subdivType == ME_SIMPLE_SUBSURF;
 
-							if (old_simple != use_simple) {
+						if (smd->mCache != NULL) {
+							if (object->mode == OB_MODE_EDIT ||
+							    ccgSubSurf_getSimpleSubdiv(smd->mCache) != use_simple)
+							{
 								ccgSubSurf_free(smd->mCache);
 								smd->mCache = NULL;
 							}
 						}
+						if (smd->emCache != NULL) {
+							if (object->mode != OB_MODE_EDIT ||
+							    ccgSubSurf_getSimpleSubdiv(smd->emCache) != use_simple)
+							{
+								ccgSubSurf_free(smd->emCache);
+								smd->emCache = NULL;
+							}
+						}
 					}
 				}
 			}




More information about the Bf-blender-cvs mailing list