[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [46684] trunk/blender/source/blender/ editors/space_view3d: fix [#31474] Crash when object has parent and dupli_type == 'FRAMES' and show_x_ray, show_transparent are set to True

Campbell Barton ideasman42 at gmail.com
Wed May 16 10:42:50 CEST 2012


Revision: 46684
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46684
Author:   campbellbarton
Date:     2012-05-16 08:42:50 +0000 (Wed, 16 May 2012)
Log Message:
-----------
fix [#31474] Crash when object has parent and dupli_type == 'FRAMES' and show_x_ray, show_transparent are set to True

dupli objects should never be added to after-draw, added an assert to ensure this (and make fixing such bugs easier).

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

Modified: trunk/blender/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/drawobject.c	2012-05-16 08:36:09 UTC (rev 46683)
+++ trunk/blender/source/blender/editors/space_view3d/drawobject.c	2012-05-16 08:42:50 UTC (rev 46684)
@@ -3603,21 +3603,23 @@
 		}
 	}
 	
-	/* GPU_begin_object_materials checked if this is needed */
-	if (do_alpha_after) {
-		if (ob->dtx & OB_DRAWXRAY) {
-			add_view3d_after(&v3d->afterdraw_xraytransp, base, flag);
+	if ((flag & DRAW_PICKING) == 0 && (base->flag & OB_FROMDUPLI) == 0) {
+		/* GPU_begin_object_materials checked if this is needed */
+		if (do_alpha_after) {
+			if (ob->dtx & OB_DRAWXRAY) {
+				add_view3d_after(&v3d->afterdraw_xraytransp, base, flag);
+			}
+			else {
+				add_view3d_after(&v3d->afterdraw_transp, base, flag);
+			}
 		}
-		else {
-			add_view3d_after(&v3d->afterdraw_transp, base, flag);
+		else if (ob->dtx & OB_DRAWXRAY && ob->dtx & OB_DRAWTRANSP) {
+			/* special case xray+transp when alpha is 1.0, without this the object vanishes */
+			if (v3d->xray == 0 && v3d->transp == 0) {
+				add_view3d_after(&v3d->afterdraw_xray, base, flag);
+			}
 		}
 	}
-	else if (ob->dtx & OB_DRAWXRAY && ob->dtx & OB_DRAWTRANSP) {
-		/* special case xray+transp when alpha is 1.0, without this the object vanishes */
-		if (v3d->xray == 0 && v3d->transp == 0) {
-			add_view3d_after(&v3d->afterdraw_xray, base, flag);
-		}
-	}
 	
 	return retval;
 }

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_draw.c	2012-05-16 08:36:09 UTC (rev 46683)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_draw.c	2012-05-16 08:42:50 UTC (rev 46684)
@@ -1715,6 +1715,7 @@
 void add_view3d_after(ListBase *lb, Base *base, int flag)
 {
 	View3DAfter *v3da = MEM_callocN(sizeof(View3DAfter), "View 3d after");
+	BLI_assert((base->flag & OB_FROMDUPLI) == 0);
 	BLI_addtail(lb, v3da);
 	v3da->base = base;
 	v3da->flag = flag;




More information about the Bf-blender-cvs mailing list