[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56570] trunk/blender/source/blender: add in asserts when rv3d->viewmatob, rv3d->persmatob are not initialized.

Campbell Barton ideasman42 at gmail.com
Wed May 8 15:00:52 CEST 2013


Revision: 56570
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56570
Author:   campbellbarton
Date:     2013-05-08 13:00:52 +0000 (Wed, 08 May 2013)
Log Message:
-----------
add in asserts when rv3d->viewmatob, rv3d->persmatob are not initialized.

This is often hard to spot since in many cases it works correctly even
when not initialized but may still fail in other situations.

Modified Paths:
--------------
    trunk/blender/source/blender/blenlib/BLI_math_base.h
    trunk/blender/source/blender/editors/include/ED_view3d.h
    trunk/blender/source/blender/editors/mesh/editmesh_select.c
    trunk/blender/source/blender/editors/space_view3d/drawarmature.c
    trunk/blender/source/blender/editors/space_view3d/drawobject.c
    trunk/blender/source/blender/editors/space_view3d/space_view3d.c
    trunk/blender/source/blender/editors/space_view3d/view3d_iterators.c
    trunk/blender/source/blender/editors/space_view3d/view3d_project.c

Modified: trunk/blender/source/blender/blenlib/BLI_math_base.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_math_base.h	2013-05-08 13:00:33 UTC (rev 56569)
+++ trunk/blender/source/blender/blenlib/BLI_math_base.h	2013-05-08 13:00:52 UTC (rev 56570)
@@ -245,9 +245,19 @@
 	BLI_assert((fabsf(_test_unit - 1.0f) < BLI_ASSERT_UNIT_EPSILON) ||        \
 	           (fabsf(_test_unit)        < BLI_ASSERT_UNIT_EPSILON));         \
 } (void)0
+
+#  define BLI_ASSERT_ZERO_M3(m)  {                                            \
+	BLI_assert(dot_vn_vn((const float *)m, (const float *)m, 9) != 0.0);     \
+} (void)0
+
+#  define BLI_ASSERT_ZERO_M4(m)  {                                            \
+	BLI_assert(dot_vn_vn((const float *)m, (const float *)m, 16) != 0.0);     \
+} (void)0
 #else
-#  define BLI_ASSERT_UNIT_V2(v) (void)0
-#  define BLI_ASSERT_UNIT_V3(v) (void)0
+#  define BLI_ASSERT_UNIT_V2(v) (void)(v)
+#  define BLI_ASSERT_UNIT_V3(v) (void)(v)
+#  define BLI_ASSERT_ZERO_M3(m) (void)(m)
+#  define BLI_ASSERT_ZERO_M4(m) (void)(m)
 #endif
 
 #endif /* __BLI_MATH_BASE_H__ */

Modified: trunk/blender/source/blender/editors/include/ED_view3d.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_view3d.h	2013-05-08 13:00:33 UTC (rev 56569)
+++ trunk/blender/source/blender/editors/include/ED_view3d.h	2013-05-08 13:00:52 UTC (rev 56570)
@@ -276,7 +276,13 @@
 
 void ED_view3d_init_mats_rv3d(struct Object *ob, struct RegionView3D *rv3d);
 void ED_view3d_init_mats_rv3d_gl(struct Object *ob, struct RegionView3D *rv3d);
-
+#ifdef DEBUG
+void ED_view3d_clear_mats_rv3d(struct RegionView3D *rv3d);
+void ED_view3d_check_mats_rv3d(struct RegionView3D *rv3d);
+#else
+#  define ED_view3d_clear_mats_rv3d(rv3d) (void)(rv3d)
+#  define ED_view3d_check_mats_rv3d(rv3d) (void)(rv3d)
+#endif
 int ED_view3d_scene_layer_set(int lay, const int *values, int *active);
 
 bool ED_view3d_context_activate(struct bContext *C);

Modified: trunk/blender/source/blender/editors/mesh/editmesh_select.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_select.c	2013-05-08 13:00:33 UTC (rev 56569)
+++ trunk/blender/source/blender/editors/mesh/editmesh_select.c	2013-05-08 13:00:52 UTC (rev 56570)
@@ -587,6 +587,8 @@
 			data.dist = FLT_MAX;
 			data.toFace = efa;
 
+			ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
+
 			mesh_foreachScreenFace(vc, findnearestface__getDistance, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
 
 			if ((vc->em->selectmode == SCE_SELECT_FACE) || (data.dist < *r_dist)) {  /* only faces, no dist check */
@@ -613,14 +615,13 @@
 		data.dist = *r_dist;
 		data.closest = NULL;
 		data.closestIndex = 0;
-		ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
 
 		data.pass = 0;
+		ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
 		mesh_foreachScreenFace(vc, findnearestface__doClosest, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
 
 		if (data.dist > 3.0f) {
 			data.pass = 1;
-			ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
 			mesh_foreachScreenFace(vc, findnearestface__doClosest, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
 		}
 

Modified: trunk/blender/source/blender/editors/space_view3d/drawarmature.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/drawarmature.c	2013-05-08 13:00:33 UTC (rev 56569)
+++ trunk/blender/source/blender/editors/space_view3d/drawarmature.c	2013-05-08 13:00:52 UTC (rev 56570)
@@ -2097,7 +2097,9 @@
 	
 	/* being set in code below */
 	arm->layer_used = 0;
-	
+
+	ED_view3d_check_mats_rv3d(rv3d);
+
 	/* envelope (deform distance) */
 	if (arm->drawtype == ARM_ENVELOPE) {
 		/* precalc inverse matrix for drawing screen aligned */

Modified: trunk/blender/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/drawobject.c	2013-05-08 13:00:33 UTC (rev 56569)
+++ trunk/blender/source/blender/editors/space_view3d/drawobject.c	2013-05-08 13:00:52 UTC (rev 56570)
@@ -7001,6 +7001,7 @@
 	if ((base->flag & OB_FROMDUPLI) ||
 	    (v3d->flag2 & V3D_RENDER_OVERRIDE))
 	{
+		ED_view3d_clear_mats_rv3d(rv3d);
 		return;
 	}
 
@@ -7144,6 +7145,8 @@
 	}
 
 	free_old_images();
+
+	ED_view3d_clear_mats_rv3d(rv3d);
 }
 
 /* ***************** BACKBUF SEL (BBS) ********* */

Modified: trunk/blender/source/blender/editors/space_view3d/space_view3d.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/space_view3d.c	2013-05-08 13:00:33 UTC (rev 56569)
+++ trunk/blender/source/blender/editors/space_view3d/space_view3d.c	2013-05-08 13:00:52 UTC (rev 56570)
@@ -243,6 +243,21 @@
 	glMultMatrixf(ob->obmat);
 }
 
+#ifdef DEBUG
+/* ensure we correctly initialize */
+void ED_view3d_clear_mats_rv3d(struct RegionView3D *rv3d)
+{
+	zero_m4(rv3d->viewmatob);
+	zero_m4(rv3d->persmatob);
+}
+
+void ED_view3d_check_mats_rv3d(struct RegionView3D *rv3d)
+{
+	BLI_ASSERT_ZERO_M4(rv3d->viewmatob);
+	BLI_ASSERT_ZERO_M4(rv3d->persmatob);
+}
+#endif
+
 /* ******************** default callbacks for view3d space ***************** */
 
 static SpaceLink *view3d_new(const bContext *C)

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_iterators.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_iterators.c	2013-05-08 13:00:33 UTC (rev 56569)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_iterators.c	2013-05-08 13:00:52 UTC (rev 56570)
@@ -112,6 +112,8 @@
 	foreachScreenObjectVert_userData data;
 	DerivedMesh *dm = mesh_get_derived_deform(vc->scene, vc->obact, CD_MASK_BAREMESH);
 
+	ED_view3d_check_mats_rv3d(vc->rv3d);
+
 	data.vc = *vc;
 	data.func = func;
 	data.userData = userData;
@@ -151,6 +153,8 @@
 	foreachScreenVert_userData data;
 	DerivedMesh *dm = editbmesh_get_derived_cage(vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH);
 
+	ED_view3d_check_mats_rv3d(vc->rv3d);
+
 	data.vc = *vc;
 	data.func = func;
 	data.userData = userData;
@@ -203,6 +207,8 @@
 	foreachScreenEdge_userData data;
 	DerivedMesh *dm = editbmesh_get_derived_cage(vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH);
 
+	ED_view3d_check_mats_rv3d(vc->rv3d);
+
 	data.vc = *vc;
 
 	data.win_rect.xmin = 0;
@@ -247,13 +253,13 @@
 	foreachScreenFace_userData data;
 	DerivedMesh *dm = editbmesh_get_derived_cage(vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH);
 
+	ED_view3d_check_mats_rv3d(vc->rv3d);
+
 	data.vc = *vc;
 	data.func = func;
 	data.userData = userData;
 	data.clip_flag = clip_flag;
 
-	ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
-
 	EDBM_index_arrays_ensure(vc->em, BM_FACE);
 	dm->foreachMappedFaceCenter(dm, mesh_foreachScreenFace__mapFunc, &data);
 
@@ -272,6 +278,8 @@
 	int i;
 	ListBase *nurbs = BKE_curve_editNurbs_get(cu);
 
+	ED_view3d_check_mats_rv3d(vc->rv3d);
+
 	if (clip_flag & V3D_PROJ_TEST_CLIP_BB) {
 		ED_view3d_clipping_local(vc->rv3d, vc->obedit->obmat); /* for local clipping lookups */
 	}
@@ -339,6 +347,8 @@
 	MetaBall *mb = (MetaBall *)vc->obedit->data;
 	MetaElem *ml;
 
+	ED_view3d_check_mats_rv3d(vc->rv3d);
+
 	for (ml = mb->editelems->first; ml; ml = ml->next) {
 		float screen_co[2];
 		if (ED_view3d_project_float_object(vc->ar, &ml->x, screen_co, clip_flag) == V3D_PROJ_RET_OK) {
@@ -361,6 +371,8 @@
 	float *co = dl ? dl->verts : NULL;
 	int i, N = lt->editlatt->latt->pntsu * lt->editlatt->latt->pntsv * lt->editlatt->latt->pntsw;
 
+	ED_view3d_check_mats_rv3d(vc->rv3d);
+
 	if (clip_flag & V3D_PROJ_TEST_CLIP_BB) {
 		ED_view3d_clipping_local(vc->rv3d, obedit->obmat); /* for local clipping lookups */
 	}
@@ -386,6 +398,8 @@
 	bArmature *arm = vc->obedit->data;
 	EditBone *ebone;
 
+	ED_view3d_check_mats_rv3d(vc->rv3d);
+
 	for (ebone = arm->edbo->first; ebone; ebone = ebone->next) {
 		if (EBONE_VISIBLE(arm, ebone)) {
 			float screen_co_a[2], screen_co_b[2];
@@ -429,6 +443,8 @@
 	bPose *pose = vc->obact->pose;
 	bPoseChannel *pchan;
 
+	ED_view3d_check_mats_rv3d(vc->rv3d);
+
 	for (pchan = pose->chanbase.first; pchan; pchan = pchan->next) {
 		if (PBONE_VISIBLE(arm, pchan->bone)) {
 			float screen_co_a[2], screen_co_b[2];

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_project.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_project.c	2013-05-08 13:00:33 UTC (rev 56569)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_project.c	2013-05-08 13:00:52 UTC (rev 56570)
@@ -237,6 +237,7 @@
 eV3DProjStatus ED_view3d_project_short_object(const ARegion *ar, const float co[3], short r_co[2], const eV3DProjTest flag)
 {
 	RegionView3D *rv3d = ar->regiondata;
+	ED_view3d_check_mats_rv3d(rv3d);
 	return ED_view3d_project_short_ex(ar, rv3d->persmatob, true, co, r_co, flag);
 }
 
@@ -250,6 +251,7 @@
 eV3DProjStatus ED_view3d_project_int_object(const ARegion *ar, const float co[3], int r_co[2], const eV3DProjTest flag)
 {
 	RegionView3D *rv3d = ar->regiondata;
+	ED_view3d_check_mats_rv3d(rv3d);
 	return ED_view3d_project_int_ex(ar, rv3d->persmatob, true, co, r_co, flag);
 }
 
@@ -263,6 +265,7 @@
 eV3DProjStatus ED_view3d_project_float_object(const ARegion *ar, const float co[3], float r_co[2], const eV3DProjTest flag)
 {
 	RegionView3D *rv3d = ar->regiondata;
+	ED_view3d_check_mats_rv3d(rv3d);
 	return ED_view3d_project_float_ex(ar, rv3d->persmatob, true, co, r_co, flag);
 }
 




More information about the Bf-blender-cvs mailing list