[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