[Bf-blender-cvs] [cd02cb3] hair_system: Debugging UI for enabling debug draw options directly without build options.

Lukas Tönne noreply at git.blender.org
Fri Aug 8 17:57:30 CEST 2014


Commit: cd02cb389180cef5b73a21a0e2ff813b1af73d47
Author: Lukas Tönne
Date:   Fri Aug 8 17:57:55 2014 +0200
Branches: hair_system
https://developer.blender.org/rBcd02cb389180cef5b73a21a0e2ff813b1af73d47

Debugging UI for enabling debug draw options directly without build
options.

===================================================================

M	release/scripts/startup/bl_ui/properties_data_modifier.py
M	source/blender/blenkernel/BKE_hair.h
M	source/blender/blenkernel/intern/hair.c
M	source/blender/blenkernel/intern/object.c
M	source/blender/editors/space_view3d/drawhair.c
M	source/blender/editors/space_view3d/drawobject.c
M	source/blender/hair/intern/HAIR_solver.cpp
M	source/blender/makesdna/DNA_hair_types.h
M	source/blender/makesdna/DNA_modifier_types.h
M	source/blender/makesrna/intern/rna_modifier.c
M	source/blender/modifiers/intern/MOD_hair.c

===================================================================

diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py
index 7d36122..d9b11f7 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -1258,6 +1258,18 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
         
         col.operator("hair.reset to rest location")
         col.operator("hair.copy_from_particles")
+        
+        col.separator()
+        
+        col.prop(md, "show_debug")
+        col2 = col.column()
+        col2.active = md.show_debug
+        col2.prop(md, "show_debug_contacts")
+        col2.prop(md, "show_debug_size")
+        col2.prop(md, "show_debug_cylinders")
+        col2.prop(md, "show_debug_roots")
+        col2.prop(md, "show_debug_frames")
+        col2.prop(md, "show_debug_smoothing")
 
 
 if __name__ == "__main__":  # only for live edit.
diff --git a/source/blender/blenkernel/BKE_hair.h b/source/blender/blenkernel/BKE_hair.h
index ae0b8b7..0cc463b 100644
--- a/source/blender/blenkernel/BKE_hair.h
+++ b/source/blender/blenkernel/BKE_hair.h
@@ -34,6 +34,7 @@
 struct HairSystem;
 struct HairCurve;
 struct HairPoint;
+struct HairDebugData;
 
 struct HairSystem *BKE_hairsys_new(void);
 void BKE_hairsys_free(struct HairSystem *hsys);
@@ -50,4 +51,6 @@ struct HairPoint *BKE_hair_point_insert_multi(struct HairSystem *hsys, struct Ha
 void BKE_hair_point_remove(struct HairSystem *hsys, struct HairCurve *hair, struct HairPoint *point);
 void BKE_hair_point_remove_position(struct HairSystem *hsys, struct HairCurve *hair, int pos);
 
+void BKE_hair_debug_data_free(struct HairDebugData *debug_data);
+
 #endif
diff --git a/source/blender/blenkernel/intern/hair.c b/source/blender/blenkernel/intern/hair.c
index 548637b..3f86e84 100644
--- a/source/blender/blenkernel/intern/hair.c
+++ b/source/blender/blenkernel/intern/hair.c
@@ -191,3 +191,14 @@ void BKE_hair_point_remove_position(HairSystem *UNUSED(hsys), HairCurve *hair, i
 	hair->points = npoints;
 	hair->totpoints = ntotpoints;
 }
+
+void BKE_hair_debug_data_free(HairDebugData *debug_data)
+{
+	if (debug_data) {
+		if (debug_data->points)
+			MEM_freeN(debug_data->points);
+		if (debug_data->contacts)
+			MEM_freeN(debug_data->contacts);
+		MEM_freeN(debug_data);
+	}
+}
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index e3f6e7a..02140df 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -3124,28 +3124,26 @@ void BKE_object_sim_tick(Scene *UNUSED(scene), Object *ob, float ctime, float ti
 		if (md->type == eModifierType_Hair) {
 			HairModifierData *hmd = (HairModifierData*) md;
 			
-#if 0
-			HAIR_solver_step(hmd->solver, ctime, timestep);
-#else
-			/* Debug Version
-			 * WARNING: Debugging is not threadsafe atm, crashes with large hair numbers (>1024)!
-			 */
-			float imat[4][4];
-			
-			invert_m4_m4(imat, ob->obmat);
-			
-			if (hmd->debug_data) {
-				if (hmd->debug_data->points)
-					MEM_freeN(hmd->debug_data->points);
-				if (hmd->debug_data->contacts)
-					MEM_freeN(hmd->debug_data->contacts);
+			if (!(hmd->debug_flag & MOD_HAIR_DEBUG_SHOW)) {
+				HAIR_solver_step(hmd->solver, ctime, timestep);
 			}
 			else {
-				hmd->debug_data = MEM_callocN(sizeof(HairDebugData), "hair debug data");
+				float imat[4][4];
+				
+				invert_m4_m4(imat, ob->obmat);
+				
+				if (hmd->debug_data) {
+					if (hmd->debug_data->points)
+						MEM_freeN(hmd->debug_data->points);
+					if (hmd->debug_data->contacts)
+						MEM_freeN(hmd->debug_data->contacts);
+				}
+				else {
+					hmd->debug_data = MEM_callocN(sizeof(HairDebugData), "hair debug data");
+				}
+				
+				HAIR_solver_step_debug(hmd->solver, ctime, timestep, imat, &hmd->debug_data->points, &hmd->debug_data->totpoints, &hmd->debug_data->contacts, &hmd->debug_data->totcontacts);
 			}
-			
-			HAIR_solver_step_debug(hmd->solver, ctime, timestep, imat, &hmd->debug_data->points, &hmd->debug_data->totpoints, &hmd->debug_data->contacts, &hmd->debug_data->totcontacts);
-#endif
 		}
 	}
 }
diff --git a/source/blender/editors/space_view3d/drawhair.c b/source/blender/editors/space_view3d/drawhair.c
index 4e046a5..012d73e 100644
--- a/source/blender/editors/space_view3d/drawhair.c
+++ b/source/blender/editors/space_view3d/drawhair.c
@@ -104,12 +104,12 @@ bool draw_hair_system(Scene *UNUSED(scene), View3D *UNUSED(v3d), ARegion *ar, Ba
 
 /* ---------------- debug drawing ---------------- */
 
-//#define SHOW_POINTS
-//#define SHOW_SIZE
-//#define SHOW_ROOTS
-//#define SHOW_FRAMES
+#define SHOW_POINTS
+#define SHOW_SIZE
+#define SHOW_ROOTS
+#define SHOW_FRAMES
 //#define SHOW_SMOOTHING
-//#define SHOW_CYLINDERS
+#define SHOW_CYLINDERS
 #define SHOW_CONTACTS
 
 static void draw_hair_debug_points(HairSystem *hsys, HAIR_SolverDebugPoint *dpoints, int dtotpoints)
@@ -542,6 +542,7 @@ void draw_hair_debug_info(Scene *UNUSED(scene), View3D *UNUSED(v3d), ARegion *ar
 	RegionView3D *rv3d = ar->regiondata;
 	Object *ob = base->object;
 	HairSystem *hsys = hmd->hairsys;
+	int debug_flag = hmd->debug_flag;
 	HairCurve *hair;
 	int i;
 	int tot_points = 0;
@@ -553,22 +554,28 @@ void draw_hair_debug_info(Scene *UNUSED(scene), View3D *UNUSED(v3d), ARegion *ar
 	glLoadMatrixf(rv3d->viewmat);
 	glMultMatrixf(ob->obmat);
 	
-	draw_hair_debug_size(hsys, imat);
-	draw_hair_debug_roots(hsys, ob->derivedFinal);
+	if (debug_flag & MOD_HAIR_DEBUG_SIZE)
+		draw_hair_debug_size(hsys, imat);
+	if (debug_flag & MOD_HAIR_DEBUG_ROOTS)
+		draw_hair_debug_roots(hsys, ob->derivedFinal);
 	
 	for (hair = hsys->curves, i = 0; i < hsys->totcurves; ++hair, ++i) {
-		draw_hair_curve_debug_smoothing(hsys, hair);
+		if (debug_flag & MOD_HAIR_DEBUG_SMOOTHING)
+			draw_hair_curve_debug_smoothing(hsys, hair);
 		if (hair->totpoints > 1) {
 			tot_points += hair->totpoints;
 			valid_points++;
 		}
 	}
 	
-	draw_hair_debug_cylinders(hsys, tot_points, valid_points);
+	if (debug_flag & MOD_HAIR_DEBUG_CYLINDERS)
+		draw_hair_debug_cylinders(hsys, tot_points, valid_points);
 	
 	if (hmd->debug_data) {
-		draw_hair_debug_frames(hsys, hmd->debug_data->points, hmd->debug_data->totpoints);
-		draw_hair_debug_points(hsys, hmd->debug_data->points, hmd->debug_data->totpoints);
-		draw_hair_debug_contacts(hsys, hmd->debug_data->contacts, hmd->debug_data->totcontacts);
+		if (debug_flag & MOD_HAIR_DEBUG_FRAMES)
+			draw_hair_debug_frames(hsys, hmd->debug_data->points, hmd->debug_data->totpoints);
+//		draw_hair_debug_points(hsys, hmd->debug_data->points, hmd->debug_data->totpoints);
+		if (debug_flag & MOD_HAIR_DEBUG_CONTACTS)
+			draw_hair_debug_contacts(hsys, hmd->debug_data->contacts, hmd->debug_data->totcontacts);
 	}
 }
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index 72306e8..7268b39 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -7649,9 +7649,8 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
 		HairModifierData *hmd = (HairModifierData *)modifiers_findByType(ob, eModifierType_Hair);
 		if (hmd) {
 			draw_hair_system(scene, v3d, ar, base, hmd->hairsys);
-#ifndef NDEBUG
-			draw_hair_debug_info(scene, v3d, ar, base, hmd);
-#endif
+			if (hmd->debug_flag & MOD_HAIR_DEBUG_SHOW)
+				draw_hair_debug_info(scene, v3d, ar, base, hmd);
 		}
 	}
 
diff --git a/source/blender/hair/intern/HAIR_solver.cpp b/source/blender/hair/intern/HAIR_solver.cpp
index e96be0c..09fe365 100644
--- a/source/blender/hair/intern/HAIR_solver.cpp
+++ b/source/blender/hair/intern/HAIR_solver.cpp
@@ -488,7 +488,7 @@ void Solver::step_threaded(float time, float timestep, DebugThreadDataVector *de
 	/* filter and cache Bullet contact information */
 	PointContactCache contacts;
 	cache_point_contacts(contacts);
-	{
+	if (debug_thread_data) {
 		debug_thread_data->push_back(DebugThreadData());
 		DebugThreadData *thread_data = &debug_thread_data->back();
 		for (int i = 0; i < contacts.size(); ++i) {
diff --git a/source/blender/makesdna/DNA_hair_types.h b/source/blender/makesdna/DNA_hair_types.h
index 023ee5b..3f5d878 100644
--- a/source/blender/makesdna/DNA_hair_types.h
+++ b/source/blender/makesdna/DNA_hair_types.h
@@ -81,4 +81,11 @@ typedef struct HairSystem {
 	HairParams params;
 } HairSystem;
 
+typedef struct HairDebugData {
+	struct HAIR_SolverDebugContact *contacts;
+	struct HAIR_SolverDebugPoint *points;
+	int totcontacts;
+	int totpoints;
+} HairDebugData;
+
 #endif
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index 73116d3..4ac7cd8 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -1366,13 +1366,6 @@ enum {
 	MOD_WIREFRAME_CREASE        = (1 << 5),
 };
 
-typedef struct HairDebugData {
-	struct HAIR_SolverDebugContact *contacts;
-	struct HAIR_SolverDebugPoint *points;
-	int totcontacts;
-	int totpoints;
-} HairDebugData;
-
 typedef struct HairModifierData {
 	ModifierData modifier;
 	
@@ -1381,8 +1374,8 @@ typedef struct HairModifierData {
 	struct HAIR_Solver *solver;     /* runtime instance */
 	
 	int flag;
-	int pad;
-	
+
+	int debug_flag;
 	struct HairDebugData *debug_data;
 } HairModifierData;
 
@@ -1390,5 +1383,15 @@ enum {
 	MOD_HAIR_SOLVER_DATA_VALID  = (1 << 0),
 };
 
+enum {
+	MOD_HAIR_DEBUG_SHOW         = (1 << 0),
+	MOD_HAIR_DEBUG_CONTACTS     = (1 << 1),
+	MOD_HAIR_DEBUG_SIZE         = (1 << 2),
+	MOD_HAIR_DEBUG_ROOTS        = (1 << 3),
+	MOD_HAIR_DEBUG_CYLINDERS    = (1 << 4),
+	MOD_HAIR_DEBUG_SMOOTHING    = (1 << 5),
+	MOD_HAIR_DEBUG_FRAMES       = (1 << 6),
+};
+
 
 #endif  /* __DNA_MODIFIER_TYPES_H__ */
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index 0bc4ed8..7e2af33 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -135,6 +135,7 @@ EnumPropertyItem modifier_triangulate_ngon_method_items[] = {
 
 #include "BKE_context.h"
 #include "BKE_depsgraph.h"
+#include "BKE_hair.h"
 #include 

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list