[Bf-blender-cvs] [dacc6d4b029] blender2.8: Object Mode: remove Scene.obedit in draw manager

Campbell Barton noreply at git.blender.org
Tue Feb 13 08:15:59 CET 2018


Commit: dacc6d4b0290050034eaf9290c8542343b67b129
Author: Campbell Barton
Date:   Tue Feb 13 18:15:47 2018 +1100
Branches: blender2.8
https://developer.blender.org/rBdacc6d4b0290050034eaf9290c8542343b67b129

Object Mode: remove Scene.obedit in draw manager

Part of larger change to remove this variable entirely.

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

M	source/blender/draw/engines/clay/clay_engine.c
M	source/blender/draw/engines/eevee/eevee_materials.c
M	source/blender/draw/intern/DRW_render.h
M	source/blender/draw/intern/draw_manager.c
M	source/blender/draw/modes/edit_curve_mode.c
M	source/blender/draw/modes/edit_lattice_mode.c
M	source/blender/draw/modes/edit_mesh_mode.c
M	source/blender/draw/modes/edit_metaball_mode.c
M	source/blender/draw/modes/edit_text_mode.c
M	source/blender/draw/modes/object_mode.c

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

diff --git a/source/blender/draw/engines/clay/clay_engine.c b/source/blender/draw/engines/clay/clay_engine.c
index 50c6790f817..4b554f776a6 100644
--- a/source/blender/draw/engines/clay/clay_engine.c
+++ b/source/blender/draw/engines/clay/clay_engine.c
@@ -770,11 +770,7 @@ static void clay_cache_populate_particles(void *vedata, Object *ob)
 	CLAY_StorageList *stl = ((CLAY_Data *)vedata)->stl;
 	const DRWContextState *draw_ctx = DRW_context_state_get();
 
-
-	Scene *scene = draw_ctx->scene;
-	Object *obedit = scene->obedit;
-
-	if (ob != obedit) {
+	if (ob != draw_ctx->object_edit) {
 		for (ParticleSystem *psys = ob->particlesystem.first; psys; psys = psys->next) {
 			if (psys_check_enabled(ob, psys, false)) {
 				ParticleSettings *part = psys->part;
diff --git a/source/blender/draw/engines/eevee/eevee_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c
index 9754bfbd78b..71564be496a 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -1377,7 +1377,7 @@ void EEVEE_materials_cache_populate(EEVEE_Data *vedata, EEVEE_ViewLayerData *sld
 	}
 
 	if (ob->type == OB_MESH) {
-		if (ob != draw_ctx->scene->obedit) {
+		if (ob != draw_ctx->object_edit) {
 			material_hash = stl->g_data->hair_material_hash;
 
 			for (ModifierData *md = ob->modifiers.first; md; md = md->next) {
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index 8eb10ed5a14..64a907bf385 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -463,7 +463,7 @@ typedef struct DRWContextState {
 	struct Scene *scene;    /* 'CTX_data_scene(C)' */
 	struct ViewLayer *view_layer;  /* 'CTX_data_view_layer(C)' */
 
-	/* Use 'scene->obedit' for edit-mode */
+	/* Use 'object_edit' for edit-mode */
 	struct Object *obact;   /* 'OBACT' */
 
 	struct RenderEngineType *engine_type;
@@ -476,7 +476,11 @@ typedef struct DRWContextState {
 	 * May be NULL when used for selection or depth buffer. */
 	const struct bContext *evil_C;
 
+	/* ---- */
+
+	/* Cache: initialized by 'drw_context_state_init'. */
 	struct Object *object_pose;
+	struct Object *object_edit;
 
 } DRWContextState;
 
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index 45ad9853d20..2669d733558 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -2210,13 +2210,10 @@ struct DRWTextStore *DRW_text_cache_ensure(void)
 
 bool DRW_object_is_renderable(Object *ob)
 {
-	Scene *scene = DST.draw_ctx.scene;
-	Object *obedit = scene->obedit;
-
 	BLI_assert(BKE_object_is_visible(ob, OB_VISIBILITY_CHECK_UNKNOWN_RENDER_MODE));
 
 	if (ob->type == OB_MESH) {
-		if (ob == obedit) {
+		if (ob == DST.draw_ctx.object_edit) {
 			IDProperty *props = BKE_layer_collection_engine_evaluated_get(ob, COLLECTION_MODE_EDIT, "");
 			bool do_show_occlude_wire = BKE_collection_engine_property_value_get_bool(props, "show_occlude_wire");
 			if (do_show_occlude_wire) {
@@ -2601,6 +2598,30 @@ static void drw_viewport_cache_resize(void)
 	DRW_instance_data_list_resize(DST.idatalist);
 }
 
+
+/* Not a viewport variable, we could split this out. */
+static void drw_context_state_init(void)
+{
+	/* Edit object. */
+	if (DST.draw_ctx.object_mode & OB_MODE_EDIT) {
+		DST.draw_ctx.object_edit = DST.draw_ctx.obact;
+	}
+	else {
+		DST.draw_ctx.object_edit = NULL;
+	}
+
+	/* Pose object. */
+	if (DST.draw_ctx.object_mode & OB_MODE_POSE) {
+		DST.draw_ctx.object_pose = DST.draw_ctx.obact;
+	}
+	else if (DST.draw_ctx.object_mode & OB_MODE_WEIGHT_PAINT) {
+		DST.draw_ctx.object_pose = BKE_object_pose_armature_get(DST.draw_ctx.obact);
+	}
+	else {
+		DST.draw_ctx.object_pose = NULL;
+	}
+}
+
 /* It also stores viewport variable to an immutable place: DST
  * This is because a cache uniform only store reference
  * to its value. And we don't want to invalidate the cache
@@ -2608,7 +2629,6 @@ static void drw_viewport_cache_resize(void)
 static void drw_viewport_var_init(void)
 {
 	RegionView3D *rv3d = DST.draw_ctx.rv3d;
-
 	/* Refresh DST.size */
 	if (DST.viewport) {
 		int size[2];
@@ -2664,8 +2684,8 @@ static void drw_viewport_var_init(void)
 	DST.backface = GL_CW;
 	glFrontFace(DST.frontface);
 
-	if (DST.draw_ctx.scene->obedit) {
-		ED_view3d_init_mats_rv3d(DST.draw_ctx.scene->obedit, rv3d);
+	if (DST.draw_ctx.object_edit) {
+		ED_view3d_init_mats_rv3d(DST.draw_ctx.object_edit, rv3d);
 	}
 
 	/* Alloc array of texture reference. */
@@ -2678,19 +2698,6 @@ static void drw_viewport_var_init(void)
 
 	memset(viewport_matrix_override.override, 0x0, sizeof(viewport_matrix_override.override));
 	memset(DST.common_instance_data, 0x0, sizeof(DST.common_instance_data));
-
-	/* Not a viewport variable, we could split this out. */
-	{
-		if (DST.draw_ctx.object_mode & OB_MODE_POSE) {
-			DST.draw_ctx.object_pose = DST.draw_ctx.obact;
-		}
-		else if (DST.draw_ctx.object_mode & OB_MODE_WEIGHT_PAINT) {
-			DST.draw_ctx.object_pose = BKE_object_pose_armature_get(DST.draw_ctx.obact);
-		}
-		else {
-			DST.draw_ctx.object_pose = NULL;
-		}
-	}
 }
 
 void DRW_viewport_matrix_get(float mat[4][4], DRWViewportMatrixType type)
@@ -3185,10 +3192,10 @@ static void drw_engines_enable_external(void)
 	use_drw_engine(DRW_engine_viewport_external_type.draw_engine);
 }
 
-static void drw_engines_enable(const Scene *scene, ViewLayer *view_layer, RenderEngineType *engine_type)
+static void drw_engines_enable(ViewLayer *view_layer, RenderEngineType *engine_type)
 {
 	Object *obact = OBACT(view_layer);
-	const int mode = CTX_data_mode_enum_ex(scene->obedit, obact, DST.draw_ctx.object_mode);
+	const int mode = CTX_data_mode_enum_ex(DST.draw_ctx.object_edit, obact, DST.draw_ctx.object_mode);
 
 	drw_engines_enable_from_engine(engine_type);
 
@@ -3366,7 +3373,7 @@ void DRW_notify_view_update(const DRWUpdateContext *update_ctx)
 		NULL,
 	};
 
-	drw_engines_enable(scene, view_layer, engine_type);
+	drw_engines_enable(view_layer, engine_type);
 
 	for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
 		DrawEngineType *draw_engine = link->data;
@@ -3411,7 +3418,7 @@ void DRW_notify_id_update(const DRWUpdateContext *update_ctx, ID *id)
 	DST.draw_ctx = (DRWContextState){
 		ar, rv3d, v3d, scene, view_layer, OBACT(view_layer), engine_type, depsgraph, OB_MODE_OBJECT, NULL,
 	};
-	drw_engines_enable(scene, view_layer, engine_type);
+	drw_engines_enable(view_layer, engine_type);
 	for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
 		DrawEngineType *draw_engine = link->data;
 		ViewportEngineData *data = DRW_viewport_engine_data_ensure(draw_engine);
@@ -3474,11 +3481,11 @@ void DRW_draw_render_loop_ex(
 	    /* reuse if caller sets */
 	    DST.draw_ctx.evil_C,
 	};
-
+	drw_context_state_init();
 	drw_viewport_var_init();
 
 	/* Get list of enabled engines */
-	drw_engines_enable(scene, view_layer, engine_type);
+	drw_engines_enable(view_layer, engine_type);
 
 	/* Update ubos */
 	DRW_globals_update();
@@ -3651,6 +3658,7 @@ void DRW_render_to_image(RenderEngine *re, struct Depsgraph *depsgraph)
 	DST.draw_ctx = (DRWContextState){
 	    NULL, NULL, NULL, scene, view_layer, OBACT(view_layer), engine_type, depsgraph, eval_ctx->object_mode, NULL,
 	};
+	drw_context_state_init();
 
 	DST.viewport = GPU_viewport_create();
 	const int size[2] = {(r->size * r->xsch) / 100, (r->size * r->ysch) / 100};
@@ -3723,6 +3731,7 @@ void DRW_draw_select_loop(
 	Scene *scene = DEG_get_evaluated_scene(depsgraph);
 	RenderEngineType *engine_type = RE_engines_find(scene->view_render.engine_id);
 	ViewLayer *view_layer = DEG_get_evaluated_view_layer(depsgraph);
+	Object *obact = OBACT(view_layer);
 #ifndef USE_GPU_SELECT
 	UNUSED_VARS(vc, scene, view_layer, v3d, ar, rect);
 #else
@@ -3737,14 +3746,12 @@ void DRW_draw_select_loop(
 
 	bool use_obedit = false;
 	int obedit_mode = 0;
-	if (scene->obedit && scene->obedit->type == OB_MBALL) {
-		use_obedit = true;
-		obedit_mode = CTX_MODE_EDIT_METABALL;
-	}
-	else if ((scene->obedit && scene->obedit->type == OB_ARMATURE)) {
-		/* if not drawing sketch, draw bones */
-		// if (!BDR_drawSketchNames(vc))
-		{
+	if (object_mode & OB_MODE_EDIT) {
+		if (obact->type == OB_MBALL) {
+			use_obedit = true;
+			obedit_mode = CTX_MODE_EDIT_METABALL;
+		}
+		else if (obact->type == OB_ARMATURE) {
 			use_obedit = true;
 			obedit_mode = CTX_MODE_EDIT_ARMATURE;
 		}
@@ -3773,10 +3780,10 @@ void DRW_draw_select_loop(
 
 	/* Instead of 'DRW_context_state_init(C, &DST.draw_ctx)', assign from args */
 	DST.draw_ctx = (DRWContextState){
-		ar, rv3d, v3d, scene, view_layer, OBACT(view_layer), engine_type, depsgraph, object_mode,
+		ar, rv3d, v3d, scene, view_layer, obact, engine_type, depsgraph, object_mode,
 		(bContext *)NULL,
 	};
-
+	drw_context_state_init();
 	drw_viewport_var_init();
 
 	/* Update ubos */
@@ -3792,7 +3799,7 @@ void DRW_draw_select_loop(
 		drw_engines_cache_init();
 
 		if (use_obedit) {
-			drw_engines_cache_populate(scene->obedit);
+			drw_engines_cache_populate(obact);
 		}
 		else {
 			DEG_OBJECT_ITER(depsgraph, ob, DRW_iterator_mode_get(),
@@ -3876,7 +3883,7 @@ void DRW_draw_depth_loop(
 		ar, rv3d, v3d, scene, view_layer, OBACT(view_layer), engine_type, depsgraph, object_mode,
 		(bContext *)NULL,
 	};
-
+	drw_context_state_init();
 	drw_viewport_var_init();
 
 	/* Update ubos */
diff --git a/source/blender/draw/modes/edit_curve_mode.c b/source/blender/draw/modes/edit_curve_mode.c
index 54a1bd79572..73a4fb1e9e6 100644
--- a/source/blender/draw/modes/edit_curve_mode.c
+++ b/source/blender/draw/modes/edit_curve_mode.c
@@ -229,12 +229,11 @@ static void EDIT_CURVE_cache_populate(void *vedata, Object *ob)
 	EDIT_CURVE_StorageList *stl = ((EDIT_CURVE_Data *)vedata)->stl;
 	const DRWContextState *draw_ctx = DRW_context_state_get();
 	const Scene *scene = draw_ctx->scene;
-	const Object *obedit = scene->obedit;
 
 	UNUSED_VARS(psl, stl);
 
 	if (ob->type == OB_CURVE) {
-		if (ob == obedit) {
+		if (ob == draw_ctx->object_edit) {
 			Curve *cu = ob->data;
 			/* Get geometry cache */
 			struct Gwn_Batch *geom;
diff --git a/source/blender/draw/modes/edit_lattice_mode.

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list