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;

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to