[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35888] trunk/blender/source/blender/ blenkernel/intern: Fix for old bug with subsurf not initializing normals for edges that had no faces ,

Campbell Barton ideasman42 at gmail.com
Wed Mar 30 04:05:12 CEST 2011


Revision: 35888
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35888
Author:   campbellbarton
Date:     2011-03-30 02:05:10 +0000 (Wed, 30 Mar 2011)
Log Message:
-----------
Fix for old bug with subsurf not initializing normals for edges that had no faces,
Noted that a floating point exception caused by this r28953.

With the render engine using DerivedMesh normals this came up as a memory error when rendering some files.

for now zero the normals, could interpolate between vertex normals if needed.

Revision Links:
--------------
    http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=28953

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/CCGSubSurf.c
    trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c

Modified: trunk/blender/source/blender/blenkernel/intern/CCGSubSurf.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/CCGSubSurf.c	2011-03-30 01:40:14 UTC (rev 35887)
+++ trunk/blender/source/blender/blenkernel/intern/CCGSubSurf.c	2011-03-30 02:05:10 UTC (rev 35888)
@@ -1342,6 +1342,17 @@
 				NormCopy(EDGE_getNo(e, lvl, x),
 					_face_getIFNoEdge(f, e, lvl, x, 0, subdivLevels, vertDataSize, normalDataOffset));
 		}
+		else {
+			/* set to zero here otherwise the normals are uninitialized memory
+			 * render: tests/animation/knight.blend with valgrind.
+			 * we could be more clever and interpolate vertex normals but these are
+			 * most likely not used so just zero out. */
+			int x;
+
+			for (x=0; x<edgeSize; x++) {
+				NormZero(EDGE_getNo(e, lvl, x));
+			}
+		}
 	}
 }
 #undef FACE_getIFNo

Modified: trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c	2011-03-30 01:40:14 UTC (rev 35887)
+++ trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c	2011-03-30 02:05:10 UTC (rev 35888)
@@ -851,7 +851,11 @@
 		for(x = 1; x < edgeSize - 1; x++, i++) {
 			vd= ccgSubSurf_getEdgeData(ss, e, x);
 			copy_v3_v3(mvert[i].co, vd->co);
-			/* XXX, This gives errors with -fpe, the normals dont seem to be unit length - campbell */
+			/* This gives errors with -debug-fpe
+			 * the normals dont seem to be unit length.
+			 * this is most likely caused by edges with no
+			 * faces which are now zerod out, see comment in:
+			 * ccgSubSurf__calcVertNormals(), - campbell */
 			normal_float_to_short_v3(mvert[i].no, vd->no);
 		}
 	}




More information about the Bf-blender-cvs mailing list