Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Bishop <nicholasbishop@gmail.com>2010-10-25 06:58:32 +0400
committerNicholas Bishop <nicholasbishop@gmail.com>2010-10-25 06:58:32 +0400
commitacef2ca4c5cc1dcdff0edc7af79f8772186a2c3d (patch)
treecd486f450bcbb754910c66f3a4998fe1d6100688
parent2882c4b6efdadf935f14fb920a38e7ff2f5db55d (diff)
Closing #24367 (Incorrect behaviour for Optimal Display option) and reopening #22634 (sculpting/multires and wireframe display mode glitches)
* Reverting my earlier changes to subsurf edge drawing; seems to be causing more bugs than the minor bug it fixed.
-rw-r--r--source/blender/blenkernel/intern/subsurf_ccg.c85
1 files changed, 41 insertions, 44 deletions
diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c
index 51cee333370..26bd981db4a 100644
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@ -1146,74 +1146,71 @@ 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;
- CCGFaceIterator *fi = ccgSubSurf_getFaceIterator(ss);
CCGEdgeIterator *ei = ccgSubSurf_getEdgeIterator(ss);
+ CCGFaceIterator *fi = ccgSubSurf_getFaceIterator(ss);
+ int i, edgeSize = ccgSubSurf_getEdgeSize(ss);
int gridSize = ccgSubSurf_getGridSize(ss);
- int edgeSize = ccgSubSurf_getEdgeSize(ss);
- int step;
int useAging;
ccgSubSurf_getUseAgeCounts(ss, &useAging, NULL, NULL, NULL);
- /* nothing to do */
- if(!drawLooseEdges && !ccgdm->drawInteriorEdges)
- return;
+ 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; 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)
- step = 1;
- else
- step = gridSize - 1;
+ if (ccgdm->drawInteriorEdges) {
+ for (; !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
+ CCGFace *f = ccgFaceIterator_getCurrent(fi);
+ int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(f);
- /* draw edges using face grids */
- 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 (S=0; S<numVerts; S++) {
- DMGridData *faceGridData = ccgSubSurf_getFaceGridDataArray(ss, f, S);
-
- for (y=0; y<gridSize; y+=step) {
glBegin(GL_LINE_STRIP);
for (x=0; x<gridSize; x++)
- glVertex3fv(faceGridData[y*gridSize + x].co);
- glEnd();
- }
- for (x=0; x<gridSize; x+=step) {
- glBegin(GL_LINE_STRIP);
- for (y=0; y<gridSize; y++)
- glVertex3fv(faceGridData[y*gridSize + x].co);
+ glVertex3fv(faceGridData[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();
+ }
}
}
}
- /* draw edges with no adjacent face */
- if(!drawLooseEdges) return;
- for(; !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) {
- CCGEdge *e = ccgEdgeIterator_getCurrent(ei);
-
- if(!ccgSubSurf_getEdgeNumFaces(e)) {
- DMGridData *edgeData = ccgSubSurf_getEdgeDataArray(ss, e);
- int i;
-
- glBegin(GL_LINE_STRIP);
- for (i=0; i<edgeSize-1; i++) {
- glVertex3fv(edgeData[i].co);
- glVertex3fv(edgeData[i+1].co);
- }
- glEnd();
- }
- }
-
ccgFaceIterator_free(fi);
+ ccgEdgeIterator_free(ei);
}
static void ccgDM_drawLooseEdges(DerivedMesh *dm) {
CCGDerivedMesh *ccgdm = (CCGDerivedMesh*) dm;