[Bf-blender-cvs] [28dfc47cf0b] blender2.8: Object Mode: Add to EvaluationContext & DRWContextState

Campbell Barton noreply at git.blender.org
Tue Feb 6 08:01:06 CET 2018


Commit: 28dfc47cf0b068d0103986424f79eeea59f2039b
Author: Campbell Barton
Date:   Tue Feb 6 16:10:03 2018 +1100
Branches: blender2.8
https://developer.blender.org/rB28dfc47cf0b068d0103986424f79eeea59f2039b

Object Mode: Add to EvaluationContext & DRWContextState

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

M	source/blender/blenkernel/intern/context.c
M	source/blender/depsgraph/DEG_depsgraph.h
M	source/blender/depsgraph/intern/depsgraph_eval.cc
M	source/blender/draw/DRW_engine.h
M	source/blender/draw/engines/clay/clay_engine.c
M	source/blender/draw/engines/eevee/eevee_materials.c
M	source/blender/draw/engines/eevee/eevee_motion_blur.c
M	source/blender/draw/intern/DRW_render.h
M	source/blender/draw/intern/draw_armature.c
M	source/blender/draw/intern/draw_common.c
M	source/blender/draw/intern/draw_common.h
M	source/blender/draw/intern/draw_manager.c
M	source/blender/draw/intern/draw_view.c
M	source/blender/draw/modes/object_mode.c
M	source/blender/draw/modes/pose_mode.c
M	source/blender/editors/space_view3d/view3d_draw.c
M	source/blender/editors/space_view3d/view3d_view.c
M	source/blender/editors/transform/transform_conversions.c
M	source/blender/editors/transform/transform_snap_object.c

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

diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c
index 7d4cbd16331..ba69ecfb7f1 100644
--- a/source/blender/blenkernel/intern/context.c
+++ b/source/blender/blenkernel/intern/context.c
@@ -1273,8 +1273,10 @@ void CTX_data_eval_ctx(const bContext *C, EvaluationContext *eval_ctx)
 
 	Scene *scene = CTX_data_scene(C);
 	ViewLayer *view_layer = CTX_data_view_layer(C);
+	Object *obact = OBACT(view_layer);
 	RenderEngineType *engine_type = CTX_data_engine_type(C);
-	DEG_evaluation_context_init_from_scene(eval_ctx,
-	                                       scene, view_layer, engine_type,
-	                                       DAG_EVAL_VIEWPORT);
+	DEG_evaluation_context_init_from_scene(
+	        eval_ctx,
+	        scene, view_layer, engine_type,
+	        obact ? obact->mode : OB_MODE_OBJECT, DAG_EVAL_VIEWPORT);
 }
diff --git a/source/blender/depsgraph/DEG_depsgraph.h b/source/blender/depsgraph/DEG_depsgraph.h
index 4d3f36b5fba..e3d379666a0 100644
--- a/source/blender/depsgraph/DEG_depsgraph.h
+++ b/source/blender/depsgraph/DEG_depsgraph.h
@@ -83,6 +83,7 @@ typedef enum eEvaluationMode {
 typedef struct EvaluationContext {
 	eEvaluationMode mode;
 	float ctime;
+	short object_mode;
 
 	struct Depsgraph *depsgraph;
 	struct ViewLayer *view_layer;
@@ -213,11 +214,13 @@ struct EvaluationContext *DEG_evaluation_context_new(eEvaluationMode mode);
  */
 void DEG_evaluation_context_init(struct EvaluationContext *eval_ctx,
                                  eEvaluationMode mode);
-void DEG_evaluation_context_init_from_scene(struct EvaluationContext *eval_ctx,
-                                            struct Scene *scene,
-                                            struct ViewLayer *view_layer,
-                                            struct RenderEngineType *engine_type,
-                                            eEvaluationMode mode);
+void DEG_evaluation_context_init_from_scene(
+        struct EvaluationContext *eval_ctx,
+        struct Scene *scene,
+        struct ViewLayer *view_layer,
+        struct RenderEngineType *engine_type,
+        const short object_mode,
+        eEvaluationMode mode);
 
 /* Free evaluation context. */
 void DEG_evaluation_context_free(struct EvaluationContext *eval_ctx);
diff --git a/source/blender/depsgraph/intern/depsgraph_eval.cc b/source/blender/depsgraph/intern/depsgraph_eval.cc
index ad1a850a807..d7d12bc6968 100644
--- a/source/blender/depsgraph/intern/depsgraph_eval.cc
+++ b/source/blender/depsgraph/intern/depsgraph_eval.cc
@@ -76,17 +76,20 @@ void DEG_evaluation_context_init(EvaluationContext *eval_ctx,
 	eval_ctx->mode = mode;
 }
 
-void DEG_evaluation_context_init_from_scene(EvaluationContext *eval_ctx,
-                                            Scene *scene,
-                                            ViewLayer *view_layer,
-                                            RenderEngineType *engine_type,
-                                            eEvaluationMode mode)
+void DEG_evaluation_context_init_from_scene(
+        EvaluationContext *eval_ctx,
+        Scene *scene,
+        ViewLayer *view_layer,
+        RenderEngineType *engine_type,
+        short object_mode,
+        eEvaluationMode mode)
 {
 	DEG_evaluation_context_init(eval_ctx, mode);
 	eval_ctx->depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
 	eval_ctx->view_layer = view_layer;
 	eval_ctx->engine_type = engine_type;
 	eval_ctx->ctime = BKE_scene_frame_get(scene);
+	eval_ctx->object_mode = object_mode;
 }
 
 /* Free evaluation context. */
diff --git a/source/blender/draw/DRW_engine.h b/source/blender/draw/DRW_engine.h
index c4946e2a4b8..30470b227b4 100644
--- a/source/blender/draw/DRW_engine.h
+++ b/source/blender/draw/DRW_engine.h
@@ -91,25 +91,25 @@ void DRW_draw_view(const struct bContext *C);
 void DRW_draw_render_loop_ex(
         struct Depsgraph *depsgraph,
         struct RenderEngineType *engine_type,
-        struct ARegion *ar, struct View3D *v3d,
+        struct ARegion *ar, struct View3D *v3d, const short object_mode,
         const struct bContext *evil_C);
 void DRW_draw_render_loop(
         struct Depsgraph *depsgraph,
-        struct ARegion *ar, struct View3D *v3d);
+        struct ARegion *ar, struct View3D *v3d, const short object_mode);
 void DRW_draw_render_loop_offscreen(
         struct Depsgraph *depsgraph,
         struct RenderEngineType *engine_type,
-        struct ARegion *ar, struct View3D *v3d,
+        struct ARegion *ar, struct View3D *v3d, const short object_mode,
         const bool draw_background,
         struct GPUOffScreen *ofs,
         struct GPUViewport *viewport);
 void DRW_draw_select_loop(
         struct Depsgraph *depsgraph,
-        struct ARegion *ar, struct View3D *v3d,
+        struct ARegion *ar, struct View3D *v3d, const short object_mode,
         bool use_obedit_skip, bool use_nearest, const struct rcti *rect);
 void DRW_draw_depth_loop(
         struct Depsgraph *depsgraph,
-        struct ARegion *ar, struct View3D *v3d);
+        struct ARegion *ar, struct View3D *v3d, const short object_mode);
 
 /* This is here because GPUViewport needs it */
 void DRW_pass_free(struct DRWPass *pass);
diff --git a/source/blender/draw/engines/clay/clay_engine.c b/source/blender/draw/engines/clay/clay_engine.c
index d2bf164efdc..b9a372f802d 100644
--- a/source/blender/draw/engines/clay/clay_engine.c
+++ b/source/blender/draw/engines/clay/clay_engine.c
@@ -820,7 +820,7 @@ static void clay_cache_populate(void *vedata, Object *ob)
 	if (geom) {
 		IDProperty *ces_mode_ob = BKE_layer_collection_engine_evaluated_get(ob, COLLECTION_MODE_OBJECT, "");
 		const bool do_cull = BKE_collection_engine_property_value_get_bool(ces_mode_ob, "show_backface_culling");
-		const bool is_sculpt_mode = is_active && (ob->mode & OB_MODE_SCULPT) != 0;
+		const bool is_sculpt_mode = is_active && (draw_ctx->object_mode & OB_MODE_SCULPT) != 0;
 		const bool is_default_mode_shader = is_sculpt_mode;
 
 		/* Depth Prepass */
diff --git a/source/blender/draw/engines/eevee/eevee_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c
index 88caaf2a75c..9754bfbd78b 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -1241,7 +1241,7 @@ void EEVEE_materials_cache_populate(EEVEE_Data *vedata, EEVEE_ViewLayerData *sld
 	IDProperty *ces_mode_ob = BKE_layer_collection_engine_evaluated_get(ob, COLLECTION_MODE_OBJECT, "");
 	const bool do_cull = BKE_collection_engine_property_value_get_bool(ces_mode_ob, "show_backface_culling");
 	const bool is_active = (ob == draw_ctx->obact);
-	const bool is_sculpt_mode = is_active && (ob->mode & OB_MODE_SCULPT) != 0;
+	const bool is_sculpt_mode = is_active && (draw_ctx->object_mode & OB_MODE_SCULPT) != 0;
 #if 0
 	const bool is_sculpt_mode_draw = is_sculpt_mode && (draw_ctx->v3d->flag2 & V3D_SHOW_MODE_SHADE_OVERRIDE) == 0;
 #else
diff --git a/source/blender/draw/engines/eevee/eevee_motion_blur.c b/source/blender/draw/engines/eevee/eevee_motion_blur.c
index 037bbe3b6c9..53fff5de50e 100644
--- a/source/blender/draw/engines/eevee/eevee_motion_blur.c
+++ b/source/blender/draw/engines/eevee/eevee_motion_blur.c
@@ -79,6 +79,7 @@ static void eevee_motion_blur_camera_get_matrix_at_time(
 	        scene,
 	        draw_ctx->view_layer,
 	        draw_ctx->engine_type,
+	        draw_ctx->object_mode,
 	        DAG_EVAL_VIEWPORT);
 	eval_ctx.ctime = time;
 
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index 528495b8710..cad99d5e7ab 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -455,6 +455,7 @@ struct DRWTextStore *DRW_state_text_cache_get(void);
 
 /* Avoid too many lookups while drawing */
 typedef struct DRWContextState {
+
 	struct ARegion *ar;         /* 'CTX_wm_region(C)' */
 	struct RegionView3D *rv3d;  /* 'CTX_wm_region_view3d(C)' */
 	struct View3D *v3d;     /* 'CTX_wm_view3d(C)' */
@@ -469,9 +470,12 @@ typedef struct DRWContextState {
 
 	struct Depsgraph *depsgraph;
 
+	short object_mode;
+
 	/* Last resort (some functions take this as an arg so we can't easily avoid).
 	 * May be NULL when used for selection or depth buffer. */
 	const struct bContext *evil_C;
+
 } DRWContextState;
 
 const DRWContextState *DRW_context_state_get(void);
diff --git a/source/blender/draw/intern/draw_armature.c b/source/blender/draw/intern/draw_armature.c
index 09fe3d68651..5daafadada6 100644
--- a/source/blender/draw/intern/draw_armature.c
+++ b/source/blender/draw/intern/draw_armature.c
@@ -1308,7 +1308,9 @@ static void draw_armature_pose(Object *ob, const float const_color[4])
 
 	// if (!(base->flag & OB_FROMDUPLI)) // TODO
 	{
-		if (ob->mode & OB_MODE_POSE) {
+		const DRWContextState *draw_ctx = DRW_context_state_get();
+
+		if (draw_ctx->object_mode & OB_MODE_POSE) {
 			arm->flag |= ARM_POSEMODE;
 		}
 
diff --git a/source/blender/draw/intern/draw_common.c b/source/blender/draw/intern/draw_common.c
index 0eb97a54ba5..4bd138e80f5 100644
--- a/source/blender/draw/intern/draw_common.c
+++ b/source/blender/draw/intern/draw_common.c
@@ -35,7 +35,6 @@
 
 #include "draw_common.h"
 
-
 #if 0
 #define UI_COLOR_RGB_FROM_U8(r, g, b, v4) \
 	ARRAY_SET_ITEMS(v4, (float)r / 255.0f, (float)g / 255.0f, (float)b / 255.0f, 1.0)
@@ -386,7 +385,8 @@ DRWShadingGroup *shgroup_instance_mball_helpers(DRWPass *pass, struct Gwn_Batch
  */
 int DRW_object_wire_theme_get(Object *ob, ViewLayer *view_layer, float **r_color)
 {
-	const bool is_edit = (ob->mode & OB_MODE_EDIT) != 0;
+	const DRWContextState *draw_ctx = DRW_context_state_get();
+	const bool is_edit = (draw_ctx->object_mode & OB_MODE_EDIT) != 0;
 	const bool active = (view_layer->basact && view_layer->basact->object == ob);
 	/* confusing logic here, there are 2 methods of setting the color
 	 * 'colortab[colindex]' and 'theme_id', colindex overrides theme_id.
diff --git a/source/blender/draw/intern/draw_common.h b/source/blender/draw/intern/draw_common.h
index cfd88effd15..7ff11f5f069 100644
--- a/source/blender/draw/intern/draw_common.h
+++ b/source/blender/draw/intern/draw_common.h
@@ -120,7 +120,8 @@ struct DRWShadingGrou

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list