Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2018-02-06 08:10:03 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-02-06 10:03:28 +0300
commit28dfc47cf0b068d0103986424f79eeea59f2039b (patch)
tree5be77cc019cb6deda3416e0dc2385b48eac1232a
parent1c600cc643306c12f2bc652b2ea921ecbb3cfadf (diff)
Object Mode: Add to EvaluationContext & DRWContextState
-rw-r--r--source/blender/blenkernel/intern/context.c8
-rw-r--r--source/blender/depsgraph/DEG_depsgraph.h13
-rw-r--r--source/blender/depsgraph/intern/depsgraph_eval.cc13
-rw-r--r--source/blender/draw/DRW_engine.h10
-rw-r--r--source/blender/draw/engines/clay/clay_engine.c2
-rw-r--r--source/blender/draw/engines/eevee/eevee_materials.c2
-rw-r--r--source/blender/draw/engines/eevee/eevee_motion_blur.c1
-rw-r--r--source/blender/draw/intern/DRW_render.h4
-rw-r--r--source/blender/draw/intern/draw_armature.c4
-rw-r--r--source/blender/draw/intern/draw_common.c4
-rw-r--r--source/blender/draw/intern/draw_common.h3
-rw-r--r--source/blender/draw/intern/draw_manager.c39
-rw-r--r--source/blender/draw/intern/draw_view.c10
-rw-r--r--source/blender/draw/modes/object_mode.c2
-rw-r--r--source/blender/draw/modes/pose_mode.c6
-rw-r--r--source/blender/editors/space_view3d/view3d_draw.c6
-rw-r--r--source/blender/editors/space_view3d/view3d_view.c8
-rw-r--r--source/blender/editors/transform/transform_conversions.c7
-rw-r--r--source/blender/editors/transform/transform_snap_object.c6
19 files changed, 91 insertions, 57 deletions
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 DRWShadingGroup *shgroup_instance_bone_envelope_wire(struct DRWPass *pass
struct DRWShadingGroup *shgroup_instance_bone_envelope_solid(struct DRWPass *pass, struct Gwn_Batch *geom);
struct DRWShadingGroup *shgroup_instance_mball_helpers(struct DRWPass *pass, struct Gwn_Batch *geom);
-int DRW_object_wire_theme_get(struct Object *ob, struct ViewLayer *view_layer, float **r_color);
+int DRW_object_wire_theme_get(
+ struct Object *ob, struct ViewLayer *view_layer, float **r_color);
float *DRW_color_background_blend_get(int theme_id);
/* draw_armature.c */
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index e6064c202ae..af42aacbc50 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -2257,8 +2257,8 @@ bool DRW_object_is_flat_normal(const Object *ob)
int DRW_object_is_mode_shade(const Object *ob)
{
BLI_assert(ob == DST.draw_ctx.obact);
- if ((ob->mode & OB_MODE_EDIT) == 0) {
- if (ob->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)) {
+ if ((DST.draw_ctx.object_mode & OB_MODE_EDIT) == 0) {
+ if (DST.draw_ctx.object_mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)) {
if ((DST.draw_ctx.v3d->flag2 & V3D_SHOW_MODE_SHADE_OVERRIDE) == 0) {
return true;
}
@@ -3329,7 +3329,7 @@ void DRW_notify_view_update(const DRWUpdateContext *update_ctx)
DST.viewport = rv3d->viewport;
DST.draw_ctx = (DRWContextState){
- ar, rv3d, v3d, scene, view_layer, OBACT(view_layer), engine_type, depsgraph,
+ ar, rv3d, v3d, scene, view_layer, OBACT(view_layer), engine_type, depsgraph, OB_MODE_OBJECT,
NULL,
};
@@ -3376,7 +3376,7 @@ void DRW_notify_id_update(const DRWUpdateContext *update_ctx, ID *id)
memset(&DST, 0x0, sizeof(DST));
DST.viewport = rv3d->viewport;
DST.draw_ctx = (DRWContextState){
- ar, rv3d, v3d, scene, view_layer, OBACT(view_layer), engine_type, depsgraph, NULL,
+ ar, rv3d, v3d, scene, view_layer, OBACT(view_layer), engine_type, depsgraph, OB_MODE_OBJECT, NULL,
};
drw_engines_enable(scene, view_layer, engine_type);
for (LinkData *link = DST.enabled_engines.first; link; link = link->next) {
@@ -3402,14 +3402,15 @@ void DRW_notify_id_update(const DRWUpdateContext *update_ctx, ID *id)
* for each relevant engine / mode engine. */
void DRW_draw_view(const bContext *C)
{
- struct Depsgraph *depsgraph = CTX_data_depsgraph(C);
+ EvaluationContext eval_ctx;
+ CTX_data_eval_ctx(C, &eval_ctx);
RenderEngineType *engine_type = CTX_data_engine_type(C);
ARegion *ar = CTX_wm_region(C);
View3D *v3d = CTX_wm_view3d(C);
/* Reset before using it. */
memset(&DST, 0x0, sizeof(DST));
- DRW_draw_render_loop_ex(depsgraph, engine_type, ar, v3d, C);
+ DRW_draw_render_loop_ex(eval_ctx.depsgraph, engine_type, ar, v3d, eval_ctx.object_mode, C);
}
/**
@@ -3419,7 +3420,7 @@ void DRW_draw_view(const bContext *C)
void DRW_draw_render_loop_ex(
struct Depsgraph *depsgraph,
RenderEngineType *engine_type,
- ARegion *ar, View3D *v3d,
+ ARegion *ar, View3D *v3d, const short object_mode,
const bContext *evil_C)
{
Scene *scene = DEG_get_evaluated_scene(depsgraph);
@@ -3435,7 +3436,7 @@ void DRW_draw_render_loop_ex(
GPU_viewport_engines_data_validate(DST.viewport, DRW_engines_get_hash());
DST.draw_ctx = (DRWContextState){
- ar, rv3d, v3d, scene, view_layer, OBACT(view_layer), engine_type, depsgraph,
+ ar, rv3d, v3d, scene, view_layer, OBACT(view_layer), engine_type, depsgraph, object_mode,
/* reuse if caller sets */
DST.draw_ctx.evil_C,
@@ -3544,7 +3545,7 @@ void DRW_draw_render_loop_ex(
void DRW_draw_render_loop(
struct Depsgraph *depsgraph,
- ARegion *ar, View3D *v3d)
+ ARegion *ar, View3D *v3d, const short object_mode)
{
/* Reset before using it. */
memset(&DST, 0x0, sizeof(DST));
@@ -3552,13 +3553,14 @@ void DRW_draw_render_loop(
Scene *scene = DEG_get_evaluated_scene(depsgraph);
RenderEngineType *engine_type = RE_engines_find(scene->view_render.engine_id);
- DRW_draw_render_loop_ex(depsgraph, engine_type, ar, v3d, NULL);
+ DRW_draw_render_loop_ex(depsgraph, engine_type, ar, v3d, object_mode, NULL);
}
/* @viewport CAN be NULL, in this case we create one. */
void DRW_draw_render_loop_offscreen(
struct Depsgraph *depsgraph, RenderEngineType *engine_type,
- ARegion *ar, View3D *v3d, const bool draw_background, GPUOffScreen *ofs,
+ ARegion *ar, View3D *v3d, const short object_mode,
+ const bool draw_background, GPUOffScreen *ofs,
GPUViewport *viewport)
{
RegionView3D *rv3d = ar->regiondata;
@@ -3579,7 +3581,7 @@ void DRW_draw_render_loop_offscreen(
memset(&DST, 0x0, sizeof(DST));
DST.options.is_image_render = true;
DST.options.draw_background = draw_background;
- DRW_draw_render_loop_ex(depsgraph, engine_type, ar, v3d, NULL);
+ DRW_draw_render_loop_ex(depsgraph, engine_type, ar, v3d, object_mode, NULL);
/* restore */
{
@@ -3605,6 +3607,7 @@ void DRW_render_to_image(RenderEngine *re, struct Depsgraph *depsgraph)
DrawEngineType *draw_engine_type = engine_type->draw_engine;
RenderData *r = &scene->r;
Render *render = re->re;
+ const EvaluationContext *eval_ctx = RE_GetEvalCtx(render);
/* Reset before using it. */
memset(&DST, 0x0, sizeof(DST));
@@ -3613,7 +3616,7 @@ void DRW_render_to_image(RenderEngine *re, struct Depsgraph *depsgraph)
DST.options.draw_background = scene->r.alphamode == R_ADDSKY;
DST.draw_ctx = (DRWContextState){
- NULL, NULL, NULL, scene, view_layer, OBACT(view_layer), engine_type, depsgraph, NULL
+ NULL, NULL, NULL, scene, view_layer, OBACT(view_layer), engine_type, depsgraph, eval_ctx->object_mode, NULL,
};
DST.viewport = GPU_viewport_create();
@@ -3681,7 +3684,7 @@ void DRW_render_object_iter(
*/
void DRW_draw_select_loop(
struct Depsgraph *depsgraph,
- ARegion *ar, View3D *v3d,
+ ARegion *ar, View3D *v3d, const short object_mode,
bool UNUSED(use_obedit_skip), bool UNUSED(use_nearest), const rcti *rect)
{
Scene *scene = DEG_get_evaluated_scene(depsgraph);
@@ -3737,7 +3740,8 @@ 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, (bContext *)NULL,
+ ar, rv3d, v3d, scene, view_layer, OBACT(view_layer), engine_type, depsgraph, object_mode,
+ (bContext *)NULL,
};
drw_viewport_var_init();
@@ -3802,7 +3806,7 @@ void DRW_draw_select_loop(
*/
void DRW_draw_depth_loop(
Depsgraph *depsgraph,
- ARegion *ar, View3D *v3d)
+ ARegion *ar, View3D *v3d, const short object_mode)
{
Scene *scene = DEG_get_evaluated_scene(depsgraph);
RenderEngineType *engine_type = RE_engines_find(scene->view_render.engine_id);
@@ -3836,7 +3840,8 @@ void DRW_draw_depth_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, (bContext *)NULL,
+ ar, rv3d, v3d, scene, view_layer, OBACT(view_layer), engine_type, depsgraph, object_mode,
+ (bContext *)NULL,
};
drw_viewport_var_init();
diff --git a/source/blender/draw/intern/draw_view.c b/source/blender/draw/intern/draw_view.c
index 391c29e511f..1e1f9da3c97 100644
--- a/source/blender/draw/intern/draw_view.c
+++ b/source/blender/draw/intern/draw_view.c
@@ -611,20 +611,20 @@ void DRW_draw_background(void)
/* **************************** 3D Cursor ******************************** */
-static bool is_cursor_visible(Scene *scene, ViewLayer *view_layer)
+static bool is_cursor_visible(const DRWContextState *draw_ctx, Scene *scene, ViewLayer *view_layer)
{
Object *ob = OBACT(view_layer);
/* don't draw cursor in paint modes, but with a few exceptions */
- if (ob && ob->mode & OB_MODE_ALL_PAINT) {
+ if (ob && draw_ctx->object_mode & OB_MODE_ALL_PAINT) {
/* exception: object is in weight paint and has deforming armature in pose mode */
- if (ob->mode & OB_MODE_WEIGHT_PAINT) {
+ if (draw_ctx->object_mode & OB_MODE_WEIGHT_PAINT) {
if (BKE_object_pose_armature_get(ob) != NULL) {
return true;
}
}
/* exception: object in texture paint mode, clone brush, use_clone_layer disabled */
- else if (ob->mode & OB_MODE_TEXTURE_PAINT) {
+ else if (draw_ctx->object_mode & OB_MODE_TEXTURE_PAINT) {
const Paint *p = BKE_paint_get_active(scene, view_layer);
if (p && p->brush && p->brush->imagepaint_tool == PAINT_TOOL_CLONE) {
@@ -654,7 +654,7 @@ void DRW_draw_cursor(void)
glDisable(GL_DEPTH_TEST);
glLineWidth(1.0f);
- if (is_cursor_visible(scene, view_layer)) {
+ if (is_cursor_visible(draw_ctx, scene, view_layer)) {
float *co = ED_view3d_cursor3d_get(scene, v3d);
unsigned char crosshair_color[3];
diff --git a/source/blender/draw/modes/object_mode.c b/source/blender/draw/modes/object_mode.c
index d7778a0aba9..b1e0eddfc46 100644
--- a/source/blender/draw/modes/object_mode.c
+++ b/source/blender/draw/modes/object_mode.c
@@ -1811,7 +1811,7 @@ static void OBJECT_cache_populate(void *vedata, Object *ob)
if (do_outlines) {
Object *obedit = scene->obedit;
- if (ob != obedit && !((ob == draw_ctx->obact) && (ob->mode & OB_MODE_ALL_PAINT))) {
+ if (ob != obedit && !((ob == draw_ctx->obact) && (draw_ctx->object_mode & OB_MODE_ALL_PAINT))) {
struct Gwn_Batch *geom = DRW_cache_object_surface_get(ob);
if (geom) {
theme_id = DRW_object_wire_theme_get(ob, view_layer, NULL);
diff --git a/source/blender/draw/modes/pose_mode.c b/source/blender/draw/modes/pose_mode.c
index 560773f2d05..1589ff39bdf 100644
--- a/source/blender/draw/modes/pose_mode.c
+++ b/source/blender/draw/modes/pose_mode.c
@@ -136,13 +136,15 @@ static void POSE_cache_populate(void *vedata, Object *ob)
*/
bool DRW_pose_mode_armature(Object *ob, Object *active_ob)
{
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+
/* Pode armature is handled by pose mode engine. */
- if ((ob == active_ob) && ((ob->mode & OB_MODE_POSE) != 0)) {
+ if ((ob == active_ob) && ((draw_ctx->object_mode & OB_MODE_POSE) != 0)) {
return true;
}
/* Armature parent is also handled by pose mode engine. */
- if ((active_ob != NULL) && ((active_ob->mode & OB_MODE_WEIGHT_PAINT) != 0)) {
+ if ((active_ob != NULL) && ((draw_ctx->object_mode & OB_MODE_WEIGHT_PAINT) != 0)) {
if (active_ob->parent == ob) {
return true;
}
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index f734bb085d0..3c4cc4d11b9 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -752,7 +752,7 @@ void ED_view3d_draw_depth(
else
#endif /* WITH_OPENGL_LEGACY */
{
- DRW_draw_depth_loop(graph, ar, v3d);
+ DRW_draw_depth_loop(graph, ar, v3d, eval_ctx->object_mode);
}
if (rv3d->rflag & RV3D_CLIPPING) {
@@ -2076,7 +2076,9 @@ void ED_view3d_draw_offscreen(
}
}
else {
- DRW_draw_render_loop_offscreen(depsgraph, eval_ctx->engine_type, ar, v3d, do_sky, ofs, viewport);
+ DRW_draw_render_loop_offscreen(
+ depsgraph, eval_ctx->engine_type, ar, v3d, eval_ctx->object_mode,
+ do_sky, ofs, viewport);
}
/* restore size */
diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c
index 0597f2806b3..779c2cc53d4 100644
--- a/source/blender/editors/space_view3d/view3d_view.c
+++ b/source/blender/editors/space_view3d/view3d_view.c
@@ -954,7 +954,9 @@ int view3d_opengl_select(
else
#else
{
- DRW_draw_select_loop(graph, ar, v3d, use_obedit_skip, use_nearest, &rect);
+ DRW_draw_select_loop(
+ graph, ar, v3d, eval_ctx->object_mode,
+ use_obedit_skip, use_nearest, &rect);
}
#endif /* WITH_OPENGL_LEGACY */
@@ -971,7 +973,9 @@ int view3d_opengl_select(
else
#else
{
- DRW_draw_select_loop(graph, ar, v3d, use_obedit_skip, use_nearest, &rect);
+ DRW_draw_select_loop(
+ graph, ar, v3d, eval_ctx->object_mode,
+ use_obedit_skip, use_nearest, &rect);
}
#endif /* WITH_OPENGL_LEGACY */
diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c
index 730ca70547b..6c55967fc8f 100644
--- a/source/blender/editors/transform/transform_conversions.c
+++ b/source/blender/editors/transform/transform_conversions.c
@@ -2482,9 +2482,10 @@ static void createTransEditVerts(TransInfo *t)
int island_info_tot;
int *island_vert_map = NULL;
- DEG_evaluation_context_init_from_scene(&eval_ctx,
- t->scene, t->view_layer, t->engine_type,
- DAG_EVAL_VIEWPORT);
+ DEG_evaluation_context_init_from_scene(
+ &eval_ctx,
+ t->scene, t->view_layer, t->engine_type, t->obedit->mode,
+ DAG_EVAL_VIEWPORT);
/* Even for translation this is needed because of island-orientation, see: T51651. */
const bool is_island_center = (t->around == V3D_AROUND_LOCAL_ORIGINS);
diff --git a/source/blender/editors/transform/transform_snap_object.c b/source/blender/editors/transform/transform_snap_object.c
index 8f0590eb5b9..07b45d58f37 100644
--- a/source/blender/editors/transform/transform_snap_object.c
+++ b/source/blender/editors/transform/transform_snap_object.c
@@ -2096,7 +2096,11 @@ SnapObjectContext *ED_transform_snap_object_context_create(
sctx->bmain = bmain;
sctx->scene = scene;
- DEG_evaluation_context_init_from_scene(&sctx->eval_ctx, scene, view_layer, engine_type, DAG_EVAL_VIEWPORT);
+ Object *obact = OBACT(view_layer);
+
+ DEG_evaluation_context_init_from_scene(
+ &sctx->eval_ctx, scene, view_layer, engine_type,
+ obact ? obact->mode : OB_MODE_OBJECT, DAG_EVAL_VIEWPORT);
sctx->cache.object_map = BLI_ghash_ptr_new(__func__);
sctx->cache.mem_arena = BLI_memarena_new(BLI_MEMARENA_STD_BUFSIZE, __func__);