Commit: 1be4153950539216a101fbf0aea7a7b4ca4cdd56
Author: Julian Eisel
Date:   Wed Aug 3 00:44:55 2016 +0200
Branches: temp_localview_split
https://developer.blender.org/rB1be4153950539216a101fbf0aea7a7b4ca4cdd56

Use new local view system for viewport and View3D context iterators

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

M       source/blender/editors/render/render_opengl.c
M       source/blender/editors/space_view3d/drawmesh.c
M       source/blender/editors/space_view3d/drawobject.c
M       source/blender/editors/space_view3d/space_view3d.c
M       source/blender/editors/space_view3d/view3d_draw.c
M       source/blender/editors/space_view3d/view3d_view.c
M       source/blender/gpu/GPU_draw.h
M       source/blender/gpu/intern/gpu_draw.c

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

diff --git a/source/blender/editors/render/render_opengl.c 
b/source/blender/editors/render/render_opengl.c
index 992b827..fca042c 100644
--- a/source/blender/editors/render/render_opengl.c
+++ b/source/blender/editors/render/render_opengl.c
@@ -716,12 +716,7 @@ static bool screen_opengl_render_anim_step(bContext *C, 
wmOperator *op)
        if (CFRA < oglrender->nfra)
                CFRA++;
        while (CFRA < oglrender->nfra) {
-               unsigned int lay = screen_opengl_layers(oglrender);
-
-               if (lay & 0xFF000000)
-                       lay &= 0xFF000000;
-
-               BKE_scene_update_for_newframe(bmain->eval_ctx, bmain, scene, 
lay);
+               BKE_scene_update_for_newframe(bmain->eval_ctx, bmain, scene, 
screen_opengl_layers(oglrender));
                CFRA++;
        }
 
diff --git a/source/blender/editors/space_view3d/drawmesh.c 
b/source/blender/editors/space_view3d/drawmesh.c
index f5289a0..9d3191c 100644
--- a/source/blender/editors/space_view3d/drawmesh.c
+++ b/source/blender/editors/space_view3d/drawmesh.c
@@ -438,7 +438,9 @@ static void draw_textured_begin(Scene *scene, View3D *v3d, 
RegionView3D *rv3d, O
                if (v3d->flag2 & V3D_SHADELESS_TEX)
                        Gtexdraw.is_lit = 0;
                else
-                       Gtexdraw.is_lit = GPU_scene_object_lights(scene, ob, 
v3d->lay, rv3d->viewmat, !rv3d->is_persp);
+                       Gtexdraw.is_lit = GPU_scene_object_lights(
+                                             scene, ob, &v3d->localviewd ? 
&v3d->localviewd->info : NULL,
+                                             v3d->lay, rv3d->viewmat, 
!rv3d->is_persp);
        }
        
        rgba_float_to_uchar(obcol, ob->col);
diff --git a/source/blender/editors/space_view3d/drawobject.c 
b/source/blender/editors/space_view3d/drawobject.c
index 4320699..13af902 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -77,6 +77,7 @@
 #include "BKE_subsurf.h"
 #include "BKE_unit.h"
 #include "BKE_tracking.h"
+#include "BKE_utildefines.h"
 
 #include "BKE_editmesh.h"
 
@@ -8106,7 +8107,11 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, 
Base *base, const short
                        draw_hooks(ob);
 
                /* help lines and so */
-               if (ob != scene->obedit && ob->parent && (ob->parent->lay & 
v3d->lay)) {
+               if ((ob != scene->obedit) &&
+                   (ob->parent != NULL) &&
+                   (ob->parent->lay & v3d->lay) &&
+                   (BKE_LOCALVIEW_IS_OBJECT_VISIBLE(v3d, ob->parent)))
+               {
                        setlinestyle(3);
                        glBegin(GL_LINES);
                        glVertex3fv(ob->obmat[3]);
diff --git a/source/blender/editors/space_view3d/space_view3d.c 
b/source/blender/editors/space_view3d/space_view3d.c
index b934ea4..3caf7ed 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -50,6 +50,7 @@
 #include "BKE_object.h"
 #include "BKE_scene.h"
 #include "BKE_screen.h"
+#include "BKE_utildefines.h"
 
 #include "ED_space_api.h"
 #include "ED_screen.h"
@@ -1297,11 +1298,13 @@ static int view3d_context(const bContext *C, const char 
*member, bContextDataRes
 
                for (base = scene->base.first; base; base = base->next) {
                        if ((base->flag & SELECT) && (base->lay & lay)) {
-                               if ((base->object->restrictflag & 
OB_RESTRICT_VIEW) == 0) {
-                                       if (selected_objects)
-                                               CTX_data_id_list_add(result, 
&base->object->id);
-                                       else
-                                               CTX_data_list_add(result, 
&scene->id, &RNA_ObjectBase, base);
+                               if (!v3d || 
BKE_LOCALVIEW_IS_OBJECT_VISIBLE(v3d, base->object)) {
+                                       if ((base->object->restrictflag & 
OB_RESTRICT_VIEW) == 0) {
+                                               if (selected_objects)
+                                                       
CTX_data_id_list_add(result, &base->object->id);
+                                               else
+                                                       
CTX_data_list_add(result, &scene->id, &RNA_ObjectBase, base);
+                                       }
                                }
                        }
                }
@@ -1317,7 +1320,9 @@ static int view3d_context(const bContext *C, const char 
*member, bContextDataRes
 
                for (base = scene->base.first; base; base = base->next) {
                        if ((base->flag & SELECT) && (base->lay & lay)) {
-                               if ((base->object->restrictflag & 
OB_RESTRICT_VIEW) == 0) {
+                               if ((!v3d || 
BKE_LOCALVIEW_IS_OBJECT_VISIBLE(v3d, base->object)) &&
+                                   (base->object->restrictflag & 
OB_RESTRICT_VIEW) == 0)
+                               {
                                        if (0 == 
BKE_object_is_libdata(base->object)) {
                                                if (selected_editable_objects)
                                                        
CTX_data_id_list_add(result, &base->object->id);
@@ -1338,7 +1343,9 @@ static int view3d_context(const bContext *C, const char 
*member, bContextDataRes
                const bool visible_objects = CTX_data_equals(member, 
"visible_objects");
 
                for (base = scene->base.first; base; base = base->next) {
-                       if (base->lay & lay) {
+                       if ((base->lay & lay) &&
+                           (!v3d || BKE_LOCALVIEW_IS_OBJECT_VISIBLE(v3d, 
base->object)))
+                       {
                                if ((base->object->restrictflag & 
OB_RESTRICT_VIEW) == 0) {
                                        if (visible_objects)
                                                CTX_data_id_list_add(result, 
&base->object->id);
@@ -1358,7 +1365,9 @@ static int view3d_context(const bContext *C, const char 
*member, bContextDataRes
                const bool selectable_objects = CTX_data_equals(member, 
"selectable_objects");
 
                for (base = scene->base.first; base; base = base->next) {
-                       if (base->lay & lay) {
+                       if ((base->lay & lay) &&
+                           (!v3d || BKE_LOCALVIEW_IS_OBJECT_VISIBLE(v3d, 
base->object)))
+                       {
                                if ((base->object->restrictflag & 
OB_RESTRICT_VIEW) == 0 && (base->object->restrictflag & OB_RESTRICT_SELECT) == 
0) {
                                        if (selectable_objects)
                                                CTX_data_id_list_add(result, 
&base->object->id);
@@ -1376,9 +1385,11 @@ static int view3d_context(const bContext *C, const char 
*member, bContextDataRes
                const unsigned int lay = v3d ? v3d->lay : scene->lay;
                if (scene->basact && (scene->basact->lay & lay)) {
                        Object *ob = scene->basact->object;
-                       /* if hidden but in edit mode, we still display, can 
happen with animation */
-                       if ((ob->restrictflag & OB_RESTRICT_VIEW) == 0 || 
(ob->mode & OB_MODE_EDIT))
-                               CTX_data_pointer_set(result, &scene->id, 
&RNA_ObjectBase, scene->basact);
+                       if (!v3d || BKE_LOCALVIEW_IS_OBJECT_VISIBLE(v3d, ob)) {
+                               /* if hidden but in edit mode, we still 
display, can happen with animation */
+                               if ((ob->restrictflag & OB_RESTRICT_VIEW) == 0 
|| (ob->mode & OB_MODE_EDIT))
+                                       CTX_data_pointer_set(result, 
&scene->id, &RNA_ObjectBase, scene->basact);
+                       }
                }
                
                return 1;
@@ -1389,8 +1400,10 @@ static int view3d_context(const bContext *C, const char 
*member, bContextDataRes
                const unsigned int lay = v3d ? v3d->lay : scene->lay;
                if (scene->basact && (scene->basact->lay & lay)) {
                        Object *ob = scene->basact->object;
-                       if ((ob->restrictflag & OB_RESTRICT_VIEW) == 0 || 
(ob->mode & OB_MODE_EDIT))
-                               CTX_data_id_pointer_set(result, 
&scene->basact->object->id);
+                       if (!v3d || BKE_LOCALVIEW_IS_OBJECT_VISIBLE(v3d, ob)) {
+                               if ((ob->restrictflag & OB_RESTRICT_VIEW) == 0 
|| (ob->mode & OB_MODE_EDIT))
+                                       CTX_data_id_pointer_set(result, 
&scene->basact->object->id);
+                       }
                }
                
                return 1;
diff --git a/source/blender/editors/space_view3d/view3d_draw.c 
b/source/blender/editors/space_view3d/view3d_draw.c
index 37d8faf..f0f2b45 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -1412,10 +1412,11 @@ static void backdrawview3d(Scene *scene, wmWindow *win, 
ARegion *ar, View3D *v3d
                ED_view3d_clipping_set(rv3d);
        
        G.f |= G_BACKBUFSEL;
-       
-       if (base && (base->lay & v3d->lay))
+
+       if (base && (base->lay & v3d->lay) && 
BKE_LOCALVIEW_IS_OBJECT_VISIBLE(v3d, base->object)) {
                draw_object_backbufsel(scene, v3d, rv3d, base->object);
-       
+       }
+
        if (rv3d->gpuoffscreen)
                GPU_offscreen_unbind(rv3d->gpuoffscreen, true);
        else
@@ -2401,7 +2402,7 @@ void ED_view3d_draw_depth(Scene *scene, ARegion *ar, 
View3D *v3d, bool alphaover
        if (scene->set) {
                Scene *sce_iter;
                for (SETLOOPER(scene->set, sce_iter, base)) {
-                       if (v3d->lay & base->lay) {
+                       if (v3d->lay & base->lay && 
BKE_LOCALVIEW_IS_OBJECT_VISIBLE(v3d, base->object)) {
                                draw_object(scene, ar, v3d, base, 0);
                                if (base->object->transflag & OB_DUPLI) {
                                        draw_dupli_objects_color(scene, ar, 
v3d, base, dflag_depth, TH_UNDEFINED);
@@ -2411,7 +2412,7 @@ void ED_view3d_draw_depth(Scene *scene, ARegion *ar, 
View3D *v3d, bool alphaover
        }
        
        for (base = scene->base.first; base; base = base->next) {
-               if (v3d->lay & base->lay) {
+               if (v3d->lay & base->lay && 
BKE_LOCALVIEW_IS_OBJECT_VISIBLE(v3d, base->object)) {
                        /* dupli drawing */
                        if (base->object->transflag & OB_DUPLI) {
                                draw_dupli_objects_color(scene, ar, v3d, base, 
dflag_depth, TH_UNDEFINED);
@@ -2798,7 +2799,7 @@ static void view3d_draw_objects(
                const short dflag = DRAW_CONSTCOLOR | DRAW_SCENESET;
                Scene *sce_iter;
                for (SETLOOPER(scene->set, sce_iter, base)) {
-                       if (v3d->lay & base->lay) {
+                       if (v3d->lay & base->lay && 
BKE_LOCALVIEW_IS_OBJECT_VISIBLE(v3d, base->object)) {
                                UI_ThemeColorBlend(TH_WIRE, TH_BACK, 0.6f);
                                draw_object(scene, ar, v3d, base, dflag);
 
@@ -2814,7 +2815,7 @@ static void view3d_draw_objects(
 
        if (draw_offscreen) {
                for (base = scene->base.first; base; base = base->next) {
-                       if (v3d->lay & base->lay) {
+                       if (v3d->lay & base->lay && 
BKE_LOCALVIEW_IS_OBJECT_VISIBLE(v3d, base->object)) {
                                /* dupli drawing */
                                if (base->object->transflag & OB_DUPLI)
                                        draw_dupli_objects(scene, ar, v3d, 
base);
@@ -2843,11 +2844,11 @@ static void view3d_draw_objects(
                }
 
                /* mask out localview */
-               v3d->lay_used = lay_used & ((1 << 20) - 1);
+               v3d->lay_used = lay_used;
 
                /* draw selected and editmode */
                for (base = scene->base.first; base; base = base->next) {
-                       if (v3d->lay & base->lay) {
+                       if (v3d->lay & base->lay && 
BKE_LOCALVIEW_IS_OBJECT_VISIBLE(v3d, base->object)) {
                                if (base->object == scene->obedit || 
(base->flag & SELECT)) {
                                        draw_object(scene, ar, v3d, base, 0);
                                }
diff --git a/source/blender/editors/space_view3d/view3d_view.c 
b/source/blender/editors/space_view3d/view3d_view.c
index 93c56dd..e8ed3e3 100644
--- a/source/blender/editors/space_view3d/view3d_view.c
+++ b/source/blender/editors/space_view3d/view3d_view.c
@@ -1060,8 +1060,7 @@ static void view3d_select_loop(ViewContext *vc, Scene 
*scene, View3D *v3d, ARegi
 
                v3d->xray = true;  /* otherwise it postpones drawing */
                for (base = scene->base.first; base; base = base->next) {
-                       if (base->lay & v3d->lay) {
-
+                       if (base->lay & v3d->lay && 
BKE_LOCALVIEW_IS_OBJECT_VISIBLE(v3d, base->object)) {
                                if ((ba

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to