Commit: 523c9315937554782224007b0799ddbda1ac70d8
Author: Julian Eisel
Date:   Thu Aug 4 04:00:20 2016 +0200
Branches: temp_localview_split
https://developer.blender.org/rB523c9315937554782224007b0799ddbda1ac70d8

Add more checks for new local view

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

M       source/blender/blenkernel/BKE_screen.h
M       source/blender/blenkernel/BKE_utildefines.h
M       source/blender/blenkernel/intern/screen.c
M       source/blender/blenloader/intern/readfile.c
M       source/blender/editors/gpencil/gpencil_convert.c
M       source/blender/editors/object/object_add.c
M       source/blender/editors/render/render_internal.c
M       source/blender/editors/screen/screen_context.c
M       source/blender/editors/sculpt_paint/paint_image_proj.c
M       source/blender/render/intern/source/envmap.c

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

diff --git a/source/blender/blenkernel/BKE_screen.h 
b/source/blender/blenkernel/BKE_screen.h
index 14e978b..35cb8c9 100644
--- a/source/blender/blenkernel/BKE_screen.h
+++ b/source/blender/blenkernel/BKE_screen.h
@@ -292,13 +292,11 @@ struct ScrArea *BKE_screen_find_area_from_space(struct 
bScreen *sc, struct Space
 struct ScrArea *BKE_screen_find_big_area(struct bScreen *sc, const int 
spacetype, const short min);
 struct ScrArea *BKE_screen_find_area_xy(struct bScreen *sc, const int 
spacetype, int x, int y);
 
-unsigned int BKE_screen_view3d_layer_active_ex(
-        const struct View3D *v3d, const struct Scene *scene, bool use_localvd) 
ATTR_NONNULL(2);
-unsigned int BKE_screen_view3d_layer_active(
-        const struct View3D *v3d, const struct Scene *scene) ATTR_NONNULL(2);
-
+unsigned int BKE_screen_view3d_layer_active(const struct View3D *v3d, const 
struct Scene *scene) ATTR_NONNULL(2);
 unsigned int BKE_screen_view3d_layer_all(const struct bScreen *sc) 
ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1);
 
+struct LocalViewInfo BKE_screen_view3d_localview_all(const struct bScreen *sc) 
ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1);
+
 void BKE_screen_view3d_sync(struct View3D *v3d, struct Scene *scene);
 void BKE_screen_view3d_scene_sync(struct bScreen *sc);
 void BKE_screen_view3d_main_sync(ListBase *screen_lb, struct Scene *scene);
diff --git a/source/blender/blenkernel/BKE_utildefines.h 
b/source/blender/blenkernel/BKE_utildefines.h
index 64605a6..a6587d7 100644
--- a/source/blender/blenkernel/BKE_utildefines.h
+++ b/source/blender/blenkernel/BKE_utildefines.h
@@ -51,6 +51,10 @@ extern "C" {
 #define BKE_LOCALVIEW_IS_OBJECT_VISIBLE(v3d, ob) \
        (((v3d)->localviewd == NULL) || 
BKE_LOCALVIEW_INFO_CMP((v3d)->localviewd->info, (ob)->localview))
 
+/* Check if info defines a visible local view */
+#define BKE_LOCALVIEW_IS_VALID(info) \
+       ((info).viewbits != 0)
+
 /* Adjust local view info of ob to be visible if v3d is in local view */
 #define BKE_LOCALVIEW_OBJECT_ASSIGN(v3d, ob) \
        if ((v3d)->localviewd) { \
diff --git a/source/blender/blenkernel/intern/screen.c 
b/source/blender/blenkernel/intern/screen.c
index 5166123..cc33ac0 100644
--- a/source/blender/blenkernel/intern/screen.c
+++ b/source/blender/blenkernel/intern/screen.c
@@ -508,7 +508,7 @@ ScrArea *BKE_screen_find_area_xy(bScreen *sc, const int 
spacetype, int x, int y)
 /**
  * Utility function to get the active layer to use when adding new objects.
  */
-unsigned int BKE_screen_view3d_layer_active_ex(const View3D *v3d, const Scene 
*scene, bool use_localvd)
+unsigned int BKE_screen_view3d_layer_active(const View3D *v3d, const Scene 
*scene)
 {
        unsigned int lay;
        if ((v3d == NULL) || (v3d->scenelock && !v3d->localviewd)) {
@@ -518,18 +518,8 @@ unsigned int BKE_screen_view3d_layer_active_ex(const 
View3D *v3d, const Scene *s
                lay = v3d->layact;
        }
 
-       if (use_localvd) {
-               if (v3d && v3d->localviewd) {
-                       lay |= v3d->lay;
-               }
-       }
-
        return lay;
 }
-unsigned int BKE_screen_view3d_layer_active(const struct View3D *v3d, const 
struct Scene *scene)
-{
-       return BKE_screen_view3d_layer_active_ex(v3d, scene, true);
-}
 
 /**
  * Accumulate all visible layers on this screen.
@@ -548,6 +538,22 @@ unsigned int BKE_screen_view3d_layer_all(const bScreen *sc)
        return lay;
 }
 
+LocalViewInfo BKE_screen_view3d_localview_all(const bScreen *sc)
+{
+       LocalViewInfo views = {0};
+
+       for (ScrArea *sa = sc->areabase.first; sa; sa = sa->next) {
+               if (sa->spacetype == SPACE_VIEW3D) {
+                       View3D *v3d = sa->spacedata.first;
+                       if (v3d->localviewd) {
+                               views.viewbits |= 
v3d->localviewd->info.viewbits;
+                       }
+               }
+       }
+
+       return views;
+}
+
 void BKE_screen_view3d_sync(View3D *v3d, struct Scene *scene)
 {
        int bit;
diff --git a/source/blender/blenloader/intern/readfile.c 
b/source/blender/blenloader/intern/readfile.c
index 38db067..bbcf1c6 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -144,6 +144,7 @@
 #include "BKE_sequencer.h"
 #include "BKE_outliner_treehash.h"
 #include "BKE_sound.h"
+#include "BKE_utildefines.h"
 
 
 #include "NOD_common.h"
@@ -9665,6 +9666,12 @@ static void give_base_to_objects(Main *mainvar, Scene 
*scene, View3D *v3d, Libra
                                if (active_lay) {
                                        ob->lay = active_lay;
                                }
+                               /* Add to localview (only if FILE_ACTIVELAY, 
this is how it was
+                                * done when local view was using Object.lay 
bitfield) */
+                               if (v3d && (flag & FILE_ACTIVELAY)) {
+                                       /* macro checks if v3d is in local view 
*/
+                                       BKE_LOCALVIEW_OBJECT_ASSIGN(v3d, ob);
+                               }
 
                                base->lay = ob->lay;
                                base->object = ob;
@@ -9698,6 +9705,10 @@ static void give_base_to_groups(
                        ob = BKE_object_add_only_object(mainvar, OB_EMPTY, 
group->id.name + 2);
                        ob->type = OB_EMPTY;
                        ob->lay = active_lay;
+                       if (v3d) {
+                               /* Add to localview (macro checks if v3d is in 
local view) */
+                               BKE_LOCALVIEW_OBJECT_ASSIGN(v3d, ob);
+                       }
 
                        /* assign the base */
                        base = BKE_scene_base_add(scene, ob);
@@ -9795,6 +9806,12 @@ static void link_object_postprocess(ID *id, Scene 
*scene, View3D *v3d, const sho
                /* link at active layer (view3d if available in context, else 
scene one */
                if (flag & FILE_ACTIVELAY) {
                        ob->lay = BKE_screen_view3d_layer_active(v3d, scene);
+                       /* Add to localview (only if FILE_ACTIVELAY, this is 
how it was
+                        * done when local view was using Object.lay bitfield) 
*/
+                       if (v3d) {
+                               /* macro checks if v3d is in local view */
+                               BKE_LOCALVIEW_OBJECT_ASSIGN(v3d, ob);
+                       }
                }
 
                ob->mode = OB_MODE_OBJECT;
diff --git a/source/blender/editors/gpencil/gpencil_convert.c 
b/source/blender/editors/gpencil/gpencil_convert.c
index c47985e..8fc71ef 100644
--- a/source/blender/editors/gpencil/gpencil_convert.c
+++ b/source/blender/editors/gpencil/gpencil_convert.c
@@ -68,6 +68,7 @@
 #include "BKE_scene.h"
 #include "BKE_screen.h"
 #include "BKE_tracking.h"
+#include "BKE_utildefines.h"
 
 #include "UI_interface.h"
 
@@ -1199,6 +1200,10 @@ static void gp_layer_to_curve(bContext *C, ReportList 
*reports, bGPdata *gpd, bG
        /* set the layer and select */
        base_new->lay  = ob->lay  = base_orig ? base_orig->lay : 
BKE_screen_view3d_layer_active(v3d, scene);
        base_new->flag = ob->flag = base_new->flag | SELECT;
+       if (v3d) {
+               /* Add to localview (macro checks if v3d is in local view) */
+               BKE_LOCALVIEW_OBJECT_ASSIGN(v3d, ob);
+       }
 }
 
 /* --- */
diff --git a/source/blender/editors/object/object_add.c 
b/source/blender/editors/object/object_add.c
index 5dae51a..3a13b00 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -336,7 +336,7 @@ bool ED_object_add_generic_get_opts(bContext *C, wmOperator 
*op, const char view
                }
                else {
                        Scene *scene = CTX_data_scene(C);
-                       *layer = BKE_screen_view3d_layer_active_ex(v3d, scene, 
false);
+                       *layer = BKE_screen_view3d_layer_active(v3d, scene);
                        for (a = 0; a < 20; a++) {
                                layer_values[a] = (*layer & (1 << a)) != 0;
                        }
@@ -2261,6 +2261,10 @@ static int add_named_exec(bContext *C, wmOperator *op)
 
        basen->lay = basen->object->lay = BKE_screen_view3d_layer_active(v3d, 
scene);
        basen->object->restrictflag &= ~OB_RESTRICT_VIEW;
+       if (v3d) {
+               /* Add to localview (macro checks if v3d is in local view) */
+               BKE_LOCALVIEW_OBJECT_ASSIGN(v3d, basen->object);
+       }
 
        if (event) {
                ARegion *ar = CTX_wm_region(C);
diff --git a/source/blender/editors/render/render_internal.c 
b/source/blender/editors/render/render_internal.c
index ef980ce..1bb5270 100644
--- a/source/blender/editors/render/render_internal.c
+++ b/source/blender/editors/render/render_internal.c
@@ -65,6 +65,7 @@
 #include "BKE_sequencer.h"
 #include "BKE_screen.h"
 #include "BKE_scene.h"
+#include "BKE_utildefines.h"
 
 #include "WM_api.h"
 #include "WM_types.h"
@@ -293,7 +294,7 @@ static int screen_render_exec(bContext *C, wmOperator *op)
        View3D *v3d = CTX_wm_view3d(C);
        Main *mainp = CTX_data_main(C);
        LocalViewInfo *localview = (v3d && v3d->localviewd) ? 
&v3d->localviewd->info : NULL;
-       unsigned int lay_override;
+       const unsigned int lay_override = (v3d && v3d->lay != scene->lay) ? 
v3d->lay : 0;
        const bool is_animation = RNA_boolean_get(op->ptr, "animation");
        const bool is_write_still = RNA_boolean_get(op->ptr, "write_still");
        struct Object *camera_override = v3d ? V3D_CAMERA_LOCAL(v3d) : NULL;
@@ -307,7 +308,6 @@ static int screen_render_exec(bContext *C, wmOperator *op)
        }
 
        re = RE_NewRender(scene->id.name);
-       lay_override = (v3d && v3d->lay != scene->lay) ? v3d->lay : 0;
 
        G.is_break = false;
        RE_test_break_cb(re, NULL, render_break);
@@ -782,7 +782,7 @@ static void screen_render_cancel(bContext *C, wmOperator 
*op)
        WM_jobs_kill_type(wm, scene, WM_JOB_TYPE_RENDER);
 }
 
-static void clean_viewport_memory(Main *bmain, Scene *scene, int renderlay)
+static void clean_viewport_memory(Main *bmain, Scene *scene, LocalViewInfo 
*localview, int renderlay)
 {
        Object *object;
        Scene *sce_iter;
@@ -793,7 +793,7 @@ static void clean_viewport_memory(Main *bmain, Scene 
*scene, int renderlay)
        }
 
        for (SETLOOPER(scene, sce_iter, base)) {
-               if ((base->lay & renderlay) == 0) {
+               if ((base->lay & renderlay) == 0 || 
BKE_LOCALVIEW_INFO_CMP(*localview, base->object->localview) == 0) {
                        continue;
                }
                if (RE_allow_render_generic_object(base->object)) {
@@ -945,7 +945,7 @@ static int screen_render_invoke(bContext *C, wmOperator 
*op, const wmEvent *even
                rj->interface_locked = true;
 
                /* Clean memory used by viewport? */
-               clean_viewport_memory(rj->main, scene, renderlay);
+               clean_viewport_memory(rj->main, scene, &v3d->localviewd->info, 
renderlay);
        }
 
        /* setup job */
diff --git a/source/blender/editors/screen/screen_context.c 
b/source/blender/editors/screen/screen_context.c
index f61ad34..1dcd569 100644
--- a/source/blender/editors/screen/screen_context.c
+++ b/source/blender/editors/screen/screen_context.c
@@ -49,6 +49,7 @@
 #include "BKE_gpencil.h"
 #include "BKE_screen.h"
 #include "BKE_sequencer.h"
+#include "BKE_utildefines.h"
 
 #include "RNA_access.h"
 
@@ -72,6 +73,15 @@ static unsigned int context_layers(bScreen *sc, Scene 
*scene, ScrArea *sa_ctx)
        return scene->lay;
 }
 
+static LocalViewInfo context_localviews(bScreen *sc, ScrArea

@@ 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