diff options
author | Daniel Dunbar <daniel@zuster.org> | 2005-08-18 15:31:20 +0400 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2005-08-18 15:31:20 +0400 |
commit | 8c41c00ff7b67f885f67af835f1228f0ba42a455 (patch) | |
tree | ad280f23e68ed054559e447e311c044d313f8da5 /source/blender/blenkernel/intern | |
parent | b774712d80c8901041282544c5dd6a9b3b0bbecf (diff) |
- added DerivedMesh.drawUVEdges function & implementations
- removed DerivedMesh.drawLooseEdges and replaced with much more
general drawEdgesFlag function that draws based edge flags.
- switch DerivedMesh.drawFacesTex to give user control over which
faces are drawn
- added object_uvs_changed and object_tface_flags_changed functions
to do object recalc flag flush/redraw queueing and added calls
in appropriate places
- added various edge flags to mark TFace information. This is used
by the drawEdgesFlag routine and was the best way I could come
up with to deal with drawing TFace information from modifier stack.
Unfortunate side effects are (1) uses a lot of MEdge flags (although
not needed in file so thats fine) and (2) requires recalculation
of modifier stack on UV selection changes. #2 is disappointing
but I could not find a better solution.
- update UV mesh shadow drawing to use modifier result. At the moment
just uses the final result but probably should be integrated with
the editmode cage option.
- convert draw_tfaces3D to use drawEdgesFlag routine which cleaned
up the code quite a bit.
- convert draw_tface_mesh to draw using result of modifier stack.
Same comment about which result actually gets draw in FACESELECT
mode as for UV editor shadow drawing applies.
There is a still a bug in that selection is using the wrong
mesh to draw.
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r-- | source/blender/blenkernel/intern/CCGSubSurf.c | 9 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/CCGSubSurf.h | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/DerivedMesh.c | 226 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/subsurf_ccg.c | 127 |
4 files changed, 281 insertions, 82 deletions
diff --git a/source/blender/blenkernel/intern/CCGSubSurf.c b/source/blender/blenkernel/intern/CCGSubSurf.c index bec741c64e6..2ed7d60e57e 100644 --- a/source/blender/blenkernel/intern/CCGSubSurf.c +++ b/source/blender/blenkernel/intern/CCGSubSurf.c @@ -2129,6 +2129,15 @@ CCGEdge *ccgSubSurf_getFaceEdge(CCGSubSurf *ss, CCGFace *f, int index) { return FACE_getEdges(f)[index]; } } +int ccgSubSurf_getFaceEdgeIndex(CCGSubSurf *ss, CCGFace *f, CCGEdge *e) { + int i; + + for (i=0; i<f->numVerts; i++) + if (FACE_getEdges(f)[i]==e) + return i; + + return -1; +} void *ccgSubSurf_getFaceCenterData(CCGSubSurf *ss, CCGFace *f) { return FACE_getCenterData(f); } diff --git a/source/blender/blenkernel/intern/CCGSubSurf.h b/source/blender/blenkernel/intern/CCGSubSurf.h index 4c522b1a827..547580bca6e 100644 --- a/source/blender/blenkernel/intern/CCGSubSurf.h +++ b/source/blender/blenkernel/intern/CCGSubSurf.h @@ -108,6 +108,7 @@ CCGFaceHDL ccgSubSurf_getFaceFaceHandle (CCGSubSurf *ss, CCGFace *f); int ccgSubSurf_getFaceNumVerts (CCGSubSurf *ss, CCGFace *f); CCGVert* ccgSubSurf_getFaceVert (CCGSubSurf *ss, CCGFace *f, int index); CCGEdge* ccgSubSurf_getFaceEdge (CCGSubSurf *ss, CCGFace *f, int index); +int ccgSubSurf_getFaceEdgeIndex (CCGSubSurf *ss, CCGFace *f, CCGEdge *e); int ccgSubSurf_getFaceAge (CCGSubSurf *ss, CCGFace *f); void* ccgSubSurf_getFaceUserData (CCGSubSurf *ss, CCGFace *f); diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c index 6ed73192d56..eda5e3ff485 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.c +++ b/source/blender/blenkernel/intern/DerivedMesh.c @@ -163,6 +163,41 @@ static void meshDM_drawVerts(DerivedMesh *dm) } glEnd(); } +static void meshDM_drawUVEdges(DerivedMesh *dm) +{ + MeshDerivedMesh *mdm = (MeshDerivedMesh*) dm; + Mesh *me = mdm->me; + int i; + + if (me->tface) { + glBegin(GL_LINES); + for (i=0; i<me->totface; i++) { + if (me->mface[i].v3) { + TFace *tf = &me->tface[i]; + + if (!(tf->flag&TF_HIDE)) { + glVertex2fv(tf->uv[0]); + glVertex2fv(tf->uv[1]); + + glVertex2fv(tf->uv[1]); + glVertex2fv(tf->uv[2]); + + if (!me->mface[i].v4) { + glVertex2fv(tf->uv[2]); + glVertex2fv(tf->uv[0]); + } else { + glVertex2fv(tf->uv[2]); + glVertex2fv(tf->uv[3]); + + glVertex2fv(tf->uv[3]); + glVertex2fv(tf->uv[0]); + } + } + } + } + glEnd(); + } +} static void meshDM_drawEdges(DerivedMesh *dm, int drawLooseEdges) { MeshDerivedMesh *mdm = (MeshDerivedMesh*) dm; @@ -220,30 +255,94 @@ static void meshDM_drawEdges(DerivedMesh *dm, int drawLooseEdges) glEnd(); } } -static void meshDM_drawLooseEdges(DerivedMesh *dm) +static void meshDM_drawEdgesFlag(DerivedMesh *dm, unsigned int mask, unsigned int value) { MeshDerivedMesh *mdm = (MeshDerivedMesh*) dm; - Mesh *me = mdm->me; - MFace *mface= me->mface; - MEdge *medge= me->medge; + Mesh *me= mdm->me; int a; + MFace *mface = me->mface; + int tfaceFlags = (ME_EDGE_TFSEL|ME_EDGE_TFACT|ME_EDGE_TFVISIBLE|ME_EDGE_TFACTFIRST|ME_EDGE_TFACTLAST); + + if ((mask&tfaceFlags) && me->tface) { + TFace *tface = me->tface; - if (medge) { glBegin(GL_LINES); - for(a=0; a<me->totedge; a++, medge++) { - if ((medge->flag&ME_EDGEDRAW) && (medge->flag&ME_LOOSEEDGE)) { - glVertex3fv(mdm->verts[medge->v1].co); - glVertex3fv(mdm->verts[medge->v2].co); + for(a=0; a<me->totface; a++, mface++, tface++) { + if (mface->v3) { + unsigned int flags = ME_EDGEDRAW|ME_EDGEMAPPED; + unsigned int flag0, flag1, flag2, flag3; + + if (tface->flag&TF_SELECT) flags |= ME_EDGE_TFSEL; + if (!(tface->flag&TF_HIDE)) flags |= ME_EDGE_TFVISIBLE; + + if (tface->flag&TF_ACTIVE) { + flags |= ME_EDGE_TFACT; + flag0 = flag1 = flag2 = flag3 = flags; + + flag0 |= ME_EDGE_TFACTFIRST; + flag3 |= ME_EDGE_TFACTLAST; + } else { + flag0 = flag1 = flag2 = flag3 = flags; + } + + if (mask&ME_SEAM) { + if (tface->unwrap&TF_SEAM1) flag0 |= ME_SEAM; + if (tface->unwrap&TF_SEAM2) flag1 |= ME_SEAM; + if (tface->unwrap&TF_SEAM3) flag2 |= ME_SEAM; + if (tface->unwrap&TF_SEAM4) flag3 |= ME_SEAM; + } + + if ((flag0&mask)==value) { + glVertex3fv(mdm->verts[mface->v1].co); + glVertex3fv(mdm->verts[mface->v2].co); + } + + if ((flag1&mask)==value) { + glVertex3fv(mdm->verts[mface->v2].co); + glVertex3fv(mdm->verts[mface->v3].co); + } + + if (mface->v4) { + if ((flag2&mask)==value) { + glVertex3fv(mdm->verts[mface->v3].co); + glVertex3fv(mdm->verts[mface->v4].co); + } + + if ((flag3&mask)==value) { + glVertex3fv(mdm->verts[mface->v4].co); + glVertex3fv(mdm->verts[mface->v1].co); + } + } else { + if ((flag3&mask)==value) { + glVertex3fv(mdm->verts[mface->v3].co); + glVertex3fv(mdm->verts[mface->v1].co); + } + } } } glEnd(); - } else { + } + else if(me->medge) { + MEdge *medge= me->medge; + + glBegin(GL_LINES); + for(a=me->totedge; a>0; a--, medge++) { + if (((medge->flag|ME_EDGEMAPPED)&mask)==value) { + glVertex3fv(mdm->verts[ medge->v1].co); + glVertex3fv(mdm->verts[ medge->v2].co); + } + } + glEnd(); + } + else { glBegin(GL_LINES); for(a=0; a<me->totface; a++, mface++) { - if(!mface->v3) { - glVertex3fv(mdm->verts[mface->v1].co); - glVertex3fv(mdm->verts[mface->v2].co); - } + if (!mface->v3) { + if (((ME_EDGEDRAW|ME_LOOSEEDGE|ME_EDGEMAPPED)&mask)==value) { + glVertex3fv(mdm->verts[mface->v1].co); + glVertex3fv(mdm->verts[mface->v2].co); + } + } } glEnd(); } @@ -381,16 +480,20 @@ static void meshDM_drawFacesTex(DerivedMesh *dm, int (*setDrawParams)(TFace *tf, for (a=0; a<me->totface; a++) { MFace *mf= &mface[a]; TFace *tf = tface?&tface[a]:NULL; + int flag; unsigned char *cp= NULL; - if(mf->v3==0) continue; - if(tf && ((tf->flag&TF_HIDE) || (tf->mode&TF_INVISIBLE))) continue; + if (mf->v3==0) continue; + + flag = setDrawParams(tf, mf->mat_nr); - if (setDrawParams(tf, mf->mat_nr)) { + if (flag==0) { + continue; + } else if (flag==1) { if (tf) { - cp= (unsigned char *) tf->col; + cp= (unsigned char*) tf->col; } else if (me->mcol) { - cp= (unsigned char *) &me->mcol[a*4]; + cp= (unsigned char*) &me->mcol[a*4]; } } @@ -463,9 +566,10 @@ static DerivedMesh *getMeshDerivedMesh(Mesh *me, Object *ob, float (*vertCos)[3] mdm->dm.drawVerts = meshDM_drawVerts; + mdm->dm.drawUVEdges = meshDM_drawUVEdges; mdm->dm.drawEdges = meshDM_drawEdges; - mdm->dm.drawLooseEdges = meshDM_drawLooseEdges; - + mdm->dm.drawEdgesFlag = meshDM_drawEdgesFlag; + mdm->dm.drawFacesSolid = meshDM_drawFacesSolid; mdm->dm.drawFacesColored = meshDM_drawFacesColored; mdm->dm.drawFacesTex = meshDM_drawFacesTex; @@ -989,38 +1093,73 @@ static void ssDM_drawMappedFacesEM(DerivedMesh *dm, int (*setDrawOptions)(void * } } -static void ssDM_drawLooseEdges(DerivedMesh *dm) +static void ssDM_drawVerts(DerivedMesh *dm) { SSDerivedMesh *ssdm = (SSDerivedMesh*) dm; DispListMesh *dlm = ssdm->dlm; + MVert *mvert= dlm->mvert; int i; - if (dlm->medge) { - MEdge *medge= dlm->medge; - + bglBegin(GL_POINTS); + for (i=0; i<dlm->totvert; i++) { + bglVertex3fv(mvert[i].co); + } + bglEnd(); +} +static void ssDM_drawUVEdges(DerivedMesh *dm) +{ + SSDerivedMesh *ssdm = (SSDerivedMesh*) dm; + DispListMesh *dlm = ssdm->dlm; + int i; + + if (dlm->tface) { glBegin(GL_LINES); - for (i=0; i<dlm->totedge; i++, medge++) { - if (medge->flag&ME_LOOSEEDGE) { - glVertex3fv(dlm->mvert[medge->v1].co); - glVertex3fv(dlm->mvert[medge->v2].co); + for (i=0; i<dlm->totface; i++) { + if (dlm->mface[i].v3) { + TFace *tf = &dlm->tface[i]; + + if (!(tf->flag&TF_HIDE)) { + glVertex2fv(tf->uv[0]); + glVertex2fv(tf->uv[1]); + + glVertex2fv(tf->uv[1]); + glVertex2fv(tf->uv[2]); + + if (!dlm->mface[i].v4) { + glVertex2fv(tf->uv[2]); + glVertex2fv(tf->uv[0]); + } else { + glVertex2fv(tf->uv[2]); + glVertex2fv(tf->uv[3]); + + glVertex2fv(tf->uv[3]); + glVertex2fv(tf->uv[0]); + } + } } } glEnd(); } } - -static void ssDM_drawVerts(DerivedMesh *dm) +static void ssDM_drawEdgesFlag(DerivedMesh *dm, unsigned int mask, unsigned int value) { SSDerivedMesh *ssdm = (SSDerivedMesh*) dm; DispListMesh *dlm = ssdm->dlm; - MVert *mvert= dlm->mvert; + MVert *mvert = dlm->mvert; int i; - bglBegin(GL_POINTS); - for (i=0; i<dlm->totvert; i++) { - bglVertex3fv(mvert[i].co); + if (dlm->medge) { + MEdge *medge= dlm->medge; + + glBegin(GL_LINES); + for (i=0; i<dlm->totedge; i++, medge++) { + if ((medge->flag&mask)==value) { + glVertex3fv(mvert[medge->v1].co); + glVertex3fv(mvert[medge->v2].co); + } + } + glEnd(); } - bglEnd(); } static void ssDM_drawEdges(DerivedMesh *dm, int drawLooseEdges) { @@ -1181,12 +1320,16 @@ static void ssDM_drawFacesTex(DerivedMesh *dm, int (*setDrawParams)(TFace *tf, i for (a=0; a<dlm->totface; a++) { MFace *mf= &mface[a]; TFace *tf = tface?&tface[a]:NULL; + int flag; unsigned char *cp= NULL; - if(mf->v3==0) continue; - if(tf && ((tf->flag&TF_HIDE) || (tf->mode&TF_INVISIBLE))) continue; + if (mf->v3==0) continue; + + flag = setDrawParams(tf, mf->mat_nr); - if (setDrawParams(tf, mf->mat_nr)) { + if (flag==0) { + continue; + } else if (flag==1) { if (tf) { cp= (unsigned char*) tf->col; } else if (dlm->mcol) { @@ -1320,9 +1463,10 @@ DerivedMesh *derivedmesh_from_displistmesh(DispListMesh *dlm, float (*vertexCos) ssdm->dm.drawVerts = ssDM_drawVerts; + ssdm->dm.drawUVEdges = ssDM_drawUVEdges; ssdm->dm.drawEdges = ssDM_drawEdges; - ssdm->dm.drawLooseEdges = ssDM_drawLooseEdges; - + ssdm->dm.drawEdgesFlag = ssDM_drawEdgesFlag; + ssdm->dm.drawFacesSolid = ssDM_drawFacesSolid; ssdm->dm.drawFacesColored = ssDM_drawFacesColored; ssdm->dm.drawFacesTex = ssDM_drawFacesTex; diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c index c971bc8aa42..e16ade4b7cc 100644 --- a/source/blender/blenkernel/intern/subsurf_ccg.c +++ b/source/blender/blenkernel/intern/subsurf_ccg.c @@ -196,6 +196,59 @@ static int getFaceIndex(CCGSubSurf *ss, CCGFace *f, int S, int x, int y, int edg return faceBase + 1 + (gridSize-2)*numVerts + S*(gridSize-2)*(gridSize-2) + (y-1)*(gridSize-2) + (x-1); } } + +static unsigned int ss_getEdgeFlags(CCGSubSurf *ss, CCGEdge *e, int ssFromEditmesh, MEdge *medge, TFace *tface) +{ + unsigned int flags = ME_EDGEDRAW|ME_EDGERENDER|ME_EDGEMAPPED; + int j, N = ccgSubSurf_getEdgeNumFaces(ss, e); + + if (!N) flags |= ME_LOOSEEDGE; + + if (ssFromEditmesh) { + EditEdge *eed = ccgSubSurf_getEdgeEdgeHandle(ss, e); + + if (eed->seam) { + flags |= ME_SEAM; + } + } else { + int edgeIdx = (int) ccgSubSurf_getEdgeEdgeHandle(ss, e); + + /* Edges created by lib have handle of -1 */ + if (edgeIdx!=-1 && medge) { + MEdge *origMed = &medge[edgeIdx]; + + flags |= (origMed->flag&ME_SEAM); + } + + if (tface) { + for (j=0; j<N; j++) { + CCGFace *f = ccgSubSurf_getEdgeFace(ss, e, j); + int origIdx = (int) ccgSubSurf_getFaceFaceHandle(ss, f); + TFace *tf = &tface[origIdx]; + + if (!(tf->flag&TF_HIDE)) flags |= ME_EDGE_TFVISIBLE; + if (tf->flag&TF_SELECT) flags |= ME_EDGE_TFSEL; + + if (tf->flag&TF_ACTIVE) { + int fN = ccgSubSurf_getFaceNumVerts(ss, f); + int k = ccgSubSurf_getFaceEdgeIndex(ss, f, e); + + flags |= ME_EDGE_TFACT; + + if (k==0) { + flags |= ME_EDGE_TFACTFIRST; + } + else if (k==fN-1) { + flags |= ME_EDGE_TFACTLAST; + } + } + } + } + } + + return flags; +} + static DispListMesh *ss_to_displistmesh(CCGSubSurf *ss, CCGDerivedMesh *ccgdm, int ssFromEditmesh, int drawInteriorEdges, Mesh *inMe, DispListMesh *inDLM, EditVert ***vertMap_r, EditEdge ***edgeMap_r, EditFace ***faceMap_r) { DispListMesh *dlm = MEM_callocN(sizeof(*dlm), "dlm"); int edgeSize = ccgSubSurf_getEdgeSize(ss); @@ -314,30 +367,13 @@ static DispListMesh *ss_to_displistmesh(CCGSubSurf *ss, CCGDerivedMesh *ccgdm, i ei = ccgSubSurf_getEdgeIterator(ss); for (; !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) { CCGEdge *e = ccgEdgeIterator_getCurrent(ei); + unsigned int flags = ss_getEdgeFlags(ss, e, ssFromEditmesh, medge, tface); + for (x=0; x<edgeSize-1; x++) { MEdge *med = &dlm->medge[i]; med->v1 = getEdgeIndex(ss, e, x, edgeSize); med->v2 = getEdgeIndex(ss, e, x+1, edgeSize); - med->flag = ME_EDGEDRAW|ME_EDGERENDER; - - if (!ccgSubSurf_getEdgeNumFaces(ss, e)) med->flag |= ME_LOOSEEDGE; - - if (ssFromEditmesh) { - EditEdge *eed = ccgSubSurf_getEdgeEdgeHandle(ss, e); - - if (eed->seam) { - med->flag|= ME_SEAM; - } - } else { - int edgeIdx = (int) ccgSubSurf_getEdgeEdgeHandle(ss, e); - - /* Edges created by lib have handle of -1 */ - if (edgeIdx!=-1 && medge) { - MEdge *origMed = &medge[edgeIdx]; - - med->flag|= (origMed->flag&ME_SEAM); - } - } + med->flag = flags; if (edgeMap) { edgeMap[i] = ccgDM_getEdgeHandle(ccgdm, e); @@ -428,6 +464,16 @@ static DispListMesh *ss_to_displistmesh(CCGSubSurf *ss, CCGDerivedMesh *ccgdm, i numDataComponents = 4; } + for (S=0; S<numVerts; S++) { + for (k=0; k<numDataComponents; k++) { + edge_data[S][k] = (corner_data[S][k] + corner_data[(S+1)%numVerts][k])*0.5f; + center_data[k]+= corner_data[S][k]; + } + } + for (k=0; k<numDataComponents; k++) { + center_data[k]/= numVerts; + } + mat_nr = origMFace->mat_nr; flag = origMFace->flag; } else { @@ -437,16 +483,6 @@ static DispListMesh *ss_to_displistmesh(CCGSubSurf *ss, CCGDerivedMesh *ccgdm, i } for (S=0; S<numVerts; S++) { - for (k=0; k<numDataComponents; k++) { - edge_data[S][k] = (corner_data[S][k] + corner_data[(S+1)%numVerts][k])*0.5f; - center_data[k]+= corner_data[S][k]; - } - } - for (k=0; k<numDataComponents; k++) { - center_data[k]/= numVerts; - } - - for (S=0; S<numVerts; S++) { int prevS= (S-1+numVerts)%numVerts; for (y=0; y<gridSize-1; y++) { @@ -499,6 +535,7 @@ static DispListMesh *ss_to_displistmesh(CCGSubSurf *ss, CCGDerivedMesh *ccgdm, i col[3] = (int) (data[3]*255); } } + if (dlm->tface) { TFace *tf = &dlm->tface[i]; tf->tpage = origTFace->tpage; @@ -917,18 +954,25 @@ static void ccgDM_drawEdges(DerivedMesh *dm, int drawLooseEdges) { ccgFaceIterator_free(fi); ccgEdgeIterator_free(ei); } -static void ccgDM_drawLooseEdges(DerivedMesh *dm) { +static void ccgDM_drawEdgesFlag(DerivedMesh *dm, unsigned int mask, unsigned int value) { CCGDerivedMesh *ccgdm = (CCGDerivedMesh*) dm; CCGSubSurf *ss = ccgdm->ss; CCGEdgeIterator *ei = ccgSubSurf_getEdgeIterator(ss); int i, edgeSize = ccgSubSurf_getEdgeSize(ss); + MEdge *medge = NULL; + TFace *tface = NULL; + + if (!ccgdm->fromEditmesh) { + medge = ccgdm->dlm?ccgdm->dlm->medge:ccgdm->me->medge; + tface = ccgdm->dlm?ccgdm->dlm->tface:ccgdm->me->tface; + } for (; !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) { CCGEdge *e = ccgEdgeIterator_getCurrent(ei); + VertData *edgeData = ccgSubSurf_getEdgeDataArray(ss, e); + unsigned int flags = ss_getEdgeFlags(ss, e, ccgdm->fromEditmesh, medge, tface); - if (!ccgSubSurf_getEdgeNumFaces(ss, e)) { - VertData *edgeData = ccgSubSurf_getEdgeDataArray(ss, e); - + if ((flags&mask)==value) { glBegin(GL_LINE_STRIP); for (i=0; i<edgeSize-1; i++) { glVertex3fv(edgeData[i].co); @@ -940,7 +984,6 @@ static void ccgDM_drawLooseEdges(DerivedMesh *dm) { ccgEdgeIterator_free(ei); } - static void ccgDM_drawFacesSolid(DerivedMesh *dm, int (*setMaterial)(int)) { CCGDerivedMesh *ccgdm = (CCGDerivedMesh*) dm; CCGSubSurf *ss = ccgdm->ss; @@ -1100,14 +1143,15 @@ static void ccgDM_drawFacesTex(DerivedMesh *dm, int (*setDrawParams)(TFace *tf, MFace *mf = &mface[index]; TFace *tf = tface?&tface[index]:NULL; unsigned char *cp= NULL; - - if(tf && ((tf->flag&TF_HIDE) || (tf->mode&TF_INVISIBLE))) continue; + int flag = setDrawParams(tf, mf->mat_nr); - if (setDrawParams(tf, mf->mat_nr)) { + if (flag==0) { + continue; + } else if (flag==1) { if (tf) { - cp= (unsigned char *) tf->col; + cp= (unsigned char*) tf->col; } else if (mcol) { - cp= (unsigned char *) &mcol[index*4]; + cp= (unsigned char*) &mcol[index*4]; } } @@ -1336,7 +1380,7 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss, int fromEditmesh, int d ccgdm->dm.drawVerts = ccgDM_drawVerts; ccgdm->dm.drawEdges = ccgDM_drawEdges; - ccgdm->dm.drawLooseEdges = ccgDM_drawLooseEdges; + ccgdm->dm.drawEdgesFlag = ccgDM_drawEdgesFlag; ccgdm->dm.drawFacesSolid = ccgDM_drawFacesSolid; ccgdm->dm.drawFacesColored = ccgDM_drawFacesColored; ccgdm->dm.drawFacesTex = ccgDM_drawFacesTex; @@ -1434,6 +1478,7 @@ DerivedMesh *subsurf_make_derived_from_mesh(Mesh *me, DispListMesh *dlm, Subsurf ss = _getSubSurf(NULL, smd->levels, 0, 1, useEdgeCreation, useSimple); ss_sync_from_mesh(ss, me, dlm, vertCos, useSimple); + ndlm = ss_to_displistmesh(ss, NULL, 0, drawInteriorEdges, me, dlm, NULL, NULL, NULL); if (dlm) displistmesh_free(dlm); |