From 7110a4a288bed770ce03534e4508e05e7e1e2d78 Mon Sep 17 00:00:00 2001 From: Nicholas Bishop Date: Wed, 20 Oct 2010 01:17:18 +0000 Subject: == 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. --- source/blender/blenkernel/intern/subsurf_ccg.c | 73 +++++++++++--------------- 1 file changed, 32 insertions(+), 41 deletions(-) (limited to 'source') diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c index 26bd981db4a..4b810059464 100644 --- a/source/blender/blenkernel/intern/subsurf_ccg.c +++ b/source/blender/blenkernel/intern/subsurf_ccg.c @@ -1146,71 +1146,62 @@ static void ccgDM_drawVerts(DerivedMesh *dm) { 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); - - 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; idrawInteriorEdges) + return; 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; + } + + if(drawLooseEdges && ccgdm->drawInteriorEdges) + step = 1; - for (S=0; S