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:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2011-11-24 21:06:50 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2011-11-24 21:06:50 +0400
commit0c965e16ac85848473add24de4b7beaf6011812f (patch)
tree0513e73194e5c15869c6a9861ab772095b3da0e5 /source/blender/blenkernel/intern/CCGSubSurf.c
parent03398cfa8846e37fe88c8b992f2b7efb4d7b2a20 (diff)
Fix #29366: multires crash with meshes that had verts/edges not connected to any face.
Diffstat (limited to 'source/blender/blenkernel/intern/CCGSubSurf.c')
-rw-r--r--source/blender/blenkernel/intern/CCGSubSurf.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/source/blender/blenkernel/intern/CCGSubSurf.c b/source/blender/blenkernel/intern/CCGSubSurf.c
index 4793e83df53..140f596f78c 100644
--- a/source/blender/blenkernel/intern/CCGSubSurf.c
+++ b/source/blender/blenkernel/intern/CCGSubSurf.c
@@ -2301,14 +2301,16 @@ CCGError ccgSubSurf_stitchFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, in
/* zero */
for (i=0; i<numEffectedV; i++) {
CCGVert *v = effectedV[i];
- VertDataZero(VERT_getCo(v, lvl));
+ if(v->numFaces)
+ VertDataZero(VERT_getCo(v, lvl));
}
for (i=0; i<numEffectedE; i++) {
CCGEdge *e = effectedE[i];
- for (x=0; x<edgeSize; x++)
- VertDataZero(EDGE_getCo(e, lvl, x));
+ if(e->numFaces)
+ for (x=0; x<edgeSize; x++)
+ VertDataZero(EDGE_getCo(e, lvl, x));
}
/* add */
@@ -2349,7 +2351,8 @@ CCGError ccgSubSurf_stitchFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, in
/* average */
for (i=0; i<numEffectedV; i++) {
CCGVert *v = effectedV[i];
- VertDataMulN(VERT_getCo(v, lvl), 1.0f/v->numFaces);
+ if(v->numFaces)
+ VertDataMulN(VERT_getCo(v, lvl), 1.0f/v->numFaces);
}
for (i=0; i<numEffectedE; i++) {
@@ -2358,8 +2361,9 @@ CCGError ccgSubSurf_stitchFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, in
VertDataCopy(EDGE_getCo(e, lvl, 0), VERT_getCo(e->v0, lvl));
VertDataCopy(EDGE_getCo(e, lvl, edgeSize-1), VERT_getCo(e->v1, lvl));
- for (x=1; x<edgeSize-1; x++)
- VertDataMulN(EDGE_getCo(e, lvl, x), 1.0f/e->numFaces);
+ if(e->numFaces)
+ for (x=1; x<edgeSize-1; x++)
+ VertDataMulN(EDGE_getCo(e, lvl, x), 1.0f/e->numFaces);
}
/* copy */