[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