[Bf-blender-cvs] [640f011] opensubdiv-modifier: OpenSubdiv: Fix crash entering sculpt mode

Sergey Sharybin noreply at git.blender.org
Wed Jul 30 19:13:35 CEST 2014


Commit: 640f01167cafdb5e9da3b97288567082b898bb99
Author: Sergey Sharybin
Date:   Wed Jul 30 23:13:19 2014 +0600
Branches: opensubdiv-modifier
https://developer.blender.org/rB640f01167cafdb5e9da3b97288567082b898bb99

OpenSubdiv: Fix crash entering sculpt mode

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

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

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

diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c
index 4811362..0e8cb69 100644
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@ -1794,12 +1794,26 @@ static void ccgDM_drawFacesSolid(DerivedMesh *dm,
 	int i, totface = ccgSubSurf_getNumFaces(ss);
 	int drawcurrent = 0, matnr = -1, shademodel = -1;
 
+	CCG_key_top_level(&key, ss);
+	ccgdm_pbvh_update(ccgdm);
+
+	if (ccgdm->pbvh && ccgdm->multires.mmd && !fast) {
+		if (dm->numTessFaceData) {
+			BKE_pbvh_draw(ccgdm->pbvh, partial_redraw_planes, NULL,
+			              setMaterial, false);
+			glShadeModel(GL_FLAT);
+		}
+
+		return;
+	}
+
+
 #ifdef WITH_OPENSUBDIV
 	if (ccgdm->useGpuBackend) {
 		int i, matnr = -1, shademodel = -1;
 		CCGFaceIterator *fi;
 		int start_partition = 0, num_partitions = 0;
-		if (UNLIKELY(ccgSubSurf_prepareGLMesh(ss, true) == false)) {
+		if (UNLIKELY(ccgSubSurf_prepareGLMesh(ss, setMaterial != NULL) == false)) {
 			return;
 		}
 
@@ -1833,7 +1847,7 @@ static void ccgDM_drawFacesSolid(DerivedMesh *dm,
 
 				/* Update material settings for the next partitions batch. */
 				glShadeModel(new_shademodel);
-				if (new_matnr != matnr) {
+				if (new_matnr != matnr && setMaterial) {
 					setMaterial(new_matnr + 1, NULL);
 				}
 
@@ -1856,19 +1870,6 @@ static void ccgDM_drawFacesSolid(DerivedMesh *dm,
 	}
 #endif
 
-	CCG_key_top_level(&key, ss);
-	ccgdm_pbvh_update(ccgdm);
-
-	if (ccgdm->pbvh && ccgdm->multires.mmd && !fast) {
-		if (dm->numTessFaceData) {
-			BKE_pbvh_draw(ccgdm->pbvh, partial_redraw_planes, NULL,
-			              setMaterial, false);
-			glShadeModel(GL_FLAT);
-		}
-
-		return;
-	}
-
 	for (i = 0; i < totface; i++) {
 		CCGFace *f = ccgdm->faceMap[i].face;
 		int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(f);




More information about the Bf-blender-cvs mailing list