diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-04-05 19:20:27 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-04-05 19:21:14 +0300 |
commit | 1c24c04e6023f2d2a328dfcdc9f86cd381d029a3 (patch) | |
tree | 7a5af59ce078cb66fb17ec33cf111ffc8d5fb328 /source/blender/editors/space_view3d | |
parent | 57329304b061efe756e3a4ce1b828e9a7c7f7030 (diff) |
Remove workspace object mode, reverts changes w/ 2.8
This caused too many problems syncing object modes
with multiple objects/windows/workspaces, see: D3130 for details.
Diffstat (limited to 'source/blender/editors/space_view3d')
-rw-r--r-- | source/blender/editors/space_view3d/drawarmature.c | 44 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/drawmesh.c | 18 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/drawobject.c | 220 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/space_view3d.c | 16 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_buttons.c | 7 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_draw.c | 37 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_draw_legacy.c | 32 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_edit.c | 37 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_header.c | 9 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_intern.h | 25 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_select.c | 133 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_snap.c | 11 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_view.c | 12 |
13 files changed, 263 insertions, 338 deletions
diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c index f0adf307bda..77cd64be7c1 100644 --- a/source/blender/editors/space_view3d/drawarmature.c +++ b/source/blender/editors/space_view3d/drawarmature.c @@ -2667,10 +2667,8 @@ static void ghost_poses_tag_unselected(Object *ob, short unset) * note: object should be in posemode */ static void draw_ghost_poses_range( - const EvaluationContext *eval_ctx_init, - Scene *scene, ViewLayer *view_layer, View3D *v3d, ARegion *ar, Base *base) + const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, View3D *v3d, ARegion *ar, Base *base) { - EvaluationContext eval_ctx = *eval_ctx_init; Object *ob = base->object; AnimData *adt = BKE_animdata_from_id(&ob->id); bArmature *arm = ob->data; @@ -2692,7 +2690,7 @@ static void draw_ghost_poses_range( range = (float)(end - start); /* store values */ - eval_ctx.object_mode &= ~OB_MODE_POSE; + ob->mode &= ~OB_MODE_POSE; cfrao = CFRA; flago = arm->flag; arm->flag &= ~(ARM_DRAWNAMES | ARM_DRAWAXES); @@ -2713,8 +2711,8 @@ static void draw_ghost_poses_range( UI_GetThemeColorShadeAlpha4ubv(TH_WIRE, 0, -128 - (int)(120.0f * sqrtf(colfac)), col); BKE_animsys_evaluate_animdata(scene, &ob->id, adt, (float)CFRA, ADT_RECALC_ALL); - BKE_pose_where_is(&eval_ctx, scene, ob); - draw_pose_bones(&eval_ctx, scene, view_layer, v3d, ar, base, OB_WIRE, col, true, false); + BKE_pose_where_is(eval_ctx, scene, ob); + draw_pose_bones(eval_ctx, scene, view_layer, v3d, ar, base, OB_WIRE, col, true, false); } glDisable(GL_BLEND); if (v3d->zbuf) glEnable(GL_DEPTH_TEST); @@ -2730,17 +2728,16 @@ static void draw_ghost_poses_range( CFRA = cfrao; ob->pose = poseo; arm->flag = flago; - eval_ctx.object_mode |= OB_MODE_POSE; + ob->mode |= OB_MODE_POSE; } /* draw ghosts on keyframes in action within range * - object should be in posemode */ static void draw_ghost_poses_keys( - const struct EvaluationContext *eval_ctx_init, Scene *scene, ViewLayer *view_layer, + const struct EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, View3D *v3d, ARegion *ar, Base *base) { - EvaluationContext eval_ctx = *eval_ctx_init; Object *ob = base->object; AnimData *adt = BKE_animdata_from_id(&ob->id); bAction *act = (adt) ? adt->action : NULL; @@ -2774,7 +2771,7 @@ static void draw_ghost_poses_keys( if (range == 0) return; /* store values */ - eval_ctx.object_mode &= ~OB_MODE_POSE; + ob->mode &= ~OB_MODE_POSE; cfrao = CFRA; flago = arm->flag; arm->flag &= ~(ARM_DRAWNAMES | ARM_DRAWAXES); @@ -2797,8 +2794,8 @@ static void draw_ghost_poses_keys( CFRA = (int)ak->cfra; BKE_animsys_evaluate_animdata(scene, &ob->id, adt, (float)CFRA, ADT_RECALC_ALL); - BKE_pose_where_is(&eval_ctx, scene, ob); - draw_pose_bones(&eval_ctx, scene, view_layer, v3d, ar, base, OB_WIRE, col, true, false); + BKE_pose_where_is(eval_ctx, scene, ob); + draw_pose_bones(eval_ctx, scene, view_layer, v3d, ar, base, OB_WIRE, col, true, false); } glDisable(GL_BLEND); if (v3d->zbuf) glEnable(GL_DEPTH_TEST); @@ -2815,17 +2812,16 @@ static void draw_ghost_poses_keys( CFRA = cfrao; ob->pose = poseo; arm->flag = flago; - eval_ctx.object_mode |= OB_MODE_POSE; + ob->mode |= OB_MODE_POSE; } /* draw ghosts around current frame * - object is supposed to be armature in posemode */ static void draw_ghost_poses( - const struct EvaluationContext *eval_ctx_init, Scene *scene, ViewLayer *view_layer, + const struct EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, View3D *v3d, ARegion *ar, Base *base) { - EvaluationContext eval_ctx = *eval_ctx_init; Object *ob = base->object; AnimData *adt = BKE_animdata_from_id(&ob->id); bArmature *arm = ob->data; @@ -2850,7 +2846,7 @@ static void draw_ghost_poses( range = (float)(arm->ghostep) * stepsize + 0.5f; /* plus half to make the for loop end correct */ /* store values */ - eval_ctx.object_mode &= ~OB_MODE_POSE; + ob->mode &= ~OB_MODE_POSE; cfrao = CFRA; actframe = BKE_nla_tweakedit_remap(adt, (float)CFRA, 0); flago = arm->flag; @@ -2878,8 +2874,8 @@ static void draw_ghost_poses( if (CFRA != cfrao) { BKE_animsys_evaluate_animdata(scene, &ob->id, adt, (float)CFRA, ADT_RECALC_ALL); - BKE_pose_where_is(&eval_ctx, scene, ob); - draw_pose_bones(&eval_ctx, scene, view_layer, v3d, ar, base, OB_WIRE, col, true, false); + BKE_pose_where_is(eval_ctx, scene, ob); + draw_pose_bones(eval_ctx, scene, view_layer, v3d, ar, base, OB_WIRE, col, true, false); } } @@ -2893,8 +2889,8 @@ static void draw_ghost_poses( if (CFRA != cfrao) { BKE_animsys_evaluate_animdata(scene, &ob->id, adt, (float)CFRA, ADT_RECALC_ALL); - BKE_pose_where_is(&eval_ctx, scene, ob); - draw_pose_bones(&eval_ctx, scene, view_layer, v3d, ar, base, OB_WIRE, col, true, false); + BKE_pose_where_is(eval_ctx, scene, ob); + draw_pose_bones(eval_ctx, scene, view_layer, v3d, ar, base, OB_WIRE, col, true, false); } } } @@ -2912,7 +2908,7 @@ static void draw_ghost_poses( CFRA = cfrao; ob->pose = poseo; arm->flag = flago; - eval_ctx.object_mode |= OB_MODE_POSE; + ob->mode |= OB_MODE_POSE; } /* ********************************** Armature Drawing - Main ************************* */ @@ -2974,11 +2970,11 @@ bool draw_armature( } else #endif - if (eval_ctx->object_mode & OB_MODE_POSE) { + if (ob->mode & OB_MODE_POSE) { arm->flag |= ARM_POSEMODE; } } - else if (eval_ctx->object_mode & OB_MODE_POSE) { + else if (ob->mode & OB_MODE_POSE) { if (arm->ghosttype == ARM_GHOST_RANGE) { draw_ghost_poses_range(eval_ctx, scene, view_layer, v3d, ar, base); } @@ -2992,7 +2988,7 @@ bool draw_armature( if ((dflag & DRAW_SCENESET) == 0) { if (ob == OBACT(view_layer)) arm->flag |= ARM_POSEMODE; - else if (OBACT(view_layer) && (eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT)) { + else if (OBACT(view_layer) && (OBACT(view_layer)->mode & OB_MODE_WEIGHT_PAINT)) { if (ob == modifiers_isDeformedByArmature(OBACT(view_layer))) arm->flag |= ARM_POSEMODE; } diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c index c014c2b12a0..0d4ec4d42d1 100644 --- a/source/blender/editors/space_view3d/drawmesh.c +++ b/source/blender/editors/space_view3d/drawmesh.c @@ -59,8 +59,6 @@ #include "UI_resources.h" -#include "DEG_depsgraph.h" - #include "GPU_draw.h" #include "GPU_material.h" #include "GPU_basic_shader.h" @@ -327,10 +325,8 @@ void draw_mesh_paint_weight_edges(RegionView3D *rv3d, DerivedMesh *dm, } } -void draw_mesh_paint( - const EvaluationContext *eval_ctx, - View3D *v3d, RegionView3D *rv3d, - Object *ob, DerivedMesh *dm, const int draw_flags) +void draw_mesh_paint(View3D *v3d, RegionView3D *rv3d, + Object *ob, DerivedMesh *dm, const int draw_flags) { DMSetDrawOptions facemask = NULL; Mesh *me = ob->data; @@ -340,21 +336,21 @@ void draw_mesh_paint( if (me->editflag & (ME_EDIT_PAINT_VERT_SEL | ME_EDIT_PAINT_FACE_SEL)) facemask = wpaint__setSolidDrawOptions_facemask; - if (eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT) { + if (ob->mode & OB_MODE_WEIGHT_PAINT) { draw_mesh_paint_weight_faces(dm, use_light, facemask, me); } - else if (eval_ctx->object_mode & OB_MODE_VERTEX_PAINT) { + else if (ob->mode & OB_MODE_VERTEX_PAINT) { draw_mesh_paint_vcolor_faces(dm, use_light, facemask, me, me); } /* draw face selection on top */ if (draw_flags & DRAW_FACE_SELECT) { - bool draw_select_edges = (eval_ctx->object_mode & OB_MODE_TEXTURE_PAINT) == 0; + bool draw_select_edges = (ob->mode & OB_MODE_TEXTURE_PAINT) == 0; draw_mesh_face_select(rv3d, me, dm, draw_select_edges); } else if ((use_light == false) || (ob->dtx & OB_DRAWWIRE)) { - const bool use_depth = (v3d->flag & V3D_ZBUF_SELECT) || !(eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT); - const bool use_alpha = (eval_ctx->object_mode & OB_MODE_VERTEX_PAINT) == 0; + const bool use_depth = (v3d->flag & V3D_ZBUF_SELECT) || !(ob->mode & OB_MODE_WEIGHT_PAINT); + const bool use_alpha = (ob->mode & OB_MODE_VERTEX_PAINT) == 0; if (use_alpha == false) { set_inverted_drawing(1); diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index f46d3c500bc..2c6d977b552 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -314,15 +314,13 @@ static bool check_ob_drawface_dot(Scene *sce, View3D *vd, char dt) /* check for glsl drawing */ -bool draw_glsl_material( - const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, - Object *ob, View3D *v3d, const char dt) +bool draw_glsl_material(Scene *scene, ViewLayer *view_layer, Object *ob, View3D *v3d, const char dt) { if (G.f & G_PICKSEL) return false; if (!check_object_draw_texture(scene, v3d, dt)) return false; - if (ob == OBACT(view_layer) && (ob && eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT)) + if (ob == OBACT(view_layer) && (ob && ob->mode & OB_MODE_WEIGHT_PAINT)) return false; if (v3d->flag2 & V3D_SHOW_SOLID_MATCAP) @@ -336,7 +334,7 @@ bool draw_glsl_material( return false; } -static bool check_alpha_pass(const EvaluationContext *eval_ctx, Base *base) +static bool check_alpha_pass(Base *base) { if (base->flag_legacy & OB_FROMDUPLI) return false; @@ -344,9 +342,8 @@ static bool check_alpha_pass(const EvaluationContext *eval_ctx, Base *base) if (G.f & G_PICKSEL) return false; - if (eval_ctx->object_mode & OB_MODE_ALL_PAINT) { + if (base->object->mode & OB_MODE_ALL_PAINT) return false; - } return (base->object->dtx & OB_DRAWTRANSP); } @@ -3893,9 +3890,8 @@ static DMDrawOption draw_em_fancy__setGLSLFaceOpts(void *userData, int index) } } -static void draw_em_fancy( - const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, ARegion *ar, View3D *v3d, - Object *ob, BMEditMesh *em, DerivedMesh *cageDM, DerivedMesh *finalDM, const char dt) +static void draw_em_fancy(Scene *scene, ViewLayer *view_layer, ARegion *ar, View3D *v3d, + Object *ob, BMEditMesh *em, DerivedMesh *cageDM, DerivedMesh *finalDM, const char dt) { RegionView3D *rv3d = ar->regiondata; @@ -3932,7 +3928,7 @@ static void draw_em_fancy( glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); } else if (check_object_draw_texture(scene, v3d, dt)) { - if (draw_glsl_material(eval_ctx, scene, view_layer, ob, v3d, dt)) { + if (draw_glsl_material(scene, view_layer, ob, v3d, dt)) { glFrontFace((ob->transflag & OB_NEG_SCALE) ? GL_CW : GL_CCW); finalDM->drawMappedFacesGLSL(finalDM, GPU_object_material_bind, @@ -4225,12 +4221,10 @@ static void draw_em_fancy_new(Scene *UNUSED(scene), ARegion *UNUSED(ar), View3D /* Mesh drawing routines */ -void draw_mesh_object_outline( - const EvaluationContext *eval_ctx, View3D *v3d, - Object *ob, DerivedMesh *dm, const unsigned char ob_wire_col[4]) /* LEGACY */ +void draw_mesh_object_outline(View3D *v3d, Object *ob, DerivedMesh *dm, const unsigned char ob_wire_col[4]) /* LEGACY */ { if ((v3d->transp == false) && /* not when we draw the transparent pass */ - (eval_ctx->object_mode & OB_MODE_ALL_PAINT) == false) /* not when painting (its distracting) - campbell */ + (ob->mode & OB_MODE_ALL_PAINT) == false) /* not when painting (its distracting) - campbell */ { glLineWidth(UI_GetThemeValuef(TH_OUTLINE_WIDTH) * 2.0f); glDepthMask(GL_FALSE); @@ -4253,12 +4247,10 @@ void draw_mesh_object_outline( } } -static void draw_mesh_object_outline_new( - const EvaluationContext *eval_ctx, View3D *v3d, RegionView3D *rv3d, - Mesh *me, const bool is_active) +static void draw_mesh_object_outline_new(View3D *v3d, RegionView3D *rv3d, Object *ob, Mesh *me, const bool is_active) { if ((v3d->transp == false) && /* not when we draw the transparent pass */ - (eval_ctx->object_mode & OB_MODE_ALL_PAINT) == false) /* not when painting (its distracting) - campbell */ + (ob->mode & OB_MODE_ALL_PAINT) == false) /* not when painting (its distracting) - campbell */ { glLineWidth(UI_GetThemeValuef(TH_OUTLINE_WIDTH) * 2.0f); glDepthMask(GL_FALSE); @@ -4308,9 +4300,7 @@ static void draw_mesh_fancy( const char dt, const unsigned char ob_wire_col[4], const short dflag) { #ifdef WITH_GAMEENGINE - Object *ob = ( - (rv3d->rflag & RV3D_IS_GAME_ENGINE) ? - BKE_object_lod_meshob_get(base->object, view_layer, eval_ctx->object_mode) : base->object); + Object *ob = (rv3d->rflag & RV3D_IS_GAME_ENGINE) ? BKE_object_lod_meshob_get(base->object, view_layer) : base->object; #else Object *ob = base->object; #endif @@ -4319,7 +4309,7 @@ static void draw_mesh_fancy( bool /* no_verts,*/ no_edges, no_faces; DerivedMesh *dm = mesh_get_derived_final(eval_ctx, scene, ob, scene->customdata_mask); const bool is_obact = (ob == OBACT(view_layer)); - int draw_flags = (is_obact && BKE_paint_select_face_test(ob, eval_ctx->object_mode)) ? DRAW_FACE_SELECT : 0; + int draw_flags = (is_obact && BKE_paint_select_face_test(ob)) ? DRAW_FACE_SELECT : 0; if (!dm) return; @@ -4357,7 +4347,7 @@ static void draw_mesh_fancy( draw_bounding_volume(ob, ob->boundtype, ob_wire_col); } else if ((no_faces && no_edges) || - ((!is_obact || (eval_ctx->object_mode == OB_MODE_OBJECT)) && object_is_halo(scene, ob))) + ((!is_obact || (ob->mode == OB_MODE_OBJECT)) && object_is_halo(scene, ob))) { glPointSize(1.5f); dm->drawVerts(dm); @@ -4365,7 +4355,7 @@ static void draw_mesh_fancy( else if ((dt == OB_WIRE) || no_faces) { draw_wire = OBDRAW_WIRE_ON; /* draw wire only, no depth buffer stuff */ } - else if (((is_obact && eval_ctx->object_mode & OB_MODE_TEXTURE_PAINT)) || + else if (((is_obact && ob->mode & OB_MODE_TEXTURE_PAINT)) || check_object_draw_texture(scene, v3d, dt)) { bool draw_loose = true; @@ -4376,17 +4366,15 @@ static void draw_mesh_fancy( !(G.f & G_PICKSEL || (draw_flags & DRAW_FACE_SELECT)) && (draw_wire == OBDRAW_WIRE_OFF)) { - draw_mesh_object_outline(eval_ctx, v3d, ob, dm, ob_wire_col); + draw_mesh_object_outline(v3d, ob, dm, ob_wire_col); } - if (draw_glsl_material(eval_ctx, scene, view_layer, ob, v3d, dt) && !(draw_flags & DRAW_MODIFIERS_PREVIEW)) { + if (draw_glsl_material(scene, view_layer, ob, v3d, dt) && !(draw_flags & DRAW_MODIFIERS_PREVIEW)) { Paint *p; glFrontFace((ob->transflag & OB_NEG_SCALE) ? GL_CW : GL_CCW); - if ((v3d->flag2 & V3D_SHOW_SOLID_MATCAP) && ob->sculpt && - (p = BKE_paint_get_active(scene, view_layer, eval_ctx->object_mode))) - { + if ((v3d->flag2 & V3D_SHOW_SOLID_MATCAP) && ob->sculpt && (p = BKE_paint_get_active(scene, view_layer))) { GPUVertexAttribs gattribs; float planes[4][4]; float (*fpl)[4] = NULL; @@ -4449,7 +4437,7 @@ static void draw_mesh_fancy( (draw_wire == OBDRAW_WIRE_OFF) && (ob->sculpt == NULL)) { - draw_mesh_object_outline(eval_ctx, v3d, ob, dm, ob_wire_col); + draw_mesh_object_outline(v3d, ob, dm, ob_wire_col); } /* materials arent compatible with vertex colors */ @@ -4473,12 +4461,12 @@ static void draw_mesh_fancy( (draw_wire == OBDRAW_WIRE_OFF) && (ob->sculpt == NULL)) { - draw_mesh_object_outline(eval_ctx, v3d, ob, dm, ob_wire_col); + draw_mesh_object_outline(v3d, ob, dm, ob_wire_col); } glFrontFace((ob->transflag & OB_NEG_SCALE) ? GL_CW : GL_CCW); - if (ob->sculpt && (p = BKE_paint_get_active(scene, view_layer, eval_ctx->object_mode))) { + if (ob->sculpt && (p = BKE_paint_get_active(scene, view_layer))) { float planes[4][4]; float (*fpl)[4] = NULL; const bool fast = (p->flags & PAINT_FAST_NAVIGATE) && (rv3d->rflag & RV3D_NAVIGATING); @@ -4510,7 +4498,7 @@ static void draw_mesh_fancy( } } else if (dt == OB_PAINT) { - draw_mesh_paint(eval_ctx, v3d, rv3d, ob, dm, draw_flags); + draw_mesh_paint(v3d, rv3d, ob, dm, draw_flags); /* since we already draw wire as wp guide, don't draw over the top */ draw_wire = OBDRAW_WIRE_OFF; @@ -4525,7 +4513,7 @@ static void draw_mesh_fancy( * with the background. */ if ((dflag & DRAW_CONSTCOLOR) == 0) { - if (is_obact && (eval_ctx->object_mode & OB_MODE_PARTICLE_EDIT)) { + if (is_obact && (ob->mode & OB_MODE_PARTICLE_EDIT)) { float color[3]; ob_wire_color_blend_theme_id(ob_wire_col, TH_BACK, 0.15f, color); glColor3fv(color); @@ -4558,7 +4546,7 @@ static void draw_mesh_fancy( } } - if (is_obact && BKE_paint_select_vert_test(ob, eval_ctx->object_mode)) { + if (is_obact && BKE_paint_select_vert_test(ob)) { const bool use_depth = (v3d->flag & V3D_ZBUF_SELECT) != 0; glPointSize(UI_GetThemeValuef(TH_VERTEX_SIZE)); @@ -4577,7 +4565,7 @@ static bool draw_mesh_object( const char dt, const unsigned char ob_wire_col[4], const short dflag) { Object *ob = base->object; - Object *obedit = OBEDIT_FROM_EVAL_CTX(eval_ctx); + Object *obedit = OBEDIT_FROM_VIEW_LAYER(view_layer); Mesh *me = ob->data; BMEditMesh *em = me->edit_btmesh; bool do_alpha_after = false, drawlinked = false, retval = false; @@ -4627,13 +4615,13 @@ static bool draw_mesh_object( if (use_material) { if (dt > OB_WIRE) { - const bool glsl = draw_glsl_material(eval_ctx, scene, view_layer, ob, v3d, dt); + const bool glsl = draw_glsl_material(scene, view_layer, ob, v3d, dt); - GPU_begin_object_materials(v3d, rv3d, scene, view_layer, ob, glsl, eval_ctx->object_mode, NULL); + GPU_begin_object_materials(v3d, rv3d, scene, view_layer, ob, glsl, NULL); } } - draw_em_fancy(eval_ctx, scene, view_layer, ar, v3d, ob, em, cageDM, finalDM, dt); + draw_em_fancy(scene, view_layer, ar, v3d, ob, em, cageDM, finalDM, dt); if (use_material) { GPU_end_object_materials(); @@ -4646,13 +4634,12 @@ static bool draw_mesh_object( /* ob->bb was set by derived mesh system, do NULL check just to be sure */ if (me->totpoly <= 4 || (!ob->bb || ED_view3d_boundbox_clip(rv3d, ob->bb))) { if (dt > OB_WIRE) { - const bool glsl = draw_glsl_material(eval_ctx, scene, view_layer, ob, v3d, dt); + const bool glsl = draw_glsl_material(scene, view_layer, ob, v3d, dt); if (dt == OB_SOLID || glsl) { - const bool check_alpha = check_alpha_pass(eval_ctx, base); - GPU_begin_object_materials( - v3d, rv3d, scene, view_layer, ob, - glsl, eval_ctx->object_mode, (check_alpha) ? &do_alpha_after : NULL); + const bool check_alpha = check_alpha_pass(base); + GPU_begin_object_materials(v3d, rv3d, scene, view_layer, ob, glsl, + (check_alpha) ? &do_alpha_after : NULL); } } @@ -4731,9 +4718,7 @@ static void draw_mesh_fancy_new( } #ifdef WITH_GAMEENGINE - Object *ob = ( - (rv3d->rflag & RV3D_IS_GAME_ENGINE) ? - BKE_object_lod_meshob_get(base->object, view_layer, eval_ctx->object_mode) : base->object); + Object *ob = (rv3d->rflag & RV3D_IS_GAME_ENGINE) ? BKE_object_lod_meshob_get(base->object, view_layer) : base->object; #else Object *ob = base->object; #endif @@ -4742,7 +4727,7 @@ static void draw_mesh_fancy_new( bool no_edges, no_faces; DerivedMesh *dm = mesh_get_derived_final(eval_ctx, scene, ob, scene->customdata_mask); const bool is_obact = (ob == OBACT(view_layer)); - int draw_flags = (is_obact && BKE_paint_select_face_test(ob, eval_ctx->object_mode)) ? DRAW_FACE_SELECT : 0; + int draw_flags = (is_obact && BKE_paint_select_face_test(ob)) ? DRAW_FACE_SELECT : 0; if (!dm) return; @@ -4785,7 +4770,7 @@ static void draw_mesh_fancy_new( draw_bounding_volume(ob, ob->boundtype, ob_wire_col); } else if ((no_faces && no_edges) || - ((!is_obact || (eval_ctx->object_mode == OB_MODE_OBJECT)) && object_is_halo(scene, ob))) + ((!is_obact || (ob->mode == OB_MODE_OBJECT)) && object_is_halo(scene, ob))) { glPointSize(1.5f); // dm->drawVerts(dm); @@ -4851,7 +4836,7 @@ static void draw_mesh_fancy_new( GWN_batch_draw(batch); #endif } - else if (((is_obact && eval_ctx->object_mode & OB_MODE_TEXTURE_PAINT)) || + else if (((is_obact && ob->mode & OB_MODE_TEXTURE_PAINT)) || check_object_draw_texture(scene, v3d, dt)) { bool draw_loose = true; @@ -4862,17 +4847,15 @@ static void draw_mesh_fancy_new( !(G.f & G_PICKSEL || (draw_flags & DRAW_FACE_SELECT)) && (draw_wire == OBDRAW_WIRE_OFF)) { - draw_mesh_object_outline_new(eval_ctx, v3d, rv3d, me, (ob == OBACT(view_layer))); + draw_mesh_object_outline_new(v3d, rv3d, ob, me, (ob == OBACT(view_layer))); } - if (draw_glsl_material(eval_ctx, scene, view_layer, ob, v3d, dt) && !(draw_flags & DRAW_MODIFIERS_PREVIEW)) { + if (draw_glsl_material(scene, view_layer, ob, v3d, dt) && !(draw_flags & DRAW_MODIFIERS_PREVIEW)) { Paint *p; glFrontFace((ob->transflag & OB_NEG_SCALE) ? GL_CW : GL_CCW); - if ((v3d->flag2 & V3D_SHOW_SOLID_MATCAP) && ob->sculpt && - (p = BKE_paint_get_active(scene, view_layer, eval_ctx->object_mode))) - { + if ((v3d->flag2 & V3D_SHOW_SOLID_MATCAP) && ob->sculpt && (p = BKE_paint_get_active(scene, view_layer))) { GPUVertexAttribs gattribs; float planes[4][4]; float (*fpl)[4] = NULL; @@ -4931,7 +4914,7 @@ static void draw_mesh_fancy_new( (draw_wire == OBDRAW_WIRE_OFF) && (ob->sculpt == NULL)) { - draw_mesh_object_outline_new(eval_ctx, v3d, rv3d, me, (ob == OBACT(view_layer))); + draw_mesh_object_outline_new(v3d, rv3d, ob, me, (ob == OBACT(view_layer))); } /* materials arent compatible with vertex colors */ @@ -4956,12 +4939,12 @@ static void draw_mesh_fancy_new( (ob->sculpt == NULL)) { /* TODO: move this into a separate pass */ - draw_mesh_object_outline_new(eval_ctx, v3d, rv3d, me, (ob == OBACT(view_layer))); + draw_mesh_object_outline_new(v3d, rv3d, ob, me, (ob == OBACT(view_layer))); } glFrontFace((ob->transflag & OB_NEG_SCALE) ? GL_CW : GL_CCW); - if (ob->sculpt && (p = BKE_paint_get_active(scene, view_layer, eval_ctx->object_mode))) { + if (ob->sculpt && (p = BKE_paint_get_active(scene, view_layer))) { float planes[4][4]; float (*fpl)[4] = NULL; const bool fast = (p->flags & PAINT_FAST_NAVIGATE) && (rv3d->rflag & RV3D_NAVIGATING); @@ -4993,7 +4976,7 @@ static void draw_mesh_fancy_new( } } else if (dt == OB_PAINT) { - draw_mesh_paint(eval_ctx, v3d, rv3d, ob, dm, draw_flags); + draw_mesh_paint(v3d, rv3d, ob, dm, draw_flags); /* since we already draw wire as wp guide, don't draw over the top */ draw_wire = OBDRAW_WIRE_OFF; @@ -5055,7 +5038,7 @@ static bool UNUSED_FUNCTION(draw_mesh_object_new)( /* TODO: handle shadow pass separately */ return true; } - Object *obedit = OBEDIT_FROM_EVAL_CTX(eval_ctx); + Object *obedit = OBEDIT_FROM_VIEW_LAYER(eval_ctx->view_layer); if (obedit && ob != obedit && ob->data == obedit->data) { if (BKE_key_from_object(ob) || BKE_key_from_object(obedit)) {} @@ -5100,9 +5083,9 @@ static bool UNUSED_FUNCTION(draw_mesh_object_new)( DM_update_materials(cageDM, ob); } - const bool glsl = draw_glsl_material(eval_ctx, scene, eval_ctx->view_layer, ob, v3d, dt); + const bool glsl = draw_glsl_material(scene, eval_ctx->view_layer, ob, v3d, dt); - GPU_begin_object_materials(v3d, rv3d, scene, eval_ctx->view_layer, ob, glsl, eval_ctx->object_mode, NULL); + GPU_begin_object_materials(v3d, rv3d, scene, eval_ctx->view_layer, ob, glsl, NULL); } draw_em_fancy_new(scene, ar, v3d, ob, me, em, cageDM, finalDM, dt); @@ -5118,13 +5101,12 @@ static bool UNUSED_FUNCTION(draw_mesh_object_new)( /* ob->bb was set by derived mesh system, do NULL check just to be sure */ if (me->totpoly <= 4 || (!ob->bb || ED_view3d_boundbox_clip(rv3d, ob->bb))) { if (solid) { - const bool glsl = draw_glsl_material(eval_ctx, scene, eval_ctx->view_layer, ob, v3d, dt); + const bool glsl = draw_glsl_material(scene, eval_ctx->view_layer, ob, v3d, dt); if (dt == OB_SOLID || glsl) { - const bool check_alpha = check_alpha_pass(eval_ctx, base); - GPU_begin_object_materials( - v3d, rv3d, scene, eval_ctx->view_layer, ob, - eval_ctx->object_mode, glsl, (check_alpha) ? &do_alpha_after : NULL); + const bool check_alpha = check_alpha_pass(base); + GPU_begin_object_materials(v3d, rv3d, scene, eval_ctx->view_layer, ob, glsl, + (check_alpha) ? &do_alpha_after : NULL); } } @@ -5441,9 +5423,7 @@ static void drawCurveDMWired(Object *ob) } /* return true when nothing was drawn */ -static bool drawCurveDerivedMesh( - const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, View3D *v3d, RegionView3D *rv3d, - Base *base, const char dt) +static bool drawCurveDerivedMesh(Scene *scene, ViewLayer *view_layer, View3D *v3d, RegionView3D *rv3d, Base *base, const char dt) { Object *ob = base->object; DerivedMesh *dm = ob->derivedFinal; @@ -5457,10 +5437,8 @@ static bool drawCurveDerivedMesh( glFrontFace((ob->transflag & OB_NEG_SCALE) ? GL_CW : GL_CCW); if (dt > OB_WIRE && dm->getNumPolys(dm)) { - bool glsl = draw_glsl_material(eval_ctx, scene, view_layer, ob, v3d, dt); - GPU_begin_object_materials( - v3d, rv3d, scene, view_layer, ob, - eval_ctx->object_mode, glsl, NULL); + bool glsl = draw_glsl_material(scene, view_layer, ob, v3d, dt); + GPU_begin_object_materials(v3d, rv3d, scene, view_layer, ob, glsl, NULL); if (!glsl) dm->drawFacesSolid(dm, NULL, 0, GPU_object_material_bind); @@ -5481,9 +5459,8 @@ static bool drawCurveDerivedMesh( * Only called by #drawDispList * \return true when nothing was drawn */ -static bool drawDispList_nobackface( - const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, View3D *v3d, RegionView3D *rv3d, - Base *base, const char dt, const short dflag, const unsigned char ob_wire_col[4]) +static bool drawDispList_nobackface(Scene *scene, ViewLayer *view_layer, View3D *v3d, RegionView3D *rv3d, Base *base, + const char dt, const short dflag, const unsigned char ob_wire_col[4]) { Object *ob = base->object; ListBase *lb = NULL; @@ -5523,13 +5500,13 @@ static bool drawDispList_nobackface( /* pass */ } else { - if (draw_glsl_material(eval_ctx, scene, view_layer, ob, v3d, dt)) { - GPU_begin_object_materials(v3d, rv3d, scene, view_layer, ob, 1, eval_ctx->object_mode, NULL); + if (draw_glsl_material(scene, view_layer, ob, v3d, dt)) { + GPU_begin_object_materials(v3d, rv3d, scene, view_layer, ob, 1, NULL); drawDispListsolid(lb, ob, dflag, ob_wire_col, true); GPU_end_object_materials(); } else { - GPU_begin_object_materials(v3d, rv3d, scene, view_layer, ob, 0, eval_ctx->object_mode, NULL); + GPU_begin_object_materials(v3d, rv3d, scene, view_layer, ob, 0, NULL); drawDispListsolid(lb, ob, dflag, ob_wire_col, false); GPU_end_object_materials(); } @@ -5558,13 +5535,13 @@ static bool drawDispList_nobackface( if (dl->nors == NULL) BKE_displist_normals_add(lb); - if (draw_glsl_material(eval_ctx, scene, view_layer, ob, v3d, dt)) { - GPU_begin_object_materials(v3d, rv3d, scene, view_layer, ob, 1, eval_ctx->object_mode, NULL); + if (draw_glsl_material(scene, view_layer, ob, v3d, dt)) { + GPU_begin_object_materials(v3d, rv3d, scene, view_layer, ob, 1, NULL); drawDispListsolid(lb, ob, dflag, ob_wire_col, true); GPU_end_object_materials(); } else { - GPU_begin_object_materials(v3d, rv3d, scene, view_layer, ob, 0, eval_ctx->object_mode, NULL); + GPU_begin_object_materials(v3d, rv3d, scene, view_layer, ob, 0, NULL); drawDispListsolid(lb, ob, dflag, ob_wire_col, false); GPU_end_object_materials(); } @@ -5583,13 +5560,13 @@ static bool drawDispList_nobackface( if (solid) { - if (draw_glsl_material(eval_ctx, scene, view_layer, ob, v3d, dt)) { - GPU_begin_object_materials(v3d, rv3d, scene, view_layer, ob, 1, eval_ctx->object_mode, NULL); + if (draw_glsl_material(scene, view_layer, ob, v3d, dt)) { + GPU_begin_object_materials(v3d, rv3d, scene, view_layer, ob, 1, NULL); drawDispListsolid(lb, ob, dflag, ob_wire_col, true); GPU_end_object_materials(); } else { - GPU_begin_object_materials(v3d, rv3d, scene, view_layer, ob, 0, eval_ctx->object_mode, NULL); + GPU_begin_object_materials(v3d, rv3d, scene, view_layer, ob, 0, NULL); drawDispListsolid(lb, ob, dflag, ob_wire_col, false); GPU_end_object_materials(); } @@ -5620,7 +5597,7 @@ static bool drawDispList( ensure_curve_cache(eval_ctx, scene, base->object); #endif - if (drawCurveDerivedMesh(eval_ctx, scene, view_layer, v3d, rv3d, base, dt) == false) { + if (drawCurveDerivedMesh(scene, view_layer, v3d, rv3d, base, dt) == false) { retval = false; } else { @@ -5636,7 +5613,7 @@ static bool drawDispList( glFrontFace(mode); - retval = drawDispList_nobackface(eval_ctx, scene, view_layer, v3d, rv3d, base, dt, dflag, ob_wire_col); + retval = drawDispList_nobackface(scene, view_layer, v3d, rv3d, base, dt, dflag, ob_wire_col); if (mode != GL_CCW) { glFrontFace(GL_CCW); @@ -5960,7 +5937,7 @@ static void draw_new_particle_system( if (pars == NULL) return; /* don't draw normal paths in edit mode */ - if (psys_in_edit_mode(eval_ctx, eval_ctx->view_layer, psys) && (pset->flag & PE_DRAW_PART) == 0) + if (psys_in_edit_mode(eval_ctx->view_layer, psys) && (pset->flag & PE_DRAW_PART) == 0) return; if (part->draw_as == PART_DRAW_REND) @@ -8319,7 +8296,7 @@ static void draw_object_selected_outline( if (has_faces && ED_view3d_boundbox_clip(rv3d, ob->bb)) { glLineWidth(UI_GetThemeValuef(TH_OUTLINE_WIDTH) * 2.0f); if (dm) { - draw_mesh_object_outline(eval_ctx, v3d, ob, dm, ob_wire_col); + draw_mesh_object_outline(v3d, ob, dm, ob_wire_col); } else { /* only draw 'solid' parts of the display list as wire. */ @@ -8336,7 +8313,7 @@ static void draw_object_selected_outline( } } else if (ob->type == OB_ARMATURE) { - if (!(eval_ctx->object_mode & OB_MODE_POSE && base == view_layer->basact)) { + if (!(ob->mode & OB_MODE_POSE && base == view_layer->basact)) { glLineWidth(UI_GetThemeValuef(TH_OUTLINE_WIDTH) * 2.0f); draw_armature(eval_ctx, scene, view_layer, v3d, ar, base, OB_WIRE, 0, ob_wire_col, true); } @@ -8447,13 +8424,11 @@ static void draw_rigid_body_pivot(bRigidBodyJointConstraint *data, immUnbindProgram(); } -void draw_object_wire_color( - const EvaluationContext *eval_ctx, ViewLayer *view_layer, - Base *base, unsigned char r_ob_wire_col[4]) +void draw_object_wire_color(ViewLayer *view_layer, Base *base, unsigned char r_ob_wire_col[4]) { Object *ob = base->object; int colindex = 0; - const bool is_edit = (eval_ctx->object_mode & OB_MODE_EDIT) != 0; + const bool is_edit = (ob->mode & OB_MODE_EDIT) != 0; /* confusing logic here, there are 2 methods of setting the color * 'colortab[colindex]' and 'theme_id', colindex overrides theme_id. * @@ -8461,7 +8436,7 @@ void draw_object_wire_color( int theme_id = is_edit ? TH_WIRE_EDIT : TH_WIRE; int theme_shade = 0; - if (((eval_ctx->object_mode & OB_MODE_EDIT) == 0) && + if (((ob->mode & OB_MODE_EDIT) == 0) && (G.moving & G_TRANSFORM_OBJ) && ((base->flag & BASE_SELECTED) || (base->flag_legacy & BA_WAS_SEL))) { @@ -8515,12 +8490,10 @@ void draw_object_wire_color( r_ob_wire_col[3] = 255; } -static void draw_object_matcap_check( - const EvaluationContext *eval_ctx, View3D *v3d, Object *ob) +static void draw_object_matcap_check(View3D *v3d, Object *ob) { /* fixed rule, active object draws as matcap */ - BLI_assert((eval_ctx->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)) == 0); - UNUSED_VARS_NDEBUG(eval_ctx); + BLI_assert((ob->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)) == 0); (void)ob; if (v3d->defmaterial == NULL) { @@ -8606,9 +8579,10 @@ void draw_object( unsigned char _ob_wire_col[4]; /* dont initialize this */ const unsigned char *ob_wire_col = NULL; /* dont initialize this, use NULL crashes as a way to find invalid use */ bool zbufoff = false, is_paint = false, empty_object = false; - const bool is_obact = (ob == OBACT(view_layer)); + Object *ob_active = OBACT(view_layer); + const bool is_obact = (ob == ob_active); /* this could be moved to a 'dflag'. */ - const bool is_obedit = (is_obact && (ob == OBEDIT_FROM_EVAL_CTX(eval_ctx))); + const bool is_obedit = (is_obact && (ob == OBEDIT_FROM_OBACT(ob_active))); const bool render_override = (v3d->flag2 & V3D_RENDER_OVERRIDE) != 0; const bool is_picking = (G.f & G_PICKSEL) != 0; const bool has_particles = (ob->particlesystem.first != NULL); @@ -8634,7 +8608,7 @@ void draw_object( return; } - if (eval_ctx->object_mode == OB_MODE_OBJECT) { + if (ob->mode == OB_MODE_OBJECT) { ParticleSystem *psys; skip_object = render_override; @@ -8674,7 +8648,7 @@ void draw_object( /* xray delay? */ if ((dflag & DRAW_PICKING) == 0 && (base->flag_legacy & OB_FROMDUPLI) == 0 && (v3d->flag2 & V3D_RENDER_SHADOW) == 0) { /* don't do xray in particle mode, need the z-buffer */ - if (!(eval_ctx->object_mode & OB_MODE_PARTICLE_EDIT)) { + if (!(ob->mode & OB_MODE_PARTICLE_EDIT)) { /* xray and transp are set when it is drawing the 2nd/3rd pass */ if (!v3d->xray && !v3d->transp && (ob->dtx & OB_DRAWXRAY) && !(ob->dtx & OB_DRAWTRANSP)) { ED_view3d_after_add(&v3d->afterdraw_xray, base, dflag); @@ -8725,7 +8699,7 @@ void draw_object( ED_view3d_project_base(ar, base); - draw_object_wire_color(eval_ctx, view_layer, base, _ob_wire_col); + draw_object_wire_color(view_layer, base, _ob_wire_col); ob_wire_col = _ob_wire_col; //glColor3ubv(ob_wire_col); @@ -8741,14 +8715,14 @@ void draw_object( /* faceselect exception: also draw solid when (dt == wire), except in editmode */ if (is_obact) { - if (eval_ctx->object_mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)) { + if (ob->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)) { if (ob->type == OB_MESH) { if (dt < OB_SOLID) { zbufoff = true; dt = OB_SOLID; } - if (eval_ctx->object_mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT)) { + if (ob->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT)) { dt = OB_PAINT; } @@ -8764,13 +8738,13 @@ void draw_object( (is_paint == false && is_picking == false) && ((v3d->flag2 & V3D_RENDER_SHADOW) == 0)) { - draw_object_matcap_check(eval_ctx, v3d, ob); + draw_object_matcap_check(v3d, ob); } /* draw-extra supported for boundbox drawmode too */ if (dt >= OB_BOUNDBOX) { dtx = ob->dtx; - if (eval_ctx->object_mode & OB_MODE_EDIT) { + if (ob->mode & OB_MODE_EDIT) { /* the only 2 extra drawtypes alowed in editmode */ dtx = dtx & (OB_DRAWWIRE | OB_TEXSPACE); } @@ -8779,7 +8753,7 @@ void draw_object( if (!skip_object) { /* draw outline for selected objects, mesh does itself */ if ((v3d->flag & V3D_SELECT_OUTLINE) && !render_override && ob->type != OB_MESH) { - if (dt > OB_WIRE && (eval_ctx->object_mode & OB_MODE_EDIT) == 0 && (dflag & DRAW_SCENESET) == 0) { + if (dt > OB_WIRE && (ob->mode & OB_MODE_EDIT) == 0 && (dflag & DRAW_SCENESET) == 0) { if (!(ob->dtx & OB_DRAWWIRE) && (base->flag & BASE_SELECTED) && !(dflag & (DRAW_PICKING | DRAW_CONSTCOLOR))) { draw_object_selected_outline(eval_ctx, scene, view_layer, v3d, ar, base, ob_wire_col); } @@ -8887,7 +8861,7 @@ void draw_object( case OB_LATTICE: if (!render_override) { /* Do not allow boundbox in edit nor pose mode! */ - if ((dt == OB_BOUNDBOX) && (eval_ctx->object_mode & OB_MODE_EDIT)) + if ((dt == OB_BOUNDBOX) && (ob->mode & OB_MODE_EDIT)) dt = OB_WIRE; if (dt == OB_BOUNDBOX) { draw_bounding_volume(ob, ob->boundtype, ob_wire_col); @@ -8903,7 +8877,7 @@ void draw_object( case OB_ARMATURE: if (!render_override) { /* Do not allow boundbox in edit nor pose mode! */ - if ((dt == OB_BOUNDBOX) && (eval_ctx->object_mode & (OB_MODE_EDIT | OB_MODE_POSE))) + if ((dt == OB_BOUNDBOX) && (ob->mode & (OB_MODE_EDIT | OB_MODE_POSE))) dt = OB_WIRE; if (dt == OB_BOUNDBOX) { draw_bounding_volume(ob, ob->boundtype, ob_wire_col); @@ -8971,7 +8945,7 @@ afterdraw: for (psys = ob->particlesystem.first; psys; psys = psys->next) { /* run this so that possible child particles get cached */ - if (eval_ctx->object_mode & OB_MODE_PARTICLE_EDIT && is_obact) { + if (ob->mode & OB_MODE_PARTICLE_EDIT && is_obact) { PTCacheEdit *edit = PE_create_current(eval_ctx, scene, ob); if (edit && edit->psys == psys) draw_update_ptcache_edit(eval_ctx, scene, ob, edit); @@ -8992,7 +8966,7 @@ afterdraw: (is_obedit == false)) { - if (eval_ctx->object_mode & OB_MODE_PARTICLE_EDIT && is_obact) { + if (ob->mode & OB_MODE_PARTICLE_EDIT && is_obact) { PTCacheEdit *edit = PE_create_current(eval_ctx, scene, ob); if (edit) { gpuLoadMatrix(rv3d->viewmat); @@ -9093,7 +9067,7 @@ afterdraw: } } - if ((ob->gameflag & OB_BOUNDS) && (eval_ctx->object_mode == OB_MODE_OBJECT)) { + if ((ob->gameflag & OB_BOUNDS) && (ob->mode == OB_MODE_OBJECT)) { if (ob->boundtype != ob->collision_boundtype || (dtx & OB_DRAWBOUNDOX) == 0) { setlinestyle(2); draw_bounding_volume(ob, ob->collision_boundtype, ob_wire_col); @@ -9189,7 +9163,7 @@ afterdraw: } /* object centers, need to be drawn in viewmat space for speed, but OK for picking select */ - if (!is_obact || !(eval_ctx->object_mode & OB_MODE_ALL_PAINT)) { + if (!is_obact || !(ob->mode & OB_MODE_ALL_PAINT)) { int do_draw_center = -1; /* defines below are zero or positive... */ if (render_override) { @@ -9789,7 +9763,7 @@ void draw_object_backbufsel( switch (ob->type) { case OB_MESH: - if (eval_ctx->object_mode & OB_MODE_EDIT) { + if (ob->mode & OB_MODE_EDIT) { Mesh *me = ob->data; BMEditMesh *em = me->edit_btmesh; @@ -9835,7 +9809,7 @@ void draw_object_backbufsel( Mesh *me = ob->data; if ((me->editflag & ME_EDIT_PAINT_VERT_SEL) && /* currently vertex select supports weight paint and vertex paint*/ - ((eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT) || (eval_ctx->object_mode & OB_MODE_VERTEX_PAINT))) + ((ob->mode & OB_MODE_WEIGHT_PAINT) || (ob->mode & OB_MODE_VERTEX_PAINT))) { bbs_mesh_solid_verts(eval_ctx, scene, ob); } @@ -9864,7 +9838,7 @@ static void draw_object_mesh_instance( Mesh *me = ob->data; DerivedMesh *dm = NULL, *edm = NULL; - if (eval_ctx->object_mode & OB_MODE_EDIT) { + if (ob->mode & OB_MODE_EDIT) { edm = editbmesh_get_derived_base(ob, me->edit_btmesh, CD_MASK_BAREMESH); DM_update_materials(edm, ob); } @@ -9882,11 +9856,11 @@ static void draw_object_mesh_instance( } else { if (outline) - draw_mesh_object_outline(eval_ctx, v3d, ob, dm ? dm : edm, ob_wire_col); + draw_mesh_object_outline(v3d, ob, dm ? dm : edm, ob_wire_col); if (dm) { - bool glsl = draw_glsl_material(eval_ctx, scene, view_layer, ob, v3d, dt); - GPU_begin_object_materials(v3d, rv3d, scene, view_layer, ob, glsl, eval_ctx->object_mode, NULL); + bool glsl = draw_glsl_material(scene, view_layer, ob, v3d, dt); + GPU_begin_object_materials(v3d, rv3d, scene, view_layer, ob, glsl, NULL); } glFrontFace((ob->transflag & OB_NEG_SCALE) ? GL_CW : GL_CCW); diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 3cf915cd029..abfbccdcc27 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -910,7 +910,9 @@ static void view3d_main_region_listener( case ND_SELECT: { WM_manipulatormap_tag_refresh(mmap); - Object *obedit = OBEDIT_FROM_WINDOW(wmn->window); + + ViewLayer *view_layer = WM_window_get_active_view_layer(wmn->window); + Object *obedit = OBEDIT_FROM_VIEW_LAYER(view_layer); if (obedit) { /* TODO(sergey): Notifiers shouldn't really be doing DEG tags. */ DEG_id_tag_update((ID *)obedit->data, DEG_TAG_SELECT_UPDATE); @@ -1127,8 +1129,9 @@ static void view3d_main_region_message_subscribe( /* concept is to retrieve cursor type context-less */ static void view3d_main_region_cursor(wmWindow *win, ScrArea *UNUSED(sa), ARegion *UNUSED(ar)) { - WorkSpace *workspace = WM_window_get_active_workspace(win); - if (workspace->object_mode & OB_MODE_EDIT) { + ViewLayer *view_layer = WM_window_get_active_view_layer(win); + Object *obedit = OBEDIT_FROM_VIEW_LAYER(view_layer); + if (obedit) { WM_cursor_set(win, CURSOR_EDIT); } else { @@ -1380,9 +1383,9 @@ static int view3d_context(const bContext *C, const char *member, bContextDataRes Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); if (view_layer->basact) { - const WorkSpace *workspace = CTX_wm_workspace(C); + Object *ob = view_layer->basact->object; /* if hidden but in edit mode, we still display, can happen with animation */ - if ((view_layer->basact->flag & BASE_VISIBLED) != 0 || (workspace->object_mode & OB_MODE_EDIT)) { + if ((view_layer->basact->flag & BASE_VISIBLED) != 0 || (ob->mode & OB_MODE_EDIT)) { CTX_data_pointer_set(result, &scene->id, &RNA_ObjectBase, view_layer->basact); } } @@ -1392,10 +1395,9 @@ static int view3d_context(const bContext *C, const char *member, bContextDataRes else if (CTX_data_equals(member, "active_object")) { ViewLayer *view_layer = CTX_data_view_layer(C); if (view_layer->basact) { - const WorkSpace *workspace = CTX_wm_workspace(C); Object *ob = view_layer->basact->object; /* if hidden but in edit mode, we still display, can happen with animation */ - if ((view_layer->basact->flag & BASE_VISIBLED) != 0 || (workspace->object_mode & OB_MODE_EDIT) != 0) { + if ((view_layer->basact->flag & BASE_VISIBLED) != 0 || (ob->mode & OB_MODE_EDIT) != 0) { CTX_data_id_pointer_set(result, &ob->id); } } diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index bd62a4fc3bf..644a6956e54 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -787,12 +787,10 @@ static void do_view3d_vgroup_buttons(bContext *C, void *UNUSED(arg), int event) static int view3d_panel_vgroup_poll(const bContext *C, PanelType *UNUSED(pt)) { - const WorkSpace *workspace = CTX_wm_workspace(C); ViewLayer *view_layer = CTX_data_view_layer(C); Object *ob = OBACT(view_layer); - if (ob && (BKE_object_is_in_editmode_vgroup(ob) || - BKE_object_is_in_wpaint_select_vert(ob, workspace->object_mode))) + BKE_object_is_in_wpaint_select_vert(ob))) { MDeformVert *dvert_act = ED_mesh_active_dvert_get_only(ob); if (dvert_act) { @@ -1130,7 +1128,6 @@ static int view3d_panel_transform_poll(const bContext *C, PanelType *UNUSED(pt)) static void view3d_panel_transform(const bContext *C, Panel *pa) { uiBlock *block; - const WorkSpace *workspace = CTX_wm_workspace(C); Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); Object *obedit = CTX_data_edit_object(C); @@ -1155,7 +1152,7 @@ static void view3d_panel_transform(const bContext *C, Panel *pa) v3d_editvertex_buts(col, v3d, ob, lim); } } - else if (workspace->object_mode & OB_MODE_POSE) { + else if (ob->mode & OB_MODE_POSE) { v3d_posearmature_buts(col, ob); } else { diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 152d7de4924..596bf28f6b7 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -751,7 +751,7 @@ void ED_view3d_draw_depth( else #endif /* WITH_OPENGL_LEGACY */ { - DRW_draw_depth_loop(graph, ar, v3d, eval_ctx->object_mode); + DRW_draw_depth_loop(graph, ar, v3d); } if (rv3d->rflag & RV3D_CLIPPING) { @@ -1325,7 +1325,7 @@ float ED_view3d_grid_scale(Scene *scene, View3D *v3d, const char **grid_unit) return v3d->grid * ED_scene_grid_scale(scene, grid_unit); } -static bool is_cursor_visible(const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer) +static bool is_cursor_visible(Scene *scene, ViewLayer *view_layer) { if (U.app_flag & USER_APP_VIEW3D_HIDE_CURSOR) { return false; @@ -1334,16 +1334,16 @@ static bool is_cursor_visible(const EvaluationContext *eval_ctx, Scene *scene, V Object *ob = OBACT(view_layer); /* don't draw cursor in paint modes, but with a few exceptions */ - if (ob && eval_ctx->object_mode & OB_MODE_ALL_PAINT) { + if (ob && ob->mode & OB_MODE_ALL_PAINT) { /* exception: object is in weight paint and has deforming armature in pose mode */ - if (eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT) { + if (ob->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 (eval_ctx->object_mode & OB_MODE_TEXTURE_PAINT) { - const Paint *p = BKE_paint_get_active(scene, view_layer, eval_ctx->object_mode); + else if (ob->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) { if ((scene->toolsettings->imapaint.flag & IMAGEPAINT_PROJECT_LAYER_CLONE) == 0) { @@ -1718,8 +1718,7 @@ static void draw_viewport_name(ARegion *ar, View3D *v3d, const rcti *rect) * framenum, object name, bone name (if available), marker name (if available) */ -static void draw_selected_name( - Scene *scene, Object *ob, const eObjectMode object_mode, const rcti *rect) +static void draw_selected_name(Scene *scene, Object *ob, rcti *rect) { const int cfra = CFRA; const char *msg_pin = " (Pinned)"; @@ -1761,7 +1760,7 @@ static void draw_selected_name( s += BLI_strcpy_rlen(s, arm->act_edbone->name); } } - else if (object_mode & OB_MODE_POSE) { + else if (ob->mode & OB_MODE_POSE) { if (arm->act_bone) { if (arm->act_bone->layer & arm->layer) { @@ -1774,9 +1773,9 @@ static void draw_selected_name( else if (ELEM(ob->type, OB_MESH, OB_LATTICE, OB_CURVE)) { /* try to display active bone and active shapekey too (if they exist) */ - if (ob->type == OB_MESH && object_mode & OB_MODE_WEIGHT_PAINT) { + if (ob->type == OB_MESH && ob->mode & OB_MODE_WEIGHT_PAINT) { Object *armobj = BKE_object_pose_armature_get(ob); - if (armobj) { + if (armobj && armobj->mode & OB_MODE_POSE) { bArmature *arm = armobj->data; if (arm->act_bone) { if (arm->act_bone->layer & arm->layer) { @@ -1863,10 +1862,9 @@ void view3d_draw_region_info(const bContext *C, ARegion *ar, const int offset) } if (U.uiflag & USER_DRAWVIEWINFO) { - const WorkSpace *workspace = CTX_wm_workspace(C); ViewLayer *view_layer = CTX_data_view_layer(C); Object *ob = OBACT(view_layer); - draw_selected_name(scene, ob, workspace->object_mode, &rect); + draw_selected_name(scene, ob, &rect); } #if 0 /* TODO */ if (grid_unit) { /* draw below the viewport name */ @@ -1960,7 +1958,7 @@ void ED_view3d_draw_offscreen_init(const EvaluationContext *eval_ctx, Scene *sce RenderEngineType *engine_type = eval_ctx->engine_type; if (engine_type->flag & RE_USE_LEGACY_PIPELINE) { /* shadow buffers, before we setup matrices */ - if (draw_glsl_material(eval_ctx, scene, view_layer, NULL, v3d, v3d->drawtype)) { + if (draw_glsl_material(scene, view_layer, NULL, v3d, v3d->drawtype)) { VP_deprecated_gpu_update_lamps_shadows_world(eval_ctx, scene, v3d); } } @@ -2051,7 +2049,7 @@ void ED_view3d_draw_offscreen( } else { DRW_draw_render_loop_offscreen( - eval_ctx->depsgraph, eval_ctx->engine_type, ar, v3d, eval_ctx->object_mode, + depsgraph, eval_ctx->engine_type, ar, v3d, do_sky, ofs, viewport); } @@ -2331,10 +2329,9 @@ ImBuf *ED_view3d_draw_offscreen_imbuf_simple( * * \{ */ -void VP_legacy_drawcursor( - const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, ARegion *ar, View3D *v3d) +void VP_legacy_drawcursor(Scene *scene, ViewLayer *view_layer, ARegion *ar, View3D *v3d) { - if (is_cursor_visible(eval_ctx, scene, view_layer)) { + if (is_cursor_visible(scene, view_layer)) { drawcursor(scene, ar, v3d); } } @@ -2349,9 +2346,9 @@ void VP_legacy_draw_viewport_name(ARegion *ar, View3D *v3d, const rcti *rect) draw_viewport_name(ar, v3d, rect); } -void VP_legacy_draw_selected_name(Scene *scene, Object *ob, eObjectMode object_mode, const rcti *rect) +void VP_legacy_draw_selected_name(Scene *scene, Object *ob, rcti *rect) { - draw_selected_name(scene, ob, object_mode, rect); + draw_selected_name(scene, ob, rect); } void VP_legacy_drawgrid(UnitSettings *unit, ARegion *ar, View3D *v3d, const char **grid_unit) diff --git a/source/blender/editors/space_view3d/view3d_draw_legacy.c b/source/blender/editors/space_view3d/view3d_draw_legacy.c index b7a1c8663f4..f1c251891b0 100644 --- a/source/blender/editors/space_view3d/view3d_draw_legacy.c +++ b/source/blender/editors/space_view3d/view3d_draw_legacy.c @@ -219,23 +219,23 @@ static void backdrawview3d( BLI_assert(ar->regiontype == RGN_TYPE_WINDOW); - if (obact && (eval_ctx->object_mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT) || - BKE_paint_select_face_test(obact, eval_ctx->object_mode))) + if (obact && (obact->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT) || + BKE_paint_select_face_test(obact))) { /* do nothing */ } /* texture paint mode sampling */ - else if (obact && (eval_ctx->object_mode & OB_MODE_TEXTURE_PAINT) && + else if (obact && (obact->mode & OB_MODE_TEXTURE_PAINT) && (v3d->drawtype > OB_WIRE)) { /* do nothing */ } - else if ((obact && (eval_ctx->object_mode & OB_MODE_PARTICLE_EDIT)) && + else if ((obact && (obact->mode & OB_MODE_PARTICLE_EDIT)) && V3D_IS_ZBUF(v3d)) { /* do nothing */ } - else if ((eval_ctx->object_mode & OB_MODE_EDIT) && (obedit != NULL) && + else if ((obedit && (obedit->mode & OB_MODE_EDIT)) && V3D_IS_ZBUF(v3d)) { /* do nothing */ @@ -1504,7 +1504,7 @@ static void view3d_draw_objects( Depsgraph *depsgraph = CTX_data_depsgraph(C); RegionView3D *rv3d = ar->regiondata; Base *base; - Object *obedit = OBEDIT_FROM_EVAL_CTX(eval_ctx); + Object *obedit = OBEDIT_FROM_VIEW_LAYER(view_layer); const bool do_camera_frame = !draw_offscreen; const bool draw_grids = !draw_offscreen && (v3d->flag2 & V3D_RENDER_OVERRIDE) == 0; const bool draw_floor = (rv3d->view == RV3D_VIEW_USER) || (rv3d->persp != RV3D_ORTHO); @@ -1934,9 +1934,8 @@ static void update_lods(Scene *scene, float camera_pos[3]) } #endif -static void view3d_main_region_draw_objects( - const bContext *C, Scene *scene, ViewLayer *view_layer, View3D *v3d, - ARegion *ar, const char **grid_unit) +static void view3d_main_region_draw_objects(const bContext *C, Scene *scene, ViewLayer *view_layer, View3D *v3d, + ARegion *ar, const char **grid_unit) { wmWindow *win = CTX_wm_window(C); EvaluationContext eval_ctx; @@ -1946,7 +1945,7 @@ static void view3d_main_region_draw_objects( CTX_data_eval_ctx(C, &eval_ctx); /* shadow buffers, before we setup matrices */ - if (draw_glsl_material(&eval_ctx, scene, view_layer, NULL, v3d, v3d->drawtype)) + if (draw_glsl_material(scene, view_layer, NULL, v3d, v3d->drawtype)) gpu_update_lamps_shadows_world(&eval_ctx, scene, v3d); /* reset default OpenGL lights if needed (i.e. after preferences have been altered) */ @@ -1988,13 +1987,10 @@ static void view3d_main_region_draw_objects( } } -static void view3d_main_region_draw_info( - const bContext *C, Scene *scene, - ARegion *ar, View3D *v3d, - const char *grid_unit, bool render_border) +static void view3d_main_region_draw_info(const bContext *C, Scene *scene, + ARegion *ar, View3D *v3d, + const char *grid_unit, bool render_border) { - EvaluationContext eval_ctx; - CTX_data_eval_ctx(C, &eval_ctx); const Depsgraph *depsgraph = CTX_data_depsgraph(C); ViewLayer *view_layer = CTX_data_view_layer(C); wmWindowManager *wm = CTX_wm_manager(C); @@ -2017,7 +2013,7 @@ static void view3d_main_region_draw_info( } if ((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) { - VP_legacy_drawcursor(&eval_ctx, scene, view_layer, ar, v3d); /* 3D cursor */ + VP_legacy_drawcursor(scene, view_layer, ar, v3d); /* 3D cursor */ if (U.uiflag & USER_SHOW_ROTVIEWICON) VP_legacy_draw_view_axis(rv3d, &rect); @@ -2026,7 +2022,7 @@ static void view3d_main_region_draw_info( if (U.uiflag & USER_DRAWVIEWINFO) { Object *ob = OBACT(view_layer); - VP_legacy_draw_selected_name(scene, ob, eval_ctx.object_mode, &rect); + VP_legacy_draw_selected_name(scene, ob, &rect); } } diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 45284c1805a..0ae69debf18 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -244,22 +244,21 @@ void view3d_orbit_apply_dyn_ofs( static bool view3d_orbit_calc_center(bContext *C, float r_dyn_ofs[3]) { static float lastofs[3] = {0, 0, 0}; - const WorkSpace *workspace = CTX_wm_workspace(C); bool is_set = false; Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); Object *ob_act = OBACT(view_layer); - if (ob_act && (workspace->object_mode & OB_MODE_ALL_PAINT) && + if (ob_act && (ob_act->mode & OB_MODE_ALL_PAINT) && /* with weight-paint + pose-mode, fall through to using calculateTransformCenter */ - ((workspace->object_mode & OB_MODE_WEIGHT_PAINT) && BKE_object_pose_armature_get(ob_act)) == 0) + ((ob_act->mode & OB_MODE_WEIGHT_PAINT) && BKE_object_pose_armature_get(ob_act)) == 0) { /* in case of sculpting use last average stroke position as a rotation * center, in other cases it's not clear what rotation center shall be * so just rotate around object origin */ - if (workspace->object_mode & (OB_MODE_SCULPT | OB_MODE_TEXTURE_PAINT | OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT)) { + if (ob_act->mode & (OB_MODE_SCULPT | OB_MODE_TEXTURE_PAINT | OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT)) { float stroke[3]; BKE_paint_stroke_get_average(scene, ob_act, stroke); copy_v3_v3(lastofs, stroke); @@ -269,7 +268,7 @@ static bool view3d_orbit_calc_center(bContext *C, float r_dyn_ofs[3]) } is_set = true; } - else if (ob_act && (workspace->object_mode & OB_MODE_EDIT) && (ob_act->type == OB_FONT)) { + else if (ob_act && (ob_act->mode & OB_MODE_EDIT) && (ob_act->type == OB_FONT)) { Curve *cu = ob_act->data; EditFont *ef = cu->editfont; int i; @@ -284,7 +283,7 @@ static bool view3d_orbit_calc_center(bContext *C, float r_dyn_ofs[3]) is_set = true; } - else if (ob_act == NULL || workspace->object_mode == OB_MODE_OBJECT) { + else if (ob_act == NULL || ob_act->mode == OB_MODE_OBJECT) { /* object mode use boundbox centers */ Base *base; unsigned int tot = 0; @@ -2793,7 +2792,6 @@ void VIEW3D_OT_view_all(wmOperatorType *ot) /* like a localview without local!, was centerview() in 2.4x */ static int viewselected_exec(bContext *C, wmOperator *op) { - const WorkSpace *workspace = CTX_wm_workspace(C); ARegion *ar = CTX_wm_region(C); View3D *v3d = CTX_wm_view3d(C); Scene *scene = CTX_data_scene(C); @@ -2817,10 +2815,16 @@ static int viewselected_exec(bContext *C, wmOperator *op) ob = NULL; } - if (ob && (workspace->object_mode & OB_MODE_WEIGHT_PAINT)) { - Object *ob_armature = BKE_object_pose_armature_get_visible(ob, view_layer); - if (ob_armature) { - ob = ob_armature; + if (ob && (ob->mode & OB_MODE_WEIGHT_PAINT)) { + /* hard-coded exception, we look for the one selected armature */ + /* this is weak code this way, we should make a generic active/selection callback interface once... */ + Base *base; + for (base = view_layer->object_bases.first; base; base = base->next) { + if (TESTBASELIB(base)) { + if (base->object->type == OB_ARMATURE) + if (base->object->mode & OB_MODE_POSE) + break; + } } } @@ -2842,17 +2846,17 @@ static int viewselected_exec(bContext *C, wmOperator *op) else if (obedit) { ok = ED_view3d_minmax_verts(obedit, min, max); /* only selected */ } - else if (ob && (workspace->object_mode & OB_MODE_POSE)) { + else if (ob && (ob->mode & OB_MODE_POSE)) { ok = BKE_pose_minmax(ob, min, max, true, true); } - else if (BKE_paint_select_face_test(ob, workspace->object_mode)) { + else if (BKE_paint_select_face_test(ob)) { ok = paintface_minmax(ob, min, max); } - else if (ob && (workspace->object_mode & OB_MODE_PARTICLE_EDIT)) { + else if (ob && (ob->mode & OB_MODE_PARTICLE_EDIT)) { ok = PE_minmax(scene, view_layer, min, max); } else if (ob && - (workspace->object_mode & (OB_MODE_SCULPT | OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT))) + (ob->mode & (OB_MODE_SCULPT | OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT))) { BKE_paint_stroke_get_average(scene, ob, min); copy_v3_v3(max, min); @@ -2964,8 +2968,7 @@ static int view_lock_to_active_exec(bContext *C, wmOperator *UNUSED(op)) v3d->ob_centre = obact; /* can be NULL */ if (obact && obact->type == OB_ARMATURE) { - const WorkSpace *workspace = CTX_wm_workspace(C); - if (workspace->object_mode & OB_MODE_POSE) { + if (obact->mode & OB_MODE_POSE) { bPoseChannel *pcham_act = BKE_pose_channel_active(obact); if (pcham_act) { BLI_strncpy(v3d->ob_centre_bone, pcham_act->name, sizeof(v3d->ob_centre_bone)); diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index 35a37590642..3ed6c87b750 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -276,7 +276,6 @@ void uiTemplateEditModeSelection(uiLayout *layout, struct bContext *C) void uiTemplateHeader3D(uiLayout *layout, struct bContext *C) { - const WorkSpace *workspace = CTX_wm_workspace(C); bScreen *screen = CTX_wm_screen(C); ScrArea *sa = CTX_wm_area(C); View3D *v3d = sa->spacedata.first; @@ -291,7 +290,7 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C) uiLayout *row; bool is_paint = ( ob && !(gpd && (gpd->flag & GP_DATA_STROKE_EDITMODE)) && - ELEM(workspace->object_mode, + ELEM(ob->mode, OB_MODE_SCULPT, OB_MODE_VERTEX_PAINT, OB_MODE_WEIGHT_PAINT, OB_MODE_TEXTURE_PAINT)); RNA_pointer_create(&screen->id, &RNA_SpaceView3D, v3d, &v3dptr); @@ -306,18 +305,18 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C) row = uiLayoutRow(layout, true); uiItemR(row, &v3dptr, "pivot_point", UI_ITEM_R_ICON_ONLY, "", ICON_NONE); - if (!ob || ELEM(workspace->object_mode, OB_MODE_OBJECT, OB_MODE_POSE, OB_MODE_WEIGHT_PAINT)) { + if (!ob || ELEM(ob->mode, OB_MODE_OBJECT, OB_MODE_POSE, OB_MODE_WEIGHT_PAINT)) { uiItemR(row, &v3dptr, "use_pivot_point_align", UI_ITEM_R_ICON_ONLY, "", ICON_NONE); } if (obedit == NULL && is_paint) { /* Manipulators aren't used in paint modes */ - if (!ELEM(workspace->object_mode, OB_MODE_SCULPT, OB_MODE_PARTICLE_EDIT)) { + if (!ELEM(ob->mode, OB_MODE_SCULPT, OB_MODE_PARTICLE_EDIT)) { /* masks aren't used for sculpt and particle painting */ PointerRNA meshptr; RNA_pointer_create(ob->data, &RNA_Mesh, ob->data, &meshptr); - if (workspace->object_mode & (OB_MODE_TEXTURE_PAINT)) { + if (ob->mode & (OB_MODE_TEXTURE_PAINT)) { uiItemR(layout, &meshptr, "use_paint_mask", UI_ITEM_R_ICON_ONLY, "", ICON_NONE); } else { diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index 56e5c4e932c..0f56f1265bc 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -54,7 +54,6 @@ struct wmKeyConfig; struct wmManipulatorGroupType; struct wmManipulatorType; struct wmWindowManager; -struct EvaluationContext; /* drawing flags: */ enum { @@ -155,19 +154,13 @@ void draw_object_select( const struct EvaluationContext *eval_ctx, Scene *scene, struct ViewLayer *view_layer, struct ARegion *ar, View3D *v3d, Base *base, const short dflag); -void draw_mesh_object_outline( - const struct EvaluationContext *eval_ctx, View3D *v3d, - struct Object *ob, struct DerivedMesh *dm, const unsigned char ob_wire_col[4]); +void draw_mesh_object_outline(View3D *v3d, struct Object *ob, struct DerivedMesh *dm, const unsigned char ob_wire_col[4]); -bool draw_glsl_material( - const struct EvaluationContext *eval_ctx, Scene *scene, struct ViewLayer *view_layer, - struct Object *ob, View3D *v3d, const char dt); +bool draw_glsl_material(Scene *scene, struct ViewLayer *view_layer, struct Object *ob, View3D *v3d, const char dt); void draw_object_instance(const struct EvaluationContext *eval_ctx, Scene *scene, struct ViewLayer *view_layer, View3D *v3d, RegionView3D *rv3d, struct Object *ob, const char dt, int outline, const float wire_col[4]); void draw_object_backbufsel(const struct EvaluationContext *eval_ctx, Scene *scene, View3D *v3d, RegionView3D *rv3d, struct Object *ob); -void draw_object_wire_color( - const struct EvaluationContext *eval_ctx, struct ViewLayer *, - Base *base, unsigned char r_ob_wire_col[4]); +void draw_object_wire_color(struct ViewLayer *, Base *base, unsigned char r_ob_wire_col[4]); void drawaxes(const float viewmat_local[4][4], float size, char drawtype, const unsigned char color[4]); void drawlamp(View3D *v3d, RegionView3D *rv3d, Base *base, const char dt, const short dflag, const unsigned char ob_wire_col[4], @@ -216,10 +209,8 @@ void draw_mesh_paint_vcolor_faces(struct DerivedMesh *dm, const bool use_light, void draw_mesh_paint_weight_edges(RegionView3D *rv3d, struct DerivedMesh *dm, const bool use_depth, const bool use_alpha, void *edgemask_cb, void *user_data); -void draw_mesh_paint( - const struct EvaluationContext *eval_ctx, - View3D *v3d, RegionView3D *rv3d, - struct Object *ob, struct DerivedMesh *dm, const int draw_flags); +void draw_mesh_paint(View3D *v3d, RegionView3D *rv3d, + struct Object *ob, struct DerivedMesh *dm, const int draw_flags); /* drawsimdebug.c */ void draw_sim_debug_data(Scene *scene, View3D *v3d, ARegion *ar); @@ -376,12 +367,10 @@ extern bool view3d_camera_border_hack_test; #endif /* temporary for legacy viewport to work */ -void VP_legacy_drawcursor( - const struct EvaluationContext *eval_ctx, Scene *scene, - struct ViewLayer *view_layer, ARegion *ar, View3D *v3d); +void VP_legacy_drawcursor(Scene *scene, struct ViewLayer *view_layer, ARegion *ar, View3D *v3d); void VP_legacy_draw_view_axis(RegionView3D *rv3d, const rcti *rect); void VP_legacy_draw_viewport_name(ARegion *ar, View3D *v3d, const rcti *rect); -void VP_legacy_draw_selected_name(Scene *scene, struct Object *ob, eObjectMode object_mode, const rcti *rect); +void VP_legacy_draw_selected_name(Scene *scene, struct Object *ob, rcti *rect); void VP_legacy_drawgrid(UnitSettings *unit, ARegion *ar, View3D *v3d, const char **grid_unit); void VP_legacy_drawfloor(Scene *scene, View3D *v3d, const char **grid_unit, bool write_depth); void VP_legacy_view3d_main_region_setup_view(const struct EvaluationContext *eval_ctx, Scene *scene, View3D *v3d, ARegion *ar, float viewmat[4][4], float winmat[4][4]); diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index 0d37d0bd680..be8e63dffe6 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -210,7 +210,6 @@ static void edbm_backbuf_check_and_select_tfaces(Mesh *me, const bool select) /* *********************** GESTURE AND LASSO ******************* */ typedef struct LassoSelectUserData { - const EvaluationContext *eval_ctx; ViewContext *vc; const rcti *rect; const rctf *rect_fl; @@ -254,15 +253,14 @@ static int view3d_selectable_data(bContext *C) return 0; if (ob) { - const WorkSpace *workspace = CTX_wm_workspace(C); - if (workspace->object_mode & OB_MODE_EDIT) { + if (ob->mode & OB_MODE_EDIT) { if (ob->type == OB_FONT) { return 0; } } else { - if ((workspace->object_mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)) && - !BKE_paint_select_elem_test(ob, workspace->object_mode)) + if ((ob->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)) && + !BKE_paint_select_elem_test(ob)) { return 0; } @@ -393,7 +391,6 @@ static void object_deselect_all_visible(ViewLayer *view_layer) } static void do_lasso_select_objects( - const EvaluationContext *eval_ctx, ViewContext *vc, const int mcords[][2], const short moves, const bool extend, const bool select) { @@ -410,7 +407,7 @@ static void do_lasso_select_objects( ED_object_base_select(base, select ? BA_SELECT : BA_DESELECT); } } - if (vc->obact == base->object && (eval_ctx->object_mode & OB_MODE_POSE)) { + if (vc->obact == base->object && (base->object->mode & OB_MODE_POSE)) { do_lasso_select_pose(vc, base->object, mcords, moves, select); } } @@ -466,7 +463,7 @@ static void do_lasso_select_mesh__doSelectFace(void *userData, BMFace *efa, cons } static void do_lasso_select_mesh( - const EvaluationContext *eval_ctx, ViewContext *vc, + const struct EvaluationContext *eval_ctx, ViewContext *vc, const int mcords[][2], short moves, bool extend, bool select) { LassoSelectUserData data; @@ -522,8 +519,7 @@ static void do_lasso_select_mesh( EDBM_selectmode_flush(vc->em); } -static void do_lasso_select_curve__doSelect( - void *userData, Nurb *UNUSED(nu), BPoint *bp, BezTriple *bezt, int beztindex, const float screen_co[2]) +static void do_lasso_select_curve__doSelect(void *userData, Nurb *UNUSED(nu), BPoint *bp, BezTriple *bezt, int beztindex, const float screen_co[2]) { LassoSelectUserData *data = userData; Object *obedit = data->vc->obedit; @@ -598,8 +594,7 @@ static void do_lasso_select_lattice(ViewContext *vc, const int mcords[][2], shor lattice_foreachScreenVert(vc, do_lasso_select_lattice__doSelect, &data, V3D_PROJ_TEST_CLIP_DEFAULT); } -static void do_lasso_select_armature__doSelectBone( - void *userData, struct EditBone *ebone, const float screen_co_a[2], const float screen_co_b[2]) +static void do_lasso_select_armature__doSelectBone(void *userData, struct EditBone *ebone, const float screen_co_a[2], const float screen_co_b[2]) { LassoSelectUserData *data = userData; bArmature *arm = data->vc->obedit->data; @@ -705,8 +700,7 @@ static void do_lasso_select_meta(ViewContext *vc, const int mcords[][2], short m mball_foreachScreenElem(vc, do_lasso_select_mball__doSelectElem, &data, V3D_PROJ_TEST_CLIP_DEFAULT); } -static void do_lasso_select_meshobject__doSelectVert( - void *userData, MVert *mv, const float screen_co[2], int UNUSED(index)) +static void do_lasso_select_meshobject__doSelectVert(void *userData, MVert *mv, const float screen_co[2], int UNUSED(index)) { LassoSelectUserData *data = userData; @@ -716,9 +710,7 @@ static void do_lasso_select_meshobject__doSelectVert( SET_FLAG_FROM_TEST(mv->flag, data->select, SELECT); } } -static void do_lasso_select_paintvert( - const EvaluationContext *eval_ctx, - ViewContext *vc, const int mcords[][2], short moves, bool extend, bool select) +static void do_lasso_select_paintvert(const struct EvaluationContext *eval_ctx, ViewContext *vc, const int mcords[][2], short moves, bool extend, bool select) { const bool use_zbuf = (vc->v3d->flag & V3D_ZBUF_SELECT) != 0; Object *ob = vc->obact; @@ -749,8 +741,8 @@ static void do_lasso_select_paintvert( ED_view3d_init_mats_rv3d(vc->obact, vc->rv3d); - meshobject_foreachScreenVert( - eval_ctx, vc, do_lasso_select_meshobject__doSelectVert, &data, V3D_PROJ_TEST_CLIP_DEFAULT); + meshobject_foreachScreenVert(eval_ctx, vc, do_lasso_select_meshobject__doSelectVert, &data, V3D_PROJ_TEST_CLIP_DEFAULT); + } if (select == false) { @@ -758,9 +750,7 @@ static void do_lasso_select_paintvert( } paintvert_flush_flags(ob); } -static void do_lasso_select_paintface( - const EvaluationContext *eval_ctx, - ViewContext *vc, const int mcords[][2], short moves, bool extend, bool select) +static void do_lasso_select_paintface(const struct EvaluationContext *eval_ctx, ViewContext *vc, const int mcords[][2], short moves, bool extend, bool select) { Object *ob = vc->obact; Mesh *me = ob->data; @@ -826,20 +816,20 @@ static void view3d_lasso_select( CTX_data_eval_ctx(C, &eval_ctx); if (vc->obedit == NULL) { /* Object Mode */ - if (BKE_paint_select_face_test(ob, eval_ctx.object_mode)) { + if (BKE_paint_select_face_test(ob)) { do_lasso_select_paintface(&eval_ctx, vc, mcords, moves, extend, select); } - else if (BKE_paint_select_vert_test(ob, eval_ctx.object_mode)) { + else if (BKE_paint_select_vert_test(ob)) { do_lasso_select_paintvert(&eval_ctx, vc, mcords, moves, extend, select); } - else if (ob && (eval_ctx.object_mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT))) { + else if (ob && (ob->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT))) { /* pass */ } - else if (ob && (eval_ctx.object_mode & OB_MODE_PARTICLE_EDIT)) { + else if (ob && (ob->mode & OB_MODE_PARTICLE_EDIT)) { PE_lasso_select(C, mcords, moves, extend, select); } else { - do_lasso_select_objects(&eval_ctx, vc, mcords, moves, extend, select); + do_lasso_select_objects(vc, mcords, moves, extend, select); WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, vc->scene); } } @@ -1510,10 +1500,7 @@ static bool ed_object_select_pick( } } } - else if (ED_do_pose_selectbuffer( - &eval_ctx, view_layer, - basact, buffer, hits, extend, deselect, toggle, do_nearest)) - { + else if (ED_do_pose_selectbuffer(view_layer, basact, buffer, hits, extend, deselect, toggle, do_nearest)) { /* then bone is found */ /* we make the armature selected: @@ -1526,7 +1513,7 @@ static bool ed_object_select_pick( WM_event_add_notifier(C, NC_OBJECT | ND_BONE_ACTIVE, basact->object); /* in weightpaint, we use selected bone to select vertexgroup, so no switch to new active object */ - if (BASACT(view_layer) && (eval_ctx.object_mode & OB_MODE_WEIGHT_PAINT)) { + if (BASACT(view_layer) && (BASACT(view_layer)->object->mode & OB_MODE_WEIGHT_PAINT)) { /* prevent activating */ basact = NULL; } @@ -1624,8 +1611,7 @@ bool edge_inside_circle(const float cent[2], float radius, const float screen_co return (dist_squared_to_line_segment_v2(cent, screen_co_a, screen_co_b) < radius_squared); } -static void do_paintvert_box_select__doSelectVert( - void *userData, MVert *mv, const float screen_co[2], int UNUSED(index)) +static void do_paintvert_box_select__doSelectVert(void *userData, MVert *mv, const float screen_co[2], int UNUSED(index)) { BoxSelectUserData *data = userData; @@ -1824,7 +1810,7 @@ static void do_mesh_box_select__doSelectFace(void *userData, BMFace *efa, const } } static int do_mesh_box_select( - const EvaluationContext *eval_ctx, ViewContext *vc, rcti *rect, bool select, bool extend) + const struct EvaluationContext *eval_ctx, ViewContext *vc, rcti *rect, bool select, bool extend) { BoxSelectUserData data; ToolSettings *ts = vc->scene->toolsettings; @@ -1878,7 +1864,7 @@ static int do_mesh_box_select( } static int do_meta_box_select( - const EvaluationContext *eval_ctx, ViewContext *vc, + const struct EvaluationContext *eval_ctx, ViewContext *vc, const rcti *rect, bool select, bool extend) { MetaBall *mb = (MetaBall *)vc->obedit->data; @@ -1914,7 +1900,7 @@ static int do_meta_box_select( } static int do_armature_box_select( - const EvaluationContext *eval_ctx, ViewContext *vc, + const struct EvaluationContext *eval_ctx, ViewContext *vc, const rcti *rect, bool select, bool extend) { bArmature *arm = vc->obedit->data; @@ -2023,7 +2009,7 @@ static int do_object_pose_box_select(bContext *C, ViewContext *vc, rcti *rect, b CTX_data_eval_ctx(C, &eval_ctx); - if ((ob) && (eval_ctx.object_mode & OB_MODE_POSE)) + if ((ob) && (ob->mode & OB_MODE_POSE)) bone_only = 1; else bone_only = 0; @@ -2178,16 +2164,16 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op) } } else { /* no editmode, unified for bones and objects */ - if (vc.obact && eval_ctx.object_mode & OB_MODE_SCULPT) { + if (vc.obact && vc.obact->mode & OB_MODE_SCULPT) { ret = ED_sculpt_mask_box_select(C, &vc, &rect, select, extend); } - else if (vc.obact && BKE_paint_select_face_test(vc.obact, eval_ctx.object_mode)) { + else if (vc.obact && BKE_paint_select_face_test(vc.obact)) { ret = do_paintface_box_select(&eval_ctx, &vc, &rect, select, extend); } - else if (vc.obact && BKE_paint_select_vert_test(vc.obact, eval_ctx.object_mode)) { + else if (vc.obact && BKE_paint_select_vert_test(vc.obact)) { ret = do_paintvert_box_select(&eval_ctx, &vc, &rect, select, extend); } - else if (vc.obact && eval_ctx.object_mode & OB_MODE_PARTICLE_EDIT) { + else if (vc.obact && vc.obact->mode & OB_MODE_PARTICLE_EDIT) { ret = PE_border_select(C, &rect, select, extend); } else { /* object mode with none active */ @@ -2273,7 +2259,6 @@ static bool ed_wpaint_vertex_select_pick( static int view3d_select_exec(bContext *C, wmOperator *op) { - const WorkSpace *workspace = CTX_wm_workspace(C); Object *obedit = CTX_data_edit_object(C); Object *obact = CTX_data_active_object(C); bool extend = RNA_boolean_get(op->ptr, "extend"); @@ -2285,9 +2270,9 @@ static int view3d_select_exec(bContext *C, wmOperator *op) * or paint-select to allow pose bone select with vert/face select */ bool object = (RNA_boolean_get(op->ptr, "object") && (obedit || - BKE_paint_select_elem_test(obact, workspace->object_mode) || + BKE_paint_select_elem_test(obact) || /* so its possible to select bones in weightpaint mode (LMB select) */ - (obact && (workspace->object_mode & OB_MODE_WEIGHT_PAINT) && BKE_object_pose_armature_get(obact)))); + (obact && (obact->mode & OB_MODE_WEIGHT_PAINT) && BKE_object_pose_armature_get(obact)))); bool retval = false; int location[2]; @@ -2321,11 +2306,11 @@ static int view3d_select_exec(bContext *C, wmOperator *op) retval = ED_curve_editfont_select_pick(C, location, extend, deselect, toggle); } - else if (obact && workspace->object_mode & OB_MODE_PARTICLE_EDIT) + else if (obact && obact->mode & OB_MODE_PARTICLE_EDIT) return PE_mouse_particles(C, location, extend, deselect, toggle); - else if (obact && BKE_paint_select_face_test(obact, workspace->object_mode)) + else if (obact && BKE_paint_select_face_test(obact)) retval = paintface_mouse_select(C, obact, location, extend, deselect, toggle); - else if (BKE_paint_select_vert_test(obact, workspace->object_mode)) + else if (BKE_paint_select_vert_test(obact)) retval = ed_wpaint_vertex_select_pick(C, location, extend, deselect, toggle, obact); else retval = ed_object_select_pick(C, location, extend, deselect, toggle, center, enumerate, object); @@ -2432,9 +2417,7 @@ static void mesh_circle_doSelectFace(void *userData, BMFace *efa, const float sc } } -static void mesh_circle_select( - const EvaluationContext *eval_ctx, - ViewContext *vc, const bool select, const int mval[2], float rad) +static void mesh_circle_select(const struct EvaluationContext *eval_ctx, ViewContext *vc, const bool select, const int mval[2], float rad) { ToolSettings *ts = vc->scene->toolsettings; int bbsel; @@ -2478,9 +2461,7 @@ static void mesh_circle_select( EDBM_selectmode_flush(vc->em); } -static void paint_facesel_circle_select( - const EvaluationContext *eval_ctx, - ViewContext *vc, const bool select, const int mval[2], float rad) +static void paint_facesel_circle_select(const struct EvaluationContext *eval_ctx, ViewContext *vc, const bool select, const int mval[2], float rad) { Object *ob = vc->obact; Mesh *me = ob->data; @@ -2496,8 +2477,7 @@ static void paint_facesel_circle_select( } } -static void paint_vertsel_circle_select_doSelectVert( - void *userData, MVert *mv, const float screen_co[2], int UNUSED(index)) +static void paint_vertsel_circle_select_doSelectVert(void *userData, MVert *mv, const float screen_co[2], int UNUSED(index)) { CircleSelectUserData *data = userData; @@ -2505,8 +2485,7 @@ static void paint_vertsel_circle_select_doSelectVert( SET_FLAG_FROM_TEST(mv->flag, data->select, SELECT); } } -static void paint_vertsel_circle_select( - const EvaluationContext *eval_ctx, ViewContext *vc, const bool select, const int mval[2], float rad) +static void paint_vertsel_circle_select(const struct EvaluationContext *eval_ctx, ViewContext *vc, const bool select, const int mval[2], float rad) { const bool use_zbuf = (vc->v3d->flag & V3D_ZBUF_SELECT) != 0; Object *ob = vc->obact; @@ -2529,8 +2508,7 @@ static void paint_vertsel_circle_select( ED_view3d_init_mats_rv3d(vc->obact, vc->rv3d); /* for foreach's screen/vert projection */ view3d_userdata_circleselect_init(&data, vc, select, mval, rad); - meshobject_foreachScreenVert( - eval_ctx, vc, paint_vertsel_circle_select_doSelectVert, &data, V3D_PROJ_TEST_CLIP_DEFAULT); + meshobject_foreachScreenVert(eval_ctx, vc, paint_vertsel_circle_select_doSelectVert, &data, V3D_PROJ_TEST_CLIP_DEFAULT); } if (select != LEFTMOUSE) { @@ -2788,7 +2766,7 @@ static void mball_circle_select(ViewContext *vc, const bool select, const int mv /** Callbacks for circle selection in Editmode */ static void obedit_circle_select( - const EvaluationContext *eval_ctx, ViewContext *vc, const bool select, const int mval[2], float rad) + const struct EvaluationContext *eval_ctx, ViewContext *vc, const bool select, const int mval[2], float rad) { switch (vc->obedit->type) { case OB_MESH: @@ -2843,48 +2821,53 @@ static bool object_circle_select(ViewContext *vc, const bool select, const int m /* not a real operator, only for circle test */ static int view3d_circle_select_exec(bContext *C, wmOperator *op) { - ViewContext vc; - ED_view3d_viewcontext_init(C, &vc); - Object *obact = vc.obact; - Object *obedit = vc.obedit; - EvaluationContext eval_ctx; - CTX_data_eval_ctx(C, &eval_ctx); + Scene *scene = CTX_data_scene(C); + Object *obact = CTX_data_active_object(C); const int radius = RNA_int_get(op->ptr, "radius"); const bool select = !RNA_boolean_get(op->ptr, "deselect"); const int mval[2] = {RNA_int_get(op->ptr, "x"), RNA_int_get(op->ptr, "y")}; - if (obedit || BKE_paint_select_elem_test(obact, eval_ctx.object_mode) || - (obact && (eval_ctx.object_mode & (OB_MODE_PARTICLE_EDIT | OB_MODE_POSE))) ) + if (CTX_data_edit_object(C) || BKE_paint_select_elem_test(obact) || + (obact && (obact->mode & (OB_MODE_PARTICLE_EDIT | OB_MODE_POSE))) ) { + EvaluationContext eval_ctx; + ViewContext vc; + view3d_operator_needs_opengl(C); + + CTX_data_eval_ctx(C, &eval_ctx); + ED_view3d_viewcontext_init(C, &vc); if (CTX_data_edit_object(C)) { obedit_circle_select(&eval_ctx, &vc, select, mval, (float)radius); WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obact->data); } - else if (BKE_paint_select_face_test(obact, eval_ctx.object_mode)) { + else if (BKE_paint_select_face_test(obact)) { paint_facesel_circle_select(&eval_ctx, &vc, select, mval, (float)radius); WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obact->data); } - else if (BKE_paint_select_vert_test(obact, eval_ctx.object_mode)) { + else if (BKE_paint_select_vert_test(obact)) { paint_vertsel_circle_select(&eval_ctx, &vc, select, mval, (float)radius); WM_event_add_notifier(C, NC_GEOM | ND_SELECT, obact->data); } - else if (eval_ctx.object_mode & OB_MODE_POSE) + else if (obact->mode & OB_MODE_POSE) pose_circle_select(&vc, select, mval, (float)radius); else return PE_circle_select(C, select, mval, (float)radius); } - else if (obact && eval_ctx.object_mode & OB_MODE_SCULPT) { + else if (obact && obact->mode & OB_MODE_SCULPT) { return OPERATOR_CANCELLED; } else { + ViewContext vc; + ED_view3d_viewcontext_init(C, &vc); + if (object_circle_select(&vc, select, mval, (float)radius)) { - WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, vc.scene); + WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene); } } - + return OPERATOR_FINISHED; } diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c index 40dd2f0f428..1df29201bf6 100644 --- a/source/blender/editors/space_view3d/view3d_snap.c +++ b/source/blender/editors/space_view3d/view3d_snap.c @@ -113,7 +113,7 @@ static int snap_sel_to_grid_exec(bContext *C, wmOperator *UNUSED(op)) CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) { - if (eval_ctx.object_mode & OB_MODE_POSE) { + if (ob->mode & OB_MODE_POSE) { bPoseChannel *pchan; bArmature *arm = ob->data; @@ -272,7 +272,7 @@ static int snap_selected_to_location(bContext *C, const float snap_target_global ED_transverts_update_obedit(&tvs, obedit); ED_transverts_free(&tvs); } - else if (obact && (eval_ctx.object_mode & OB_MODE_POSE)) { + else if (obact && (obact->mode & OB_MODE_POSE)) { struct KeyingSet *ks = ANIM_get_keyingset_for_autokeying(scene, ANIM_KS_LOCATION_ID); bPoseChannel *pchan; @@ -554,8 +554,6 @@ static void bundle_midpoint(Scene *scene, Object *ob, float vec[3]) static bool snap_curs_to_sel_ex(bContext *C, float cursor[3]) { - EvaluationContext eval_ctx; - CTX_data_eval_ctx(C, &eval_ctx); Object *obedit = CTX_data_edit_object(C); Scene *scene = CTX_data_scene(C); View3D *v3d = CTX_wm_view3d(C); @@ -601,7 +599,7 @@ static bool snap_curs_to_sel_ex(bContext *C, float cursor[3]) else { Object *obact = CTX_data_active_object(C); - if (obact && (eval_ctx.object_mode & OB_MODE_POSE)) { + if (obact && (obact->mode & OB_MODE_POSE)) { bArmature *arm = obact->data; bPoseChannel *pchan; for (pchan = obact->pose->chanbase.first; pchan; pchan = pchan->next) { @@ -703,8 +701,7 @@ static bool snap_calc_active_center(bContext *C, const bool select_only, float r Object *ob = CTX_data_active_object(C); if (ob) { - const WorkSpace *workspace = CTX_wm_workspace(C); - if (workspace->object_mode & OB_MODE_POSE) { + if (ob->mode & OB_MODE_POSE) { bPoseChannel *pchan = BKE_pose_channel_active(ob); if (pchan) { if (!select_only || (pchan->bone->flag & BONE_SELECTED)) { diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 4225ee8b425..1a547d07b80 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -918,7 +918,7 @@ int view3d_opengl_select( ARegion *ar = vc->ar; rcti rect; int hits; - const bool use_obedit_skip = (OBEDIT_FROM_EVAL_CTX(eval_ctx) != NULL) && (vc->obedit == NULL); + const bool use_obedit_skip = (OBEDIT_FROM_VIEW_LAYER(vc->view_layer) != NULL) && (vc->obedit == NULL); const bool is_pick_select = (U.gpu_select_pick_deph != 0); const bool do_passes = ( (is_pick_select == false) && @@ -1016,7 +1016,7 @@ int view3d_opengl_select( .gpu_select_mode = gpu_select_mode, }; DRW_draw_select_loop( - graph, ar, v3d, eval_ctx->object_mode, + graph, ar, v3d, use_obedit_skip, use_nearest, &rect, drw_select_loop_pass, &drw_select_loop_user_data); hits = drw_select_loop_user_data.hits; @@ -1104,13 +1104,11 @@ int ED_view3d_view_layer_set(int lay, const int *values, int *active) static ListBase queue_back; static void game_engine_save_state(bContext *C, wmWindow *win) { - EvaluationContext eval_ctx; - CTX_data_eval_ctx(C, &eval_ctx); Object *obact = CTX_data_active_object(C); glPushAttrib(GL_ALL_ATTRIB_BITS); - if (obact && eval_ctx.object_mode & OB_MODE_TEXTURE_PAINT) { + if (obact && obact->mode & OB_MODE_TEXTURE_PAINT) { GPU_paint_set_mipmap(1); } @@ -1121,11 +1119,9 @@ static void game_engine_save_state(bContext *C, wmWindow *win) static void game_engine_restore_state(bContext *C, wmWindow *win) { - EvaluationContext eval_ctx; - CTX_data_eval_ctx(C, &eval_ctx); Object *obact = CTX_data_active_object(C); - if (obact && eval_ctx.object_mode & OB_MODE_TEXTURE_PAINT) { + if (obact && obact->mode & OB_MODE_TEXTURE_PAINT) { GPU_paint_set_mipmap(0); } /* check because closing win can set to NULL */ |