[Bf-blender-cvs] [bd1af1d] gooseberry: Hjalti's Motion Path commit series no 2.

Antony Riakiotakis noreply at git.blender.org
Thu Feb 19 18:44:36 CET 2015


Commit: bd1af1dc8ef590abe63041f2c2abc0c5f8c2c34f
Author: Antony Riakiotakis
Date:   Thu Feb 19 18:44:10 2015 +0100
Branches: gooseberry
https://developer.blender.org/rBbd1af1dc8ef590abe63041f2c2abc0c5f8c2c34f

Hjalti's Motion Path commit series no 2.

Draw motionpaths after scene. They are not really XRays since they don't
require any depth info so add separate list for them. Feature could be a
little more polished to avoid too many state changes but for now just
commit something that works (tm)

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

M	source/blender/blenloader/intern/readfile.c
M	source/blender/editors/space_view3d/drawarmature.c
M	source/blender/editors/space_view3d/drawobject.c
M	source/blender/editors/space_view3d/view3d_draw.c
M	source/blender/makesdna/DNA_view3d_types.h

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

diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 3c5a2dd..6aa31a3 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -6577,6 +6577,7 @@ static bool direct_link_screen(FileData *fd, bScreen *sc)
 				}
 				v3d->localvd = newdataadr(fd, v3d->localvd);
 				BLI_listbase_clear(&v3d->afterdraw_transp);
+				BLI_listbase_clear(&v3d->afterdraw_nodepth);
 				BLI_listbase_clear(&v3d->afterdraw_xray);
 				BLI_listbase_clear(&v3d->afterdraw_xraytransp);
 				v3d->properties_storage = NULL;
diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c
index a02848d..863a2d6 100644
--- a/source/blender/editors/space_view3d/drawarmature.c
+++ b/source/blender/editors/space_view3d/drawarmature.c
@@ -2315,7 +2315,7 @@ void draw_pose_paths(Scene *scene, View3D *v3d, ARegion *ar, Object *ob)
 	
 	/* setup drawing environment for paths */
 	draw_motion_paths_init(v3d, ar);
-	
+
 	/* draw paths where they exist and they releated bone is visible */
 	for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) {
 		if ((pchan->bone->layer & arm->layer) && (pchan->mpath))
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index a77a114..4627d28 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -7828,16 +7828,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
 	
 	/* draw motion paths (in view space) */
 	if (ob->mpath && (!render_override || show_motionpaths)) {
-		bAnimVizSettings *avs = &ob->avs;
-		
-		/* setup drawing environment for paths */
-		draw_motion_paths_init(v3d, ar);
-		
-		/* draw motion path for object */
-		draw_motion_path_instance(scene, ob, NULL, avs, ob->mpath);
-		
-		/* cleanup after drawing */
-		draw_motion_paths_cleanup(v3d);
+		ED_view3d_after_add(&v3d->afterdraw_nodepth, base, 0);
 	}
 
 	/* which wire color */
@@ -8050,7 +8041,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
 				}
 				/* draw motion paths if forced */
 				if (show_motionpaths && !(dflag & DRAW_SCENESET)) {
-					draw_pose_paths(scene, v3d, ar, ob);
+					ED_view3d_after_add(&v3d->afterdraw_nodepth, base, 0);
 				}
 				break;
 			default:
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index 9244887..401530f 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -2003,6 +2003,43 @@ static void view3d_draw_xraytransp(Scene *scene, ARegion *ar, View3D *v3d, const
 	glDepthMask(GL_TRUE);
 }
 
+static void view3d_draw_nodepth(Scene *scene, ARegion *ar, View3D *v3d)
+{
+	View3DAfter *v3da, *next;
+
+	RegionView3D *rv3d = ar->regiondata;
+
+	glDepthMask(GL_FALSE);
+
+	/* setup drawing environment for paths */
+
+	for (v3da = v3d->afterdraw_nodepth.first; v3da; v3da = next) {
+		Object *ob = v3da->base->object;
+		next = v3da->next;
+
+		ED_view3d_init_mats_rv3d_gl(ob, rv3d);
+		view3d_cached_text_draw_begin();
+		if (ob->type == OB_MESH) {
+			bAnimVizSettings *avs = &ob->avs;
+			/* draw motion path for object */
+			draw_motion_paths_init(v3d, ar);
+			draw_motion_path_instance(scene, ob, NULL, avs, ob->mpath);
+			draw_motion_paths_cleanup(v3d);
+		}
+		else if (ob->type == OB_ARMATURE) {
+			draw_pose_paths(scene, v3d, ar, ob);
+		}
+		view3d_cached_text_draw_end(v3d, ar, 1, NULL);
+		ED_view3d_clear_mats_rv3d(rv3d);
+
+		BLI_remlink(&v3d->afterdraw_nodepth, v3da);
+		MEM_freeN(v3da);
+	}
+
+	/* cleanup after drawing */
+	glDepthMask(GL_TRUE);
+}
+
 /* *********************** */
 
 /*
@@ -2862,6 +2899,8 @@ static void view3d_draw_objects(
 	if (v3d->afterdraw_xray.first)       view3d_draw_xray(scene, ar, v3d, &xrayclear);
 	if (v3d->afterdraw_xraytransp.first) view3d_draw_xraytransp(scene, ar, v3d, xrayclear);
 
+	if (v3d->afterdraw_nodepth.first)    view3d_draw_nodepth(scene, ar, v3d);
+
 	if (fx && do_composite_xray) {
 		GPU_fx_compositor_XRay_resolve(fx);
 	}
diff --git a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h
index d3c11a5..bb006c7 100644
--- a/source/blender/makesdna/DNA_view3d_types.h
+++ b/source/blender/makesdna/DNA_view3d_types.h
@@ -214,6 +214,9 @@ typedef struct View3D {
 	struct ListBase afterdraw_xray;
 	struct ListBase afterdraw_xraytransp;
 
+	/* draw after scene, does not need depth info, so different than xray */
+	struct ListBase afterdraw_nodepth;
+
 	/* drawflags, denoting state */
 	char zbuf, transp, xray;




More information about the Bf-blender-cvs mailing list