[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [52267] trunk/blender/source/blender/ editors/space_view3d/view3d_draw.c: debug utility for drawing in the 3d viewport (uncomment define to use), helpful for debugging modifiers/bmesh code, especially other peoples :)

Campbell Barton ideasman42 at gmail.com
Fri Nov 16 08:56:49 CET 2012


Revision: 52267
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=52267
Author:   campbellbarton
Date:     2012-11-16 07:56:47 +0000 (Fri, 16 Nov 2012)
Log Message:
-----------
debug utility for drawing in the 3d viewport (uncomment define to use), helpful for debugging modifiers/bmesh code, especially other peoples :)

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_view3d/view3d_draw.c

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_draw.c	2012-11-16 03:23:46 UTC (rev 52266)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_draw.c	2012-11-16 07:56:47 UTC (rev 52267)
@@ -95,6 +95,16 @@
 
 #include "view3d_intern.h"  /* own include */
 
+/* handy utility for drawing shapes in the viewport for arbitrary code.
+ * could add lines and points too */
+// #define DEBUG_DRAW
+#ifdef DEBUG_DRAW
+static void bl_debug_draw(void);
+/* add these locally when using these functions for testing */
+extern void bl_debug_draw_quad_clear(void);
+extern void bl_debug_draw_quad_add(const float v0[3], const float v1[3], const float v2[3], const float v3[3]);
+extern void bl_debug_draw_edge_add(const float v0[3], const float v1[3]);
+#endif
 
 static void star_stuff_init_func(void)
 {
@@ -3207,6 +3217,9 @@
 	/* draw viewport using opengl */
 	if (v3d->drawtype != OB_RENDER || !view3d_main_area_do_render_draw(C) || draw_border) {
 		view3d_main_area_draw_objects(C, ar, &grid_unit);
+#ifdef DEBUG_DRAW
+		bl_debug_draw();
+#endif
 		ED_region_pixelspace(ar);
 	}
 
@@ -3219,3 +3232,57 @@
 	v3d->flag |= V3D_INVALID_BACKBUF;
 }
 
+#ifdef DEBUG_DRAW
+/* debug drawing */
+#define _DEBUG_DRAW_QUAD_TOT 1024
+static float _bl_debug_draw_quads[_DEBUG_DRAW_QUAD_TOT][4][3];
+static int   _bl_debug_draw_quads_tot = 0;
+
+void bl_debug_draw_quad_clear(void)
+{
+	_bl_debug_draw_quads_tot = 0;
+}
+void bl_debug_draw_quad_add(const float v0[3], const float v1[3], const float v2[3], const float v3[3])
+{
+	if (_bl_debug_draw_quads_tot >= _DEBUG_DRAW_QUAD_TOT) {
+		printf("%s: max quad count hit %d!", __func__, _bl_debug_draw_quads_tot);
+	}
+	else {
+		float *pt = &_bl_debug_draw_quads[_bl_debug_draw_quads_tot][0][0];
+		copy_v3_v3(pt, v0); pt += 3;
+		copy_v3_v3(pt, v1); pt += 3;
+		copy_v3_v3(pt, v2); pt += 3;
+		copy_v3_v3(pt, v3); pt += 3;
+		_bl_debug_draw_quads_tot++;
+	}
+}
+void bl_debug_draw_edge_add(const float v0[3], const float v1[3])
+{
+	if (_bl_debug_draw_quads_tot >= _DEBUG_DRAW_QUAD_TOT) {
+		printf("%s: max edge count hit %d!", __func__, _bl_debug_draw_quads_tot);
+	}
+	else {
+		float *pt = &_bl_debug_draw_quads[_bl_debug_draw_quads_tot][0][0];
+		copy_v3_v3(pt, v0); pt += 3;
+		copy_v3_v3(pt, v1); pt += 3;
+		copy_v3_v3(pt, v0); pt += 3;
+		copy_v3_v3(pt, v1); pt += 3;
+		_bl_debug_draw_quads_tot++;
+	}
+}
+static void bl_debug_draw(void)
+{
+	if (_bl_debug_draw_quads_tot) {
+		int i;
+		cpack(0x00FF0000);
+		glBegin(GL_LINE_LOOP);
+		for(i=0; i < _bl_debug_draw_quads_tot; i ++) {
+			glVertex3fv(_bl_debug_draw_quads[i][0]);
+			glVertex3fv(_bl_debug_draw_quads[i][1]);
+			glVertex3fv(_bl_debug_draw_quads[i][2]);
+			glVertex3fv(_bl_debug_draw_quads[i][3]);
+		}
+		glEnd();
+	}
+}
+#endif




More information about the Bf-blender-cvs mailing list