[Bf-blender-cvs] [1be4153] temp_localview_split: Use new local view system for viewport and View3D context iterators
Julian Eisel
noreply at git.blender.org
Wed Aug 3 00:49:12 CEST 2016
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. @@
More information about the Bf-blender-cvs
mailing list