[Bf-blender-cvs] [523c931] temp_localview_split: Add more checks for new local view
Julian Eisel
noreply at git.blender.org
Thu Aug 4 04:01:18 CEST 2016
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. @@
More information about the Bf-blender-cvs
mailing list