[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