Commit: 55a56a31a03ffba115c326c1061762434a72a690
Author: Campbell Barton
Date:   Fri Mar 10 06:16:15 2017 +1100
Branches: blender2.8
https://developer.blender.org/rB55a56a31a03ffba115c326c1061762434a72a690

Merge branch 'master' into blender2.8

Manually merged viewport xray changes

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



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

diff --cc source/blender/editors/space_view3d/drawobject.c
index bd90f5c79a4,898f155cc92..6852e171f56
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@@ -9131,6 -8174,50 +9131,48 @@@ afterdraw
        ED_view3d_clear_mats_rv3d(rv3d);
  }
  
+ 
+ /**
+  * Drawing for selection picking,
+  * caller must have called 'GPU_select_load_id(base->selcode)' first.
+  */
 -void draw_object_select(Scene *scene, ARegion *ar, View3D *v3d, Base *base, 
const short dflag)
++void draw_object_select(Scene *scene, SceneLayer *sl, ARegion *ar, View3D 
*v3d, Base *base, const short dflag)
+ {
+       BLI_assert(dflag & DRAW_PICKING && dflag & DRAW_CONSTCOLOR);
 -      draw_object(scene, ar, v3d, base, dflag);
++      draw_object(scene, sl, ar, v3d, base, dflag);
+ 
+       /* we draw duplicators for selection too */
+       if ((base->object->transflag & OB_DUPLI)) {
+               ListBase *lb;
+               DupliObject *dob;
+               Base tbase;
+ 
 -              tbase.flag = OB_FROMDUPLI;
++              tbase.flag_legacy = OB_FROMDUPLI;
+               lb = object_duplilist(G.main->eval_ctx, scene, base->object);
+ 
+               for (dob = lb->first; dob; dob = dob->next) {
+                       float omat[4][4];
 -                      char dt;
 -                      short dtx;
+ 
+                       tbase.object = dob->ob;
+                       copy_m4_m4(omat, dob->ob->obmat);
+                       copy_m4_m4(dob->ob->obmat, dob->mat);
+ 
+                       /* extra service: draw the duplicator in drawtype of 
parent */
+                       /* MIN2 for the drawtype to allow bounding box objects 
in groups for lods */
 -                      dt = tbase.object->dt;   tbase.object->dt = 
MIN2(tbase.object->dt, base->object->dt);
 -                      dtx = tbase.object->dtx; tbase.object->dtx = 
base->object->dtx;
++                      char dt = tbase.object->dt;    tbase.object->dt = 
MIN2(tbase.object->dt, base->object->dt);
++                      short dtx = tbase.object->dtx; tbase.object->dtx = 
base->object->dtx;
+ 
 -                      draw_object(scene, ar, v3d, &tbase, dflag);
++                      draw_object(scene, sl, ar, v3d, &tbase, dflag);
+ 
+                       tbase.object->dt = dt;
+                       tbase.object->dtx = dtx;
+ 
+                       copy_m4_m4(dob->ob->obmat, omat);
+               }
+               free_object_duplilist(lb);
+       }
+ }
+ 
  /* ***************** BACKBUF SEL (BBS) ********* */
  
  static void bbs_obmode_mesh_verts__mapFunc(void *userData, int index, const 
float co[3],
diff --cc source/blender/editors/space_view3d/view3d_draw_legacy.c
index 51963778ef8,3fb2761d40e..42ecacd4bfc
--- a/source/blender/editors/space_view3d/view3d_draw_legacy.c
+++ b/source/blender/editors/space_view3d/view3d_draw_legacy.c
@@@ -101,7 -100,7 +101,8 @@@
  #include "GPU_material.h"
  #include "GPU_compositing.h"
  #include "GPU_extensions.h"
 +#include "GPU_immediate.h"
+ #include "GPU_select.h"
  
  #include "view3d_intern.h"  /* own include */
  
@@@ -908,6 -2024,35 +909,35 @@@ static void view3d_draw_xraytransp(Scen
        glDepthMask(GL_TRUE);
  }
  
+ /* clears zbuffer and draws it over,
+  * note that in the select version we don't care about transparent flag as 
with regular drawing */
 -static void view3d_draw_xray_select(Scene *scene, ARegion *ar, View3D *v3d, 
bool *clear)
++static void view3d_draw_xray_select(Scene *scene, SceneLayer *sl, ARegion 
*ar, View3D *v3d, bool *clear)
+ {
+       /* Not ideal, but we need to read from the previous depths before 
clearing
+        * otherwise we could have a function to load the depths after drawing.
+        *
+        * Clearing the depth buffer isn't all that common between drawing 
objects so accept this for now.
+        */
+       if (U.gpu_select_pick_deph) {
+               GPU_select_load_id(-1);
+       }
+ 
+       View3DAfter *v3da;
+       if (*clear && v3d->zbuf) {
+               glClear(GL_DEPTH_BUFFER_BIT);
+               *clear = false;
+       }
+ 
+       v3d->xray = true;
+       while ((v3da = BLI_pophead(&v3d->afterdraw_xray))) {
+               if (GPU_select_load_id(v3da->base->selcol)) {
 -                      draw_object_select(scene, ar, v3d, v3da->base, 
v3da->dflag);
++                      draw_object_select(scene, sl, ar, v3d, v3da->base, 
v3da->dflag);
+               }
+               MEM_freeN(v3da);
+       }
+       v3d->xray = false;
+ }
+ 
  /* *********************** */
  
  /*
@@@ -1311,6 -2517,58 +1341,57 @@@ void ED_view3d_draw_depth(Scene *scene
        U.obcenter_dia = obcenter_dia;
  }
  
+ void ED_view3d_draw_select_loop(
 -        ViewContext *vc, Scene *scene, View3D *v3d, ARegion *ar,
++        ViewContext *vc, Scene *scene, SceneLayer *sl, View3D *v3d, ARegion 
*ar,
+         bool use_obedit_skip, bool use_nearest)
+ {
+       short code = 1;
+       const short dflag = DRAW_PICKING | DRAW_CONSTCOLOR;
+ 
+       if (vc->obedit && vc->obedit->type == OB_MBALL) {
 -              draw_object(scene, ar, v3d, BASACT, dflag);
++              draw_object(scene, sl, ar, v3d, BASACT_NEW, dflag);
+       }
+       else if ((vc->obedit && vc->obedit->type == OB_ARMATURE)) {
+               /* if not drawing sketch, draw bones */
+               if (!BDR_drawSketchNames(vc)) {
 -                      draw_object(scene, ar, v3d, BASACT, dflag);
++                      draw_object(scene, sl, ar, v3d, BASACT_NEW, dflag);
+               }
+       }
+       else {
+               Base *base;
+ 
 -              for (base = scene->base.first; base; base = base->next) {
 -                      if (base->lay & v3d->lay) {
 -
 -                              if ((base->object->restrictflag & 
OB_RESTRICT_SELECT) ||
++              for (base = sl->object_bases.first; base; base = base->next) {
++                      if ((base->flag & BASE_VISIBLED) != 0) {
++                              if (((base->flag & BASE_SELECTABLED) == 0) ||
+                                   (use_obedit_skip && (scene->obedit->data == 
base->object->data)))
+                               {
+                                       base->selcol = 0;
+                               }
+                               else {
+                                       base->selcol = code;
+ 
+                                       if (use_nearest && (base->object->dtx & 
OB_DRAWXRAY)) {
+                                               
ED_view3d_after_add(&v3d->afterdraw_xray, base, dflag);
+                                       }
+                                       else {
+                                               if (GPU_select_load_id(code)) {
 -                                                      
draw_object_select(scene, ar, v3d, base, dflag);
++                                                      draw_object(scene, sl, 
ar, v3d, base, dflag);
+                                               }
+                                       }
+                                       code++;
+                               }
+                       }
+               }
+ 
+               if (use_nearest) {
+                       bool xrayclear = true;
+                       if (v3d->afterdraw_xray.first) {
 -                              view3d_draw_xray_select(scene, ar, v3d, 
&xrayclear);
++                              view3d_draw_xray_select(scene, sl, ar, v3d, 
&xrayclear);
+                       }
+               }
+       }
+ }
+ 
  typedef struct View3DShadow {
        struct View3DShadow *next, *prev;
        GPULamp *lamp;
diff --cc source/blender/editors/space_view3d/view3d_intern.h
index eb961c786af,c2b8d1f8bda..0354b16c10f
--- a/source/blender/editors/space_view3d/view3d_intern.h
+++ b/source/blender/editors/space_view3d/view3d_intern.h
@@@ -144,23 -142,13 +144,25 @@@ void draw_motion_paths_cleanup(View3D *
  
  
  /* drawobject.c */
 -void draw_object(Scene *scene, struct ARegion *ar, View3D *v3d, Base *base, 
const short dflag);
 -void draw_object_select(Scene *scene, ARegion *ar, View3D *v3d, Base *base, 
const short dflag);
 +void draw_object(Scene *scene, struct SceneLayer *sl, struct ARegion *ar, 
View3D *v3d, BaseLegacy *base, const short dflag);
++void draw_object_select(Scene *scene, struct SceneLayer *sl, struct ARegion 
*ar, View3D *v3d, Base *base, const short dflag);
+ 
 -bool draw_glsl_material(Scene *scene, struct Object *ob, View3D *v3d, const 
char dt);
 -void draw_object_instance(Scene *scene, View3D *v3d, RegionView3D *rv3d, 
struct Object *ob, const char dt, int outline);
 +void draw_mesh_object_outline(View3D *v3d, Object *ob, struct DerivedMesh 
*dm);
 +
 +bool draw_glsl_material(Scene *scene, struct SceneLayer *sl, struct Object 
*ob, View3D *v3d, const char dt);
 +void draw_object_instance(Scene *scene, struct SceneLayer *sl, View3D *v3d, 
RegionView3D *rv3d, struct Object *ob, const char dt, int outline, float 
wire_col[4]);
  void draw_object_backbufsel(Scene *scene, View3D *v3d, RegionView3D *rv3d, 
struct Object *ob);
 -void drawaxes(const float viewmat_local[4][4], float size, char drawtype);
 +
 +void draw_object_wire_color(Scene *scene, struct SceneLayer *, Base *base, 
unsigned char r_ob_wire_col[4]);
 +void drawaxes(const float viewmat_local[4][4], float size, char drawtype, 
const unsigned char color[4]);
 +void drawlamp(View3D *v3d, RegionView3D *rv3d, Base *base,
 +              const char dt, const short dflag, const unsigned char 
ob_wire_col[4],
 +              const bool is_obact);
 +void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
 +                const short dflag, const unsigned char ob_wire_col[4]);
 +void drawspeaker(const unsigned char ob_wire_col[3]);
 +void draw_bounding_volume(struct Object *ob, char type, const unsigned char 
ob_wire_col[4]);
 +void draw_rigidbody_shape(struct Object *ob, const unsigned char 
ob_wire_col[4]);
  
  void view3d_cached_text_draw_begin(void);
  void view3d_cached_text_draw_add(const float co[3],
@@@ -207,14 -195,15 +209,18 @@@ void draw_sim_debug_data(Scene *scene, 
  
  /* view3d_draw.c */
  void view3d_main_region_draw(const struct bContext *C, struct ARegion *ar);
 +void view3d_draw_region_info(const struct bContext *C, struct ARegion *ar);
 +
 +/* view3d_draw_legacy.c */
 +void view3d_main_region_draw_legacy(const struct bContext *C, struct ARegion 
*ar);
  void ED_view3d_draw_depth(Scene *scene, struct ARegion *ar, View3D *v3d, bool 
alphaoverride);
  void ED_view3d_draw_depth_gpencil(Scene *scene, ARegion *ar, View3D *v3d);
+ void ED_view3d_draw_select_loop(
 -        ViewContext *vc, Scene *scene, View3D *v3d, ARegion *ar,
++        ViewContext *vc, Scene *scene, struct SceneLayer *sl, View3D *v3d, 
ARegion *ar,
+         bool use_obedit_skip, bool use_nearest);
+ 
 -void ED_view3d_after_add(ListBase *lb, Base *base, const short dflag);\
 +void ED_view3d_after_add(ListBase *lb, BaseLegacy *base, const short dflag);
  
 -void circf(float x, float y, float rad);
  void circ(float x, float y, float rad);
  void view3d_update_depths_rect(struct ARegion *ar, struct ViewDepths *d, 
struct rcti *rect);
  float view3d_depth_near(struct ViewDepths *d);
diff --cc source/blender/editors/space_view3d/view3d_view.c
index bd2071165db,8230a0de6b9..f2d25ddcbd6
--- a/source/blender/editors/space_view3d/view3d_view.c
+++ b/source/blender/editors/space_view3d/view3d_view.c
@@@ -1251,7 -1185,7 +1181,7 @@@ int view3d_opengl_select
        
        GPU_select_begin(buffer, bufsize, &rect, gpu_select_mode, 0);
  
-       view3d_select_loop(vc, scene, sl, v3d, ar, use_obedit_skip);
 -      ED_view3d_draw_select_loop(vc, scene, v3d, ar, use_obedit_skip, 
use_nearest);
++      ED_view3d_draw_select_loop(vc, scene, sl, v3d, ar, use_obedit_skip, 
use_nearest);
  
        hits = GPU_select_end();
        
@@@ -1259,7 -1193,7 +1189,7 @@@
        if (do_passes) {
                GPU_select_begin(b

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to