[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32608] trunk/blender/source/blender/ blenkernel/intern/subsurf_ccg.c: == Sculpt ==

Nicholas Bishop nicholasbishop at gmail.com
Wed Oct 20 03:17:21 CEST 2010


Revision: 32608
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32608
Author:   nicholasbishop
Date:     2010-10-20 03:17:18 +0200 (Wed, 20 Oct 2010)

Log Message:
-----------
== Sculpt ==

Fixed bug #22634, sculpting/multires and wireframe display mode glitches

* Changed ccgdm edge drawing to always use face griddata rather than edge data, since edge data is not updated during sculpting.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c

Modified: trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c	2010-10-20 00:42:19 UTC (rev 32607)
+++ trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c	2010-10-20 01:17:18 UTC (rev 32608)
@@ -1146,71 +1146,62 @@
 	ccgFaceIterator_free(fi);
 	glEnd();
 }
+
 static void ccgDM_drawEdges(DerivedMesh *dm, int drawLooseEdges, int UNUSED(drawAllEdges)) {
 	CCGDerivedMesh *ccgdm = (CCGDerivedMesh*) dm;
 	CCGSubSurf *ss = ccgdm->ss;
-	CCGEdgeIterator *ei = ccgSubSurf_getEdgeIterator(ss);
 	CCGFaceIterator *fi = ccgSubSurf_getFaceIterator(ss);
-	int i, edgeSize = ccgSubSurf_getEdgeSize(ss);
 	int gridSize = ccgSubSurf_getGridSize(ss);
+	int start, end, step;
 	int useAging;
 
 	ccgSubSurf_getUseAgeCounts(ss, &useAging, NULL, NULL, NULL);
 
-	for (; !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) {
-		CCGEdge *e = ccgEdgeIterator_getCurrent(ei);
-		DMGridData *edgeData = ccgSubSurf_getEdgeDataArray(ss, e);
+	/* nothing to do */
+	if(!drawLooseEdges && !ccgdm->drawInteriorEdges)
+		return;
 
-		if (!drawLooseEdges && !ccgSubSurf_getEdgeNumFaces(e))
-			continue;
-
-		if (useAging && !(G.f&G_BACKBUFSEL)) {
-			int ageCol = 255-ccgSubSurf_getEdgeAge(ss, e)*4;
-			glColor3ub(0, ageCol>0?ageCol:0, 0);
-		}
-
-		glBegin(GL_LINE_STRIP);
-		for (i=0; i<edgeSize-1; i++) {
-			glVertex3fv(edgeData[i].co);
-			glVertex3fv(edgeData[i+1].co);
-		}
-		glEnd();
-	}
-
 	if (useAging && !(G.f&G_BACKBUFSEL)) {
 		glColor3ub(0, 0, 0);
 	}
 
-	if (ccgdm->drawInteriorEdges) {
-		for (; !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
-			CCGFace *f = ccgFaceIterator_getCurrent(fi);
-			int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(f);
+	if(drawLooseEdges) {
+		start = 0;
+		end = gridSize;
+		step = gridSize - 1;
+	}
+	else if(ccgdm->drawInteriorEdges) {
+		start = 1;
+		end = gridSize - 1;
+		step = 1;
+	}
 
-			for (S=0; S<numVerts; S++) {
-				DMGridData *faceGridData = ccgSubSurf_getFaceGridDataArray(ss, f, S);
+	if(drawLooseEdges && ccgdm->drawInteriorEdges)
+		step = 1;
 
+	for (; !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
+		CCGFace *f = ccgFaceIterator_getCurrent(fi);
+		int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(f);
+
+		for (S=0; S<numVerts; S++) {
+			DMGridData *faceGridData = ccgSubSurf_getFaceGridDataArray(ss, f, S);
+
+			for (y=start; y<end; y+=step) {
 				glBegin(GL_LINE_STRIP);
 				for (x=0; x<gridSize; x++)
-					glVertex3fv(faceGridData[x].co);
+					glVertex3fv(faceGridData[y*gridSize + x].co);
 				glEnd();
-				for (y=1; y<gridSize-1; y++) {
-					glBegin(GL_LINE_STRIP);
-					for (x=0; x<gridSize; x++)
-						glVertex3fv(faceGridData[y*gridSize + x].co);
-					glEnd();
-				}
-				for (x=1; x<gridSize-1; x++) {
-					glBegin(GL_LINE_STRIP);
-					for (y=0; y<gridSize; y++)
-						glVertex3fv(faceGridData[y*gridSize + x].co);
-					glEnd();
-				}
 			}
+			for (x=start; x<end; x+=step) {
+				glBegin(GL_LINE_STRIP);
+				for (y=0; y<gridSize; y++)
+					glVertex3fv(faceGridData[y*gridSize + x].co);
+				glEnd();
+			}
 		}
 	}
 
 	ccgFaceIterator_free(fi);
-	ccgEdgeIterator_free(ei);
 }
 static void ccgDM_drawLooseEdges(DerivedMesh *dm) {
 	CCGDerivedMesh *ccgdm = (CCGDerivedMesh*) dm;





More information about the Bf-blender-cvs mailing list