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/blenkernel | |
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/blenkernel')
25 files changed, 190 insertions, 343 deletions
diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h b/source/blender/blenkernel/BKE_DerivedMesh.h index 9d48ddb4f32..4ae11b5cca5 100644 --- a/source/blender/blenkernel/BKE_DerivedMesh.h +++ b/source/blender/blenkernel/BKE_DerivedMesh.h @@ -100,8 +100,6 @@ struct GPUDrawObject; struct PBVH; struct EvaluationContext; -#include "DNA_object_enums.h" - /* number of sub-elements each mesh element has (for interpolation) */ #define SUB_ELEMS_VERT 0 #define SUB_ELEMS_EDGE 2 @@ -383,7 +381,7 @@ struct DerivedMesh { /** Get the BVH used for paint modes */ - struct PBVH *(*getPBVH)(struct Object *ob, DerivedMesh *dm, eObjectMode object_mode); + struct PBVH *(*getPBVH)(struct Object *ob, DerivedMesh *dm); /* Drawing Operations */ diff --git a/source/blender/blenkernel/BKE_cloth.h b/source/blender/blenkernel/BKE_cloth.h index 27b928c1671..8923edacb07 100644 --- a/source/blender/blenkernel/BKE_cloth.h +++ b/source/blender/blenkernel/BKE_cloth.h @@ -237,7 +237,6 @@ void bvhselftree_update_from_cloth(struct ClothModifierData *clmd, bool moving); // needed for button_object.c void cloth_clear_cache( - const struct EvaluationContext *eval_ctx, struct Object *ob, struct ClothModifierData *clmd, float framenr ); void cloth_parallel_transport_hair_frame(float mat[3][3], const float dir_old[3], const float dir_new[3]); diff --git a/source/blender/blenkernel/BKE_modifier.h b/source/blender/blenkernel/BKE_modifier.h index 7eb3ad33950..329defbc77c 100644 --- a/source/blender/blenkernel/BKE_modifier.h +++ b/source/blender/blenkernel/BKE_modifier.h @@ -376,8 +376,7 @@ struct Object *modifiers_isDeformedByArmature(struct Object *ob); struct Object *modifiers_isDeformedByLattice(struct Object *ob); struct Object *modifiers_isDeformedByCurve(struct Object *ob); bool modifiers_usesArmature(struct Object *ob, struct bArmature *arm); -bool modifiers_isCorrectableDeformed( - const struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob); +bool modifiers_isCorrectableDeformed(struct Scene *scene, struct Object *ob); void modifier_freeTemporaryData(struct ModifierData *md); bool modifiers_isPreview(struct Object *ob); diff --git a/source/blender/blenkernel/BKE_multires.h b/source/blender/blenkernel/BKE_multires.h index 22933a093ed..761bb7e8acb 100644 --- a/source/blender/blenkernel/BKE_multires.h +++ b/source/blender/blenkernel/BKE_multires.h @@ -48,21 +48,20 @@ struct MVert; struct MPoly; struct MLoopTri; -#include "DNA_object_enums.h" - /* Delete mesh mdisps and grid paint masks */ void multires_customdata_delete(struct Mesh *me); -void multires_set_tot_level(struct MultiresModifierData *mmd, int lvl, eObjectMode object_mode); +void multires_set_tot_level(struct Object *ob, + struct MultiresModifierData *mmd, int lvl); void multires_mark_as_modified(struct Object *ob, enum MultiresModifiedFlags flags); void multires_force_update(struct Object *ob); -void multires_force_render_update(struct Object *ob, eObjectMode object_mode); +void multires_force_render_update(struct Object *ob); void multires_force_external_reload(struct Object *ob); /* internal, only called in subsurf_ccg.c */ -void multires_modifier_update_mdisps(struct DerivedMesh *dm, eObjectMode object_mode); +void multires_modifier_update_mdisps(struct DerivedMesh *dm); void multires_modifier_update_hidden(struct DerivedMesh *dm); void multiresModifier_set_levels_from_disps(struct MultiresModifierData *mmd, struct Object *ob); @@ -74,27 +73,21 @@ typedef enum { MULTIRES_IGNORE_SIMPLIFY = 8 } MultiresFlags; -struct DerivedMesh *multires_make_derived_from_derived( - struct DerivedMesh *dm, - struct MultiresModifierData *mmd, - struct Object *ob, - MultiresFlags flags, - eObjectMode object_mode); +struct DerivedMesh *multires_make_derived_from_derived(struct DerivedMesh *dm, + struct MultiresModifierData *mmd, + struct Object *ob, + MultiresFlags flags); struct MultiresModifierData *find_multires_modifier_before(struct Scene *scene, struct ModifierData *lastmd); struct MultiresModifierData *get_multires_modifier(struct Scene *scene, struct Object *ob, bool use_first); struct DerivedMesh *get_multires_dm(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct MultiresModifierData *mmd, struct Object *ob); -void multiresModifier_del_levels( - struct MultiresModifierData *, struct Object *, int direction, eObjectMode object_mode); -void multiresModifier_base_apply( - struct MultiresModifierData *mmd, struct Object *ob, eObjectMode object_mode); -void multiresModifier_subdivide( - struct MultiresModifierData *mmd, struct Object *ob, int updateblock, int simple, eObjectMode object_mode); +void multiresModifier_del_levels(struct MultiresModifierData *, struct Object *, int direction); +void multiresModifier_base_apply(struct MultiresModifierData *mmd, struct Object *ob); +void multiresModifier_subdivide(struct MultiresModifierData *mmd, struct Object *ob, int updateblock, int simple); void multiresModifier_sync_levels_ex( - struct Object *ob_dst, struct MultiresModifierData *mmd_src, struct MultiresModifierData *mmd_dst, - eObjectMode object_mode); + struct Object *ob_dst, struct MultiresModifierData *mmd_src, struct MultiresModifierData *mmd_dst); int multiresModifier_reshape(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct MultiresModifierData *mmd, struct Object *dst, struct Object *src); int multiresModifier_reshapeFromDM(const struct EvaluationContext *eval_ctx, struct Scene *scene, struct MultiresModifierData *mmd, @@ -110,7 +103,7 @@ enum { MULTIRES_SPACE_OBJECT, MULTIRES_SPACE_ABSOLUTE }; -void multires_set_space(struct DerivedMesh *dm, struct Object *ob, int from, int to, eObjectMode object_mode); +void multires_set_space(struct DerivedMesh *dm, struct Object *ob, int from, int to); /* Related to the old multires */ void multires_free(struct Multires *mr); diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h index 1af31d5e024..c5eefedcfad 100644 --- a/source/blender/blenkernel/BKE_object.h +++ b/source/blender/blenkernel/BKE_object.h @@ -74,18 +74,16 @@ void BKE_object_modifier_hook_reset(struct Object *ob, struct HookModifierData * bool BKE_object_support_modifier_type_check(struct Object *ob, int modifier_type); -void BKE_object_link_modifiers( - struct Object *ob_dst, const struct Object *ob_src, - eObjectMode object_mode); +void BKE_object_link_modifiers(struct Object *ob_dst, const struct Object *ob_src); void BKE_object_free_modifiers(struct Object *ob, const int flag); void BKE_object_make_proxy(struct Object *ob, struct Object *target, struct Object *gob); void BKE_object_copy_proxy_drivers(struct Object *ob, struct Object *target); bool BKE_object_exists_check(struct Object *obtest); -bool BKE_object_is_in_editmode(const struct Object *ob); +bool BKE_object_is_in_editmode(struct Object *ob); bool BKE_object_is_in_editmode_vgroup(struct Object *ob); -bool BKE_object_is_in_wpaint_select_vert(const struct Object *ob, eObjectMode object_mode); +bool BKE_object_is_in_wpaint_select_vert(const struct Object *ob); typedef enum eObjectVisibilityCheck { OB_VISIBILITY_CHECK_FOR_VIEWPORT, @@ -117,12 +115,9 @@ void BKE_object_lod_add(struct Object *ob); void BKE_object_lod_sort(struct Object *ob); bool BKE_object_lod_remove(struct Object *ob, int level); void BKE_object_lod_update(struct Object *ob, const float camera_position[3]); -bool BKE_object_lod_is_usable( - struct Object *ob, struct ViewLayer *view_layer, const eObjectMode object_mode); -struct Object *BKE_object_lod_meshob_get( - struct Object *ob, struct ViewLayer *view_layer, const eObjectMode object_mode); -struct Object *BKE_object_lod_matob_get( - struct Object *ob, struct ViewLayer *view_layer, const eObjectMode object_mode); +bool BKE_object_lod_is_usable(struct Object *ob, struct ViewLayer *view_layer); +struct Object *BKE_object_lod_meshob_get(struct Object *ob, struct ViewLayer *view_layer); +struct Object *BKE_object_lod_matob_get(struct Object *ob, struct ViewLayer *view_layer); void BKE_object_copy_data(struct Main *bmain, struct Object *ob_dst, const struct Object *ob_src, const int flag); struct Object *BKE_object_copy(struct Main *bmain, const struct Object *ob); @@ -141,7 +136,6 @@ void BKE_object_to_mat4(struct Object *ob, float mat[4][4]); void BKE_object_apply_mat4(struct Object *ob, float mat[4][4], const bool use_compat, const bool use_parent); void BKE_object_matrix_local_get(struct Object *ob, float mat[4][4]); -bool BKE_object_pose_context_check_ex(struct Object *ob, bool selected); bool BKE_object_pose_context_check(struct Object *ob); struct Object *BKE_object_pose_armature_get(struct Object *ob); struct Object *BKE_object_pose_armature_get_visible(struct Object *ob, struct ViewLayer *view_layer); diff --git a/source/blender/blenkernel/BKE_paint.h b/source/blender/blenkernel/BKE_paint.h index 2840971f157..fa67c07395d 100644 --- a/source/blender/blenkernel/BKE_paint.h +++ b/source/blender/blenkernel/BKE_paint.h @@ -93,10 +93,8 @@ typedef enum eOverlayControlFlags { PAINT_OVERLAY_OVERRIDE_PRIMARY | \ PAINT_OVERLAY_OVERRIDE_CURSOR) -void BKE_paint_invalidate_overlay_tex( - struct Scene *scene, struct ViewLayer *view_layer, const struct Tex *tex, eObjectMode object_mode); -void BKE_paint_invalidate_cursor_overlay( - struct Scene *scene, struct ViewLayer *view_layer, struct CurveMapping *curve, eObjectMode object_mode); +void BKE_paint_invalidate_overlay_tex(struct Scene *scene, struct ViewLayer *view_layer, const struct Tex *tex); +void BKE_paint_invalidate_cursor_overlay(struct Scene *scene, struct ViewLayer *view_layer, struct CurveMapping *curve); void BKE_paint_invalidate_overlay_all(void); eOverlayControlFlags BKE_paint_get_overlay_flags(void); void BKE_paint_reset_overlay_invalid(eOverlayControlFlags flag); @@ -130,8 +128,7 @@ void BKE_paint_cavity_curve_preset(struct Paint *p, int preset); eObjectMode BKE_paint_object_mode_from_paint_mode(ePaintMode mode); struct Paint *BKE_paint_get_active_from_paintmode(struct Scene *sce, ePaintMode mode); -struct Paint *BKE_paint_get_active( - struct Scene *sce, struct ViewLayer *view_layer, const eObjectMode object_mode); +struct Paint *BKE_paint_get_active(struct Scene *sce, struct ViewLayer *view_layer); struct Paint *BKE_paint_get_active_from_context(const struct bContext *C); ePaintMode BKE_paintmode_get_active_from_context(const struct bContext *C); struct Brush *BKE_paint_brush(struct Paint *paint); @@ -147,9 +144,9 @@ bool BKE_paint_proj_mesh_data_check(struct Scene *scene, struct Object *ob, bool /* testing face select mode * Texture paint could be removed since selected faces are not used * however hiding faces is useful */ -bool BKE_paint_select_face_test(struct Object *ob, eObjectMode object_mode); -bool BKE_paint_select_vert_test(struct Object *ob, eObjectMode object_mode); -bool BKE_paint_select_elem_test(struct Object *ob, eObjectMode object_mode); +bool BKE_paint_select_face_test(struct Object *ob); +bool BKE_paint_select_vert_test(struct Object *ob); +bool BKE_paint_select_elem_test(struct Object *ob); /* partial visibility */ bool paint_is_face_hidden(const struct MLoopTri *lt, const struct MVert *mvert, const struct MLoop *mloop); diff --git a/source/blender/blenkernel/BKE_particle.h b/source/blender/blenkernel/BKE_particle.h index 06c74d93e7c..886ccb9113a 100644 --- a/source/blender/blenkernel/BKE_particle.h +++ b/source/blender/blenkernel/BKE_particle.h @@ -301,8 +301,7 @@ void psys_set_current_num(Object *ob, int index); struct LatticeDeformData *psys_create_lattice_deform_data(struct ParticleSimulationData *sim); -bool psys_in_edit_mode( - const struct EvaluationContext *eval_ctx, struct ViewLayer *view_layer, struct ParticleSystem *psys); +bool psys_in_edit_mode(struct ViewLayer *view_layer, struct ParticleSystem *psys); bool psys_check_enabled(struct Object *ob, struct ParticleSystem *psys, const bool use_render_params); bool psys_check_edited(struct ParticleSystem *psys); diff --git a/source/blender/blenkernel/BKE_shrinkwrap.h b/source/blender/blenkernel/BKE_shrinkwrap.h index 0c4f2bc9c05..d2ab4f3164c 100644 --- a/source/blender/blenkernel/BKE_shrinkwrap.h +++ b/source/blender/blenkernel/BKE_shrinkwrap.h @@ -54,7 +54,6 @@ struct ShrinkwrapModifierData; struct MDeformVert; struct BVHTree; struct SpaceTransform; -struct EvaluationContext; typedef struct ShrinkwrapCalcData { @@ -77,10 +76,8 @@ typedef struct ShrinkwrapCalcData { } ShrinkwrapCalcData; -void shrinkwrapModifier_deform( - const struct EvaluationContext *eval_ctx, - struct ShrinkwrapModifierData *smd, struct Object *ob, struct DerivedMesh *dm, - float (*vertexCos)[3], int numVerts, bool for_render); +void shrinkwrapModifier_deform(struct ShrinkwrapModifierData *smd, struct Object *ob, struct DerivedMesh *dm, + float (*vertexCos)[3], int numVerts, bool for_render); /* * This function casts a ray in the given BVHTree.. but it takes into consideration the space_transform, that is: diff --git a/source/blender/blenkernel/BKE_workspace.h b/source/blender/blenkernel/BKE_workspace.h index 0aff79b7e30..9ba4105edda 100644 --- a/source/blender/blenkernel/BKE_workspace.h +++ b/source/blender/blenkernel/BKE_workspace.h @@ -95,6 +95,7 @@ void BKE_workspace_active_layout_set(struct WorkSpaceInstanceHook *h struct bScreen *BKE_workspace_active_screen_get(const struct WorkSpaceInstanceHook *hook) GETTER_ATTRS; void BKE_workspace_active_screen_set( struct WorkSpaceInstanceHook *hook, struct WorkSpace *workspace, struct bScreen *screen) SETTER_ATTRS; + struct Base *BKE_workspace_active_base_get(const struct WorkSpace *workspace, const struct Scene *scene); struct ListBase *BKE_workspace_transform_orientations_get(struct WorkSpace *workspace) GETTER_ATTRS; struct ViewLayer *BKE_workspace_view_layer_get( @@ -129,13 +130,6 @@ void BKE_workspace_update_tagged(struct EvaluationContext *eval_ctx, struct WorkSpace *workspace, struct Scene *scene); -void BKE_workspace_update_object_mode( - struct EvaluationContext *eval_ctx, - struct WorkSpace *workspace); - -struct Object *BKE_workspace_edit_object( - struct WorkSpace *workspace, struct Scene *scene); - bool BKE_workspace_owner_id_check( const struct WorkSpace *workspace, const char *owner_id) ATTR_NONNULL(); diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c index 3001b1f05d5..916e11dbd46 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.c +++ b/source/blender/blenkernel/intern/DerivedMesh.c @@ -51,8 +51,6 @@ #include "BLI_linklist.h" #include "BLI_task.h" -#include "DEG_depsgraph.h" - #include "BKE_cdderivedmesh.h" #include "BKE_colorband.h" #include "BKE_editmesh.h" @@ -352,7 +350,7 @@ void DM_init( dm->numPolyData = numPolys; DM_init_funcs(dm); - + dm->needsFree = 1; dm->auto_bump_scale = -1.0f; dm->dirty = 0; @@ -412,7 +410,6 @@ int DM_release(DerivedMesh *dm) if (dm->needsFree) { bvhcache_free(&dm->bvhCache); GPU_drawobject_free(dm); - CustomData_free(&dm->vertData, dm->numVertData); CustomData_free(&dm->edgeData, dm->numEdgeData); CustomData_free(&dm->faceData, dm->numTessFaceData); @@ -1778,19 +1775,17 @@ static void mesh_calc_modifiers( MultiresModifierData *mmd = get_multires_modifier(scene, ob, 0); const bool has_multires = (mmd && mmd->sculptlvl != 0); bool multires_applied = false; - const bool sculpt_mode = eval_ctx->object_mode & OB_MODE_SCULPT && ob->sculpt && !useRenderParams; + const bool sculpt_mode = ob->mode & OB_MODE_SCULPT && ob->sculpt && !useRenderParams; const bool sculpt_dyntopo = (sculpt_mode && ob->sculpt->bm) && !useRenderParams; const int draw_flag = dm_drawflag_calc(scene->toolsettings, me); /* Generic preview only in object mode! */ - const bool do_mod_mcol = (eval_ctx->object_mode == OB_MODE_OBJECT); + const bool do_mod_mcol = (ob->mode == OB_MODE_OBJECT); #if 0 /* XXX Will re-enable this when we have global mod stack options. */ const bool do_final_wmcol = (scene->toolsettings->weights_preview == WP_WPREVIEW_FINAL) && do_wmcol; #endif const bool do_final_wmcol = false; - const bool do_init_wmcol = ( - (dataMask & CD_MASK_PREVIEW_MLOOPCOL) && - (eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT) && !do_final_wmcol); + const bool do_init_wmcol = ((dataMask & CD_MASK_PREVIEW_MLOOPCOL) && (ob->mode & OB_MODE_WEIGHT_PAINT) && !do_final_wmcol); /* XXX Same as above... For now, only weights preview in WPaint mode. */ const bool do_mod_wmcol = do_init_wmcol; @@ -2628,7 +2623,7 @@ static bool calc_modifiers_skip_orco(const EvaluationContext *eval_ctx, if (U.opensubdiv_compute_type == USER_OPENSUBDIV_COMPUTE_NONE) { return false; } - else if ((eval_ctx->object_mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)) != 0) { + else if ((ob->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)) != 0) { return false; } else if ((DEG_get_eval_flags_for_id(eval_ctx->depsgraph, &ob->id) & DAG_EVAL_NEED_CPU) != 0) { @@ -2669,7 +2664,7 @@ static void mesh_build_data( ob->lastDataMask = dataMask; ob->lastNeedMapping = need_mapping; - if ((eval_ctx->object_mode & OB_MODE_ALL_SCULPT) && ob->sculpt) { + if ((ob->mode & OB_MODE_ALL_SCULPT) && ob->sculpt) { /* create PBVH immediately (would be created on the fly too, * but this avoids waiting on first stroke) */ @@ -2707,9 +2702,7 @@ static void editbmesh_build_data( BLI_assert(!(em->derivedFinal->dirty & DM_DIRTY_NORMALS)); } -static CustomDataMask object_get_datamask( - const EvaluationContext *eval_ctx, - const Scene *scene, Object *ob, bool *r_need_mapping) +static CustomDataMask object_get_datamask(const Scene *scene, Object *ob, bool *r_need_mapping) { /* TODO(sergey): Avoid this linear list lookup. */ ViewLayer *view_layer = BKE_view_layer_context_active_PLACEHOLDER(scene); @@ -2721,28 +2714,28 @@ static CustomDataMask object_get_datamask( } if (ob == actob) { - bool editing = BKE_paint_select_face_test(ob, eval_ctx->object_mode); + bool editing = BKE_paint_select_face_test(ob); /* weight paint and face select need original indices because of selection buffer drawing */ if (r_need_mapping) { - *r_need_mapping = (editing || (eval_ctx->object_mode & (OB_MODE_WEIGHT_PAINT | OB_MODE_VERTEX_PAINT))); + *r_need_mapping = (editing || (ob->mode & (OB_MODE_WEIGHT_PAINT | OB_MODE_VERTEX_PAINT))); } /* check if we need tfaces & mcols due to face select or texture paint */ - if ((eval_ctx->object_mode & OB_MODE_TEXTURE_PAINT) || editing) { + if ((ob->mode & OB_MODE_TEXTURE_PAINT) || editing) { mask |= CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL; } /* check if we need mcols due to vertex paint or weightpaint */ - if (eval_ctx->object_mode & OB_MODE_VERTEX_PAINT) { + if (ob->mode & OB_MODE_VERTEX_PAINT) { mask |= CD_MASK_MLOOPCOL; } - if (eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT) { + if (ob->mode & OB_MODE_WEIGHT_PAINT) { mask |= CD_MASK_PREVIEW_MLOOPCOL; } - if (eval_ctx->object_mode & OB_MODE_EDIT) + if (ob->mode & OB_MODE_EDIT) mask |= CD_MASK_MVERT_SKIN; } @@ -2754,7 +2747,7 @@ void makeDerivedMesh( CustomDataMask dataMask, const bool build_shapekey_layers) { bool need_mapping; - dataMask |= object_get_datamask(eval_ctx, scene, ob, &need_mapping); + dataMask |= object_get_datamask(scene, ob, &need_mapping); if (em) { editbmesh_build_data(eval_ctx, scene, ob, em, dataMask); @@ -2773,7 +2766,7 @@ DerivedMesh *mesh_get_derived_final( * the data we need, rebuild the derived mesh */ bool need_mapping; - dataMask |= object_get_datamask(eval_ctx, scene, ob, &need_mapping); + dataMask |= object_get_datamask(scene, ob, &need_mapping); if (!ob->derivedFinal || ((dataMask & ob->lastDataMask) != dataMask) || @@ -2793,7 +2786,7 @@ DerivedMesh *mesh_get_derived_deform(const struct EvaluationContext *eval_ctx, S */ bool need_mapping; - dataMask |= object_get_datamask(eval_ctx, scene, ob, &need_mapping); + dataMask |= object_get_datamask(scene, ob, &need_mapping); if (!ob->derivedDeform || ((dataMask & ob->lastDataMask) != dataMask) || @@ -2912,7 +2905,7 @@ DerivedMesh *editbmesh_get_derived_cage_and_final( /* if there's no derived mesh or the last data mask used doesn't include * the data we need, rebuild the derived mesh */ - dataMask |= object_get_datamask(eval_ctx, scene, obedit, NULL); + dataMask |= object_get_datamask(scene, obedit, NULL); if (!em->derivedCage || (em->lastDataMask & dataMask) != dataMask) @@ -2932,7 +2925,7 @@ DerivedMesh *editbmesh_get_derived_cage( /* if there's no derived mesh or the last data mask used doesn't include * the data we need, rebuild the derived mesh */ - dataMask |= object_get_datamask(eval_ctx, scene, obedit, NULL); + dataMask |= object_get_datamask(scene, obedit, NULL); if (!em->derivedCage || (em->lastDataMask & dataMask) != dataMask) diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c index fc860817a83..a6c6d360769 100644 --- a/source/blender/blenkernel/intern/cdderivedmesh.c +++ b/source/blender/blenkernel/intern/cdderivedmesh.c @@ -64,8 +64,6 @@ #include "GPU_shader.h" #include "GPU_basic_shader.h" -#include "DEG_depsgraph.h" - #include <string.h> #include <limits.h> #include <math.h> @@ -262,8 +260,7 @@ static bool can_pbvh_draw(Object *ob, DerivedMesh *dm) return cddm->mvert == me->mvert || ob->sculpt->kb; } -static PBVH *cdDM_getPBVH( - Object *ob, DerivedMesh *dm, eObjectMode UNUSED(object_mode)) +static PBVH *cdDM_getPBVH(Object *ob, DerivedMesh *dm) { CDDerivedMesh *cddm = (CDDerivedMesh *) dm; diff --git a/source/blender/blenkernel/intern/cloth.c b/source/blender/blenkernel/intern/cloth.c index 704a0163a81..339dcc4a62e 100644 --- a/source/blender/blenkernel/intern/cloth.c +++ b/source/blender/blenkernel/intern/cloth.c @@ -306,14 +306,14 @@ void bvhselftree_update_from_cloth(ClothModifierData *clmd, bool moving) } } -void cloth_clear_cache(const EvaluationContext *eval_ctx, Object *ob, ClothModifierData *clmd, float framenr) +void cloth_clear_cache(Object *ob, ClothModifierData *clmd, float framenr) { PTCacheID pid; BKE_ptcache_id_from_cloth(&pid, ob, clmd); // don't do anything as long as we're in editmode! - if (pid.cache->edit && eval_ctx->object_mode & OB_MODE_PARTICLE_EDIT) + if (pid.cache->edit && ob->mode & OB_MODE_PARTICLE_EDIT) return; BKE_ptcache_id_clear(&pid, PTCACHE_CLEAR_AFTER, framenr); diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c index 2af3b6ce593..98e5bb8ce6e 100644 --- a/source/blender/blenkernel/intern/context.c +++ b/source/blender/blenkernel/intern/context.c @@ -1035,10 +1035,9 @@ int CTX_data_mode_enum_ex(const Object *obedit, const Object *ob, const eObjectM int CTX_data_mode_enum(const bContext *C) { - const WorkSpace *workspace = CTX_wm_workspace(C); Object *obedit = CTX_data_edit_object(C); Object *obact = obedit ? NULL : CTX_data_active_object(C); - return CTX_data_mode_enum_ex(obedit, obact, workspace->object_mode); + return CTX_data_mode_enum_ex(obedit, obact, obact ? obact->mode : OB_MODE_OBJECT); } /* would prefer if we can use the enum version below over this one - Campbell */ @@ -1275,9 +1274,8 @@ 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); RenderEngineType *engine_type = CTX_data_engine_type(C); - WorkSpace *workspace = CTX_wm_workspace(C); DEG_evaluation_context_init_from_scene( eval_ctx, scene, view_layer, engine_type, - workspace->object_mode, DAG_EVAL_VIEWPORT); + DAG_EVAL_VIEWPORT); } diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c index 1f570dcb531..5eb5272f3e5 100644 --- a/source/blender/blenkernel/intern/modifier.c +++ b/source/blender/blenkernel/intern/modifier.c @@ -684,13 +684,13 @@ bool modifier_isCorrectableDeformed(ModifierData *md) return (mti->deformMatricesEM != NULL); } -bool modifiers_isCorrectableDeformed(const EvaluationContext *eval_ctx, struct Scene *scene, Object *ob) +bool modifiers_isCorrectableDeformed(struct Scene *scene, Object *ob) { VirtualModifierData virtualModifierData; ModifierData *md = modifiers_getVirtualModifierList(ob, &virtualModifierData); int required_mode = eModifierMode_Realtime; - if (eval_ctx->object_mode == OB_MODE_EDIT) { + if (ob->mode == OB_MODE_EDIT) { required_mode |= eModifierMode_Editmode; } for (; md; md = md->next) { diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c index e7c36685c42..55f11604710 100644 --- a/source/blender/blenkernel/intern/multires.c +++ b/source/blender/blenkernel/intern/multires.c @@ -60,8 +60,6 @@ #include "BKE_object.h" -#include "DEG_depsgraph.h" - #include "CCGSubSurf.h" #include <math.h> @@ -338,13 +336,12 @@ MultiresModifierData *get_multires_modifier(Scene *scene, Object *ob, bool use_f return mmd; } -static int multires_get_level( - MultiresModifierData *mmd, - bool render, bool ignore_simplify, eObjectMode object_mode) +static int multires_get_level(Object *ob, MultiresModifierData *mmd, + bool render, bool ignore_simplify) { if (render) return (mmd->modifier.scene) ? get_render_subsurf_level(&mmd->modifier.scene->r, mmd->renderlvl, true) : mmd->renderlvl; - else if (object_mode == OB_MODE_SCULPT) + else if (ob->mode == OB_MODE_SCULPT) return mmd->sculptlvl; else if (ignore_simplify) return mmd->lvl; @@ -352,13 +349,12 @@ static int multires_get_level( return (mmd->modifier.scene) ? get_render_subsurf_level(&mmd->modifier.scene->r, mmd->lvl, false) : mmd->lvl; } -void multires_set_tot_level(MultiresModifierData *mmd, int lvl, eObjectMode object_mode) +void multires_set_tot_level(Object *ob, MultiresModifierData *mmd, int lvl) { mmd->totlvl = lvl; - if (object_mode != OB_MODE_SCULPT) { + if (ob->mode != OB_MODE_SCULPT) mmd->lvl = CLAMPIS(MAX2(mmd->lvl, lvl), 0, mmd->totlvl); - } mmd->sculptlvl = CLAMPIS(MAX2(mmd->sculptlvl, lvl), 0, mmd->totlvl); mmd->renderlvl = CLAMPIS(MAX2(mmd->renderlvl, lvl), 0, mmd->totlvl); @@ -396,9 +392,9 @@ void multires_force_external_reload(Object *ob) multires_force_update(ob); } -void multires_force_render_update(Object *ob, eObjectMode object_mode) +void multires_force_render_update(Object *ob) { - if (ob && (object_mode & OB_MODE_SCULPT) && modifiers_findByType(ob, eModifierType_Multires)) + if (ob && (ob->mode & OB_MODE_SCULPT) && modifiers_findByType(ob, eModifierType_Multires)) multires_force_update(ob); } @@ -438,7 +434,7 @@ int multiresModifier_reshapeFromDeformMod(const struct EvaluationContext *eval_c int numVerts, result; float (*deformedVerts)[3]; - if (multires_get_level(mmd, false, true, eval_ctx->object_mode) == 0) + if (multires_get_level(ob, mmd, false, true) == 0) return 0; /* Create DerivedMesh for deformation modifier */ @@ -618,7 +614,7 @@ static void multires_grid_paint_mask_downsample(GridPaintMask *gpm, int level) } } -static void multires_del_higher(MultiresModifierData *mmd, Object *ob, int lvl, eObjectMode object_mode) +static void multires_del_higher(MultiresModifierData *mmd, Object *ob, int lvl) { Mesh *me = (Mesh *)ob->data; int levels = mmd->totlvl - lvl; @@ -680,14 +676,14 @@ static void multires_del_higher(MultiresModifierData *mmd, Object *ob, int lvl, } } - multires_set_tot_level(mmd, lvl, object_mode); + multires_set_tot_level(ob, mmd, lvl); } /* (direction = 1) for delete higher, (direction = 0) for lower (not implemented yet) */ -void multiresModifier_del_levels(MultiresModifierData *mmd, Object *ob, int direction, eObjectMode object_mode) +void multiresModifier_del_levels(MultiresModifierData *mmd, Object *ob, int direction) { Mesh *me = BKE_mesh_from_object(ob); - int lvl = multires_get_level(mmd, false, true, object_mode); + int lvl = multires_get_level(ob, mmd, false, true); int levels = mmd->totlvl - lvl; MDisps *mdisps; @@ -698,14 +694,13 @@ void multiresModifier_del_levels(MultiresModifierData *mmd, Object *ob, int dire multires_force_update(ob); if (mdisps && levels > 0 && direction == 1) { - multires_del_higher(mmd, ob, lvl, object_mode); + multires_del_higher(mmd, ob, lvl); } - multires_set_tot_level(mmd, lvl, object_mode); + multires_set_tot_level(ob, mmd, lvl); } -static DerivedMesh *multires_dm_create_local( - Object *ob, DerivedMesh *dm, int lvl, int totlvl, int simple, bool alloc_paint_mask, eObjectMode object_mode) +static DerivedMesh *multires_dm_create_local(Object *ob, DerivedMesh *dm, int lvl, int totlvl, int simple, bool alloc_paint_mask) { MultiresModifierData mmd = {{NULL}}; MultiresFlags flags = MULTIRES_USE_LOCAL_MMD; @@ -719,12 +714,10 @@ static DerivedMesh *multires_dm_create_local( if (alloc_paint_mask) flags |= MULTIRES_ALLOC_PAINT_MASK; - return multires_make_derived_from_derived(dm, &mmd, ob, flags, object_mode); + return multires_make_derived_from_derived(dm, &mmd, ob, flags); } -static DerivedMesh *subsurf_dm_create_local( - DerivedMesh *dm, int lvl, int simple, - int optimal, int plain_uv, int alloc_paint_mask, eObjectMode object_mode) +static DerivedMesh *subsurf_dm_create_local(Object *ob, DerivedMesh *dm, int lvl, int simple, int optimal, int plain_uv, int alloc_paint_mask) { SubsurfModifierData smd = {{NULL}}; SubsurfFlags flags = 0; @@ -737,7 +730,7 @@ static DerivedMesh *subsurf_dm_create_local( if (optimal) smd.flags |= eSubsurfModifierFlag_ControlEdges; - if (object_mode & OB_MODE_EDIT) + if (ob->mode & OB_MODE_EDIT) flags |= SUBSURF_IN_EDIT_MODE; if (alloc_paint_mask) @@ -757,7 +750,7 @@ static float v3_dist_from_plane(float v[3], float center[3], float no[3]) return dot_v3v3(s, no); } -void multiresModifier_base_apply(MultiresModifierData *mmd, Object *ob, eObjectMode object_mode) +void multiresModifier_base_apply(MultiresModifierData *mmd, Object *ob) { DerivedMesh *cddm, *dispdm, *origdm; Mesh *me; @@ -779,7 +772,7 @@ void multiresModifier_base_apply(MultiresModifierData *mmd, Object *ob, eObjectM /* generate highest level with displacements */ cddm = CDDM_from_mesh(me); DM_set_only_copy(cddm, CD_MASK_BAREMESH); - dispdm = multires_dm_create_local(ob, cddm, totlvl, totlvl, 0, 0, object_mode); + dispdm = multires_dm_create_local(ob, cddm, totlvl, totlvl, 0, 0); cddm->release(cddm); /* copy the new locations of the base verts into the mesh */ @@ -875,9 +868,7 @@ void multiresModifier_base_apply(MultiresModifierData *mmd, Object *ob, eObjectM /* subdivide the mesh to highest level without displacements */ cddm = CDDM_from_mesh(me); DM_set_only_copy(cddm, CD_MASK_BAREMESH); - origdm = subsurf_dm_create_local( - cddm, totlvl, 0, - 0, mmd->flags & eMultiresModifierFlag_PlainUv, 0, object_mode); + origdm = subsurf_dm_create_local(ob, cddm, totlvl, 0, 0, mmd->flags & eMultiresModifierFlag_PlainUv, 0); cddm->release(cddm); /* calc disps */ @@ -887,8 +878,7 @@ void multiresModifier_base_apply(MultiresModifierData *mmd, Object *ob, eObjectM dispdm->release(dispdm); } -static void multires_subdivide( - MultiresModifierData *mmd, Object *ob, int totlvl, int updateblock, int simple, eObjectMode object_mode) +static void multires_subdivide(MultiresModifierData *mmd, Object *ob, int totlvl, int updateblock, int simple) { Mesh *me = ob->data; MDisps *mdisps; @@ -917,13 +907,11 @@ static void multires_subdivide( /* create subsurf DM from original mesh at high level */ cddm = CDDM_from_mesh(me); DM_set_only_copy(cddm, CD_MASK_BAREMESH); - highdm = subsurf_dm_create_local( - cddm, totlvl, simple, - 0, mmd->flags & eMultiresModifierFlag_PlainUv, has_mask, object_mode); + highdm = subsurf_dm_create_local(ob, cddm, totlvl, simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv, has_mask); ss = ((CCGDerivedMesh *)highdm)->ss; /* create multires DM from original mesh at low level */ - lowdm = multires_dm_create_local(ob, cddm, lvl, lvl, simple, has_mask, object_mode); + lowdm = multires_dm_create_local(ob, cddm, lvl, lvl, simple, has_mask); BLI_assert(lowdm != cddm); cddm->release(cddm); @@ -970,13 +958,12 @@ static void multires_subdivide( multires_reallocate_mdisps(me->totloop, mdisps, totlvl); } - multires_set_tot_level(mmd, totlvl, object_mode); + multires_set_tot_level(ob, mmd, totlvl); } -void multiresModifier_subdivide( - MultiresModifierData *mmd, Object *ob, int updateblock, int simple, eObjectMode object_mode) +void multiresModifier_subdivide(MultiresModifierData *mmd, Object *ob, int updateblock, int simple) { - multires_subdivide(mmd, ob, mmd->totlvl + 1, updateblock, simple, object_mode); + multires_subdivide(mmd, ob, mmd->totlvl + 1, updateblock, simple); } static void grid_tangent(const CCGKey *key, int x, int y, int axis, CCGElem *grid, float t[3]) @@ -1209,7 +1196,7 @@ static void multiresModifier_disp_run(DerivedMesh *dm, Mesh *me, DerivedMesh *dm } } -void multires_modifier_update_mdisps(struct DerivedMesh *dm, eObjectMode object_mode) +void multires_modifier_update_mdisps(struct DerivedMesh *dm) { CCGDerivedMesh *ccgdm = (CCGDerivedMesh *)dm; Object *ob; @@ -1241,13 +1228,11 @@ void multires_modifier_update_mdisps(struct DerivedMesh *dm, eObjectMode object_ else cddm = CDDM_from_mesh(me); DM_set_only_copy(cddm, CD_MASK_BAREMESH); - highdm = subsurf_dm_create_local( - cddm, totlvl, mmd->simple, - 0, mmd->flags & eMultiresModifierFlag_PlainUv, has_mask, object_mode); + highdm = subsurf_dm_create_local(ob, cddm, totlvl, mmd->simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv, has_mask); ss = ((CCGDerivedMesh *)highdm)->ss; /* create multires DM from original mesh and displacements */ - lowdm = multires_dm_create_local(ob, cddm, lvl, totlvl, mmd->simple, has_mask, object_mode); + lowdm = multires_dm_create_local(ob, cddm, lvl, totlvl, mmd->simple, has_mask); cddm->release(cddm); /* gather grid data */ @@ -1305,9 +1290,7 @@ void multires_modifier_update_mdisps(struct DerivedMesh *dm, eObjectMode object_ else cddm = CDDM_from_mesh(me); DM_set_only_copy(cddm, CD_MASK_BAREMESH); - subdm = subsurf_dm_create_local( - cddm, mmd->totlvl, mmd->simple, - 0, mmd->flags & eMultiresModifierFlag_PlainUv, has_mask, object_mode); + subdm = subsurf_dm_create_local(ob, cddm, mmd->totlvl, mmd->simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv, has_mask); cddm->release(cddm); multiresModifier_disp_run(dm, me, NULL, CALC_DISPLACEMENTS, subdm->getGridData(subdm), mmd->totlvl); @@ -1349,7 +1332,7 @@ void multires_modifier_update_hidden(DerivedMesh *dm) } } -void multires_set_space(DerivedMesh *dm, Object *ob, int from, int to, eObjectMode object_mode) +void multires_set_space(DerivedMesh *dm, Object *ob, int from, int to) { DerivedMesh *ccgdm = NULL, *subsurf = NULL; CCGElem **gridData, **subGridData = NULL; @@ -1370,11 +1353,10 @@ void multires_set_space(DerivedMesh *dm, Object *ob, int from, int to, eObjectMo } totlvl = mmd->totlvl; - ccgdm = multires_dm_create_local(ob, dm, totlvl, totlvl, mmd->simple, false, object_mode); + ccgdm = multires_dm_create_local(ob, dm, totlvl, totlvl, mmd->simple, false); - subsurf = subsurf_dm_create_local( - dm, totlvl, mmd->simple, - mmd->flags & eMultiresModifierFlag_ControlEdges, mmd->flags & eMultiresModifierFlag_PlainUv, 0, object_mode); + subsurf = subsurf_dm_create_local(ob, dm, totlvl, + mmd->simple, mmd->flags & eMultiresModifierFlag_ControlEdges, mmd->flags & eMultiresModifierFlag_PlainUv, 0); numGrids = subsurf->getNumGrids(subsurf); gridSize = subsurf->getGridSize(subsurf); @@ -1489,12 +1471,10 @@ void multires_stitch_grids(Object *ob) } } -DerivedMesh *multires_make_derived_from_derived( - DerivedMesh *dm, - MultiresModifierData *mmd, - Object *ob, - MultiresFlags flags, - eObjectMode object_mode) +DerivedMesh *multires_make_derived_from_derived(DerivedMesh *dm, + MultiresModifierData *mmd, + Object *ob, + MultiresFlags flags) { Mesh *me = ob->data; DerivedMesh *result; @@ -1503,18 +1483,16 @@ DerivedMesh *multires_make_derived_from_derived( CCGKey key; const bool render = (flags & MULTIRES_USE_RENDER_PARAMS) != 0; const bool ignore_simplify = (flags & MULTIRES_IGNORE_SIMPLIFY) != 0; - int lvl = multires_get_level(mmd, render, ignore_simplify, object_mode); + int lvl = multires_get_level(ob, mmd, render, ignore_simplify); int i, gridSize, numGrids; if (lvl == 0) return dm; - result = subsurf_dm_create_local( - dm, lvl, mmd->simple, - mmd->flags & eMultiresModifierFlag_ControlEdges, - mmd->flags & eMultiresModifierFlag_PlainUv, - flags & MULTIRES_ALLOC_PAINT_MASK, - object_mode); + result = subsurf_dm_create_local(ob, dm, lvl, + mmd->simple, mmd->flags & eMultiresModifierFlag_ControlEdges, + mmd->flags & eMultiresModifierFlag_PlainUv, + flags & MULTIRES_ALLOC_PAINT_MASK); if (!(flags & MULTIRES_USE_LOCAL_MMD)) { ccgdm = (CCGDerivedMesh *)result; @@ -2142,7 +2120,6 @@ void multires_load_old(Object *ob, Mesh *me) DerivedMesh *dm, *orig; CustomDataLayer *l; int i; - const eObjectMode object_mode = OB_MODE_OBJECT; /* Load original level into the mesh */ lvl = me->mr->levels.first; @@ -2191,7 +2168,7 @@ void multires_load_old(Object *ob, Mesh *me) BLI_insertlinkbefore(&ob->modifiers, md, mmd); for (i = 0; i < me->mr->level_count - 1; ++i) - multiresModifier_subdivide(mmd, ob, 1, 0, object_mode); + multiresModifier_subdivide(mmd, ob, 1, 0); mmd->lvl = mmd->totlvl; orig = CDDM_from_mesh(me); @@ -2200,7 +2177,7 @@ void multires_load_old(Object *ob, Mesh *me) * reference subsurfed dm with this option, before calling multiresModifier_disp_run(), * which implicitly expects both subsurfs from its first dm and oldGridData parameters to * be of the same "format"! */ - dm = multires_make_derived_from_derived(orig, mmd, ob, 0, object_mode); + dm = multires_make_derived_from_derived(orig, mmd, ob, 0); multires_load_old_dm(dm, me, mmd->totlvl + 1); @@ -2215,22 +2192,21 @@ void multires_load_old(Object *ob, Mesh *me) /* If 'ob_src' and 'ob_dst' both have multires modifiers, synchronize them * such that 'ob_dst' has the same total number of levels as 'ob_src'. */ -void multiresModifier_sync_levels_ex( - Object *ob_dst, MultiresModifierData *mmd_src, MultiresModifierData *mmd_dst, eObjectMode object_mode) +void multiresModifier_sync_levels_ex(Object *ob_dst, MultiresModifierData *mmd_src, MultiresModifierData *mmd_dst) { if (mmd_src->totlvl == mmd_dst->totlvl) { return; } if (mmd_src->totlvl > mmd_dst->totlvl) { - multires_subdivide(mmd_dst, ob_dst, mmd_src->totlvl, false, mmd_dst->simple, object_mode); + multires_subdivide(mmd_dst, ob_dst, mmd_src->totlvl, false, mmd_dst->simple); } else { - multires_del_higher(mmd_dst, ob_dst, mmd_src->totlvl, object_mode); + multires_del_higher(mmd_dst, ob_dst, mmd_src->totlvl); } } -static void multires_sync_levels(Scene *scene, Object *ob_src, Object *ob_dst, eObjectMode object_mode) +static void multires_sync_levels(Scene *scene, Object *ob_src, Object *ob_dst) { MultiresModifierData *mmd_src = get_multires_modifier(scene, ob_src, true); MultiresModifierData *mmd_dst = get_multires_modifier(scene, ob_dst, true); @@ -2245,7 +2221,7 @@ static void multires_sync_levels(Scene *scene, Object *ob_src, Object *ob_dst, e } if (mmd_src && mmd_dst) { - multiresModifier_sync_levels_ex(ob_dst, mmd_src, mmd_dst, object_mode); + multiresModifier_sync_levels_ex(ob_dst, mmd_src, mmd_dst); } } @@ -2338,9 +2314,7 @@ static void multires_apply_smat(const struct EvaluationContext *eval_ctx, Scene MEM_freeN(vertCos); /* scaled ccgDM for tangent space of object with applied scale */ - dm = subsurf_dm_create_local( - cddm, high_mmd.totlvl, high_mmd.simple, - 0, mmd->flags & eMultiresModifierFlag_PlainUv, 0, eval_ctx->object_mode); + dm = subsurf_dm_create_local(ob, cddm, high_mmd.totlvl, high_mmd.simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv, 0); cddm->release(cddm); gridSize = dm->getGridSize(dm); @@ -2403,7 +2377,7 @@ void multiresModifier_scale_disp(const struct EvaluationContext *eval_ctx, Scene void multiresModifier_prepare_join(const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, Object *to_ob) { float smat[3][3], tmat[3][3], mat[3][3]; - multires_sync_levels(scene, to_ob, ob, eval_ctx->object_mode); + multires_sync_levels(scene, to_ob, ob); /* construct scale matrix for displacement */ BKE_object_scale_to_mat3(to_ob, tmat); diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 59d2bcc89fd..98fcd478b07 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -262,9 +262,7 @@ bool BKE_object_support_modifier_type_check(Object *ob, int modifier_type) return true; } -void BKE_object_link_modifiers( - struct Object *ob_dst, const struct Object *ob_src, - eObjectMode object_mode) +void BKE_object_link_modifiers(struct Object *ob_dst, const struct Object *ob_src) { ModifierData *md; BKE_object_free_modifiers(ob_dst, 0); @@ -303,8 +301,7 @@ void BKE_object_link_modifiers( if (md->type == eModifierType_Multires) { /* Has to be done after mod creation, but *before* we actually copy its settings! */ - multiresModifier_sync_levels_ex( - ob_dst, (MultiresModifierData *)md, (MultiresModifierData *)nmd, object_mode); + multiresModifier_sync_levels_ex(ob_dst, (MultiresModifierData *)md, (MultiresModifierData *)nmd); } modifier_copyData(md, nmd); @@ -490,7 +487,7 @@ void BKE_object_free(Object *ob) } /* actual check for internal data, not context or flags */ -bool BKE_object_is_in_editmode(const Object *ob) +bool BKE_object_is_in_editmode(Object *ob) { if (ob->data == NULL) return false; @@ -539,11 +536,11 @@ bool BKE_object_is_in_editmode_vgroup(Object *ob) BKE_object_is_in_editmode(ob)); } -bool BKE_object_is_in_wpaint_select_vert(const Object *ob, eObjectMode object_mode) +bool BKE_object_is_in_wpaint_select_vert(const Object *ob) { if (ob->type == OB_MESH) { - const Mesh *me = ob->data; - return ((object_mode & OB_MODE_WEIGHT_PAINT) && + Mesh *me = ob->data; + return ((ob->mode & OB_MODE_WEIGHT_PAINT) && (me->edit_btmesh == NULL) && (ME_EDIT_PAINT_SEL_MODE(me) == SCE_SELECT_VERTEX)); } @@ -888,10 +885,10 @@ static LodLevel *lod_level_select(Object *ob, const float camera_position[3]) return current; } -bool BKE_object_lod_is_usable(Object *ob, ViewLayer *view_layer, const eObjectMode object_mode) +bool BKE_object_lod_is_usable(Object *ob, ViewLayer *view_layer) { bool active = (view_layer) ? ob == OBACT(view_layer) : false; - return (object_mode == OB_MODE_OBJECT || !active); + return (ob->mode == OB_MODE_OBJECT || !active); } void BKE_object_lod_update(Object *ob, const float camera_position[3]) @@ -904,11 +901,11 @@ void BKE_object_lod_update(Object *ob, const float camera_position[3]) } } -static Object *lod_ob_get(Object *ob, ViewLayer *view_layer, int flag, const eObjectMode object_mode) +static Object *lod_ob_get(Object *ob, ViewLayer *view_layer, int flag) { LodLevel *current = ob->currentlod; - if (!current || !BKE_object_lod_is_usable(ob, view_layer, object_mode)) + if (!current || !BKE_object_lod_is_usable(ob, view_layer)) return ob; while (current->prev && (!(current->flags & flag) || !current->source || current->source->type != OB_MESH)) { @@ -918,14 +915,14 @@ static Object *lod_ob_get(Object *ob, ViewLayer *view_layer, int flag, const eOb return current->source; } -struct Object *BKE_object_lod_meshob_get(Object *ob, ViewLayer *view_layer, const eObjectMode object_mode) +struct Object *BKE_object_lod_meshob_get(Object *ob, ViewLayer *view_layer) { - return lod_ob_get(ob, view_layer, OB_LOD_USE_MESH, object_mode); + return lod_ob_get(ob, view_layer, OB_LOD_USE_MESH); } -struct Object *BKE_object_lod_matob_get(Object *ob, ViewLayer *view_layer, const eObjectMode object_mode) +struct Object *BKE_object_lod_matob_get(Object *ob, ViewLayer *view_layer) { - return lod_ob_get(ob, view_layer, OB_LOD_USE_MAT, object_mode); + return lod_ob_get(ob, view_layer, OB_LOD_USE_MAT); } #endif /* WITH_GAMEENGINE */ @@ -1154,13 +1151,12 @@ static void copy_object_lod(Object *obn, const Object *ob, const int UNUSED(flag obn->currentlod = (LodLevel *)obn->lodlevels.first; } -bool BKE_object_pose_context_check_ex(Object *ob, bool selected) +bool BKE_object_pose_context_check(Object *ob) { if ((ob) && (ob->type == OB_ARMATURE) && (ob->pose) && - /* Currently using selection when the object isn't active. */ - ((selected == false) || (ob->flag & SELECT))) + (ob->mode & OB_MODE_POSE)) { return true; } @@ -1169,23 +1165,18 @@ bool BKE_object_pose_context_check_ex(Object *ob, bool selected) } } -bool BKE_object_pose_context_check(Object *ob) -{ - return BKE_object_pose_context_check_ex(ob, false); -} - Object *BKE_object_pose_armature_get(Object *ob) { if (ob == NULL) return NULL; - if (BKE_object_pose_context_check_ex(ob, false)) + if (BKE_object_pose_context_check(ob)) return ob; ob = modifiers_isDeformedByArmature(ob); /* Only use selected check when non-active. */ - if (BKE_object_pose_context_check_ex(ob, true)) + if (BKE_object_pose_context_check(ob)) return ob; return NULL; @@ -1265,6 +1256,7 @@ void BKE_object_copy_data(Main *UNUSED(bmain), Object *ob_dst, const Object *ob_ BKE_object_facemap_copy_list(&ob_dst->fmaps, &ob_src->fmaps); BKE_constraints_copy_ex(&ob_dst->constraints, &ob_src->constraints, flag_subdata, true); + ob_dst->mode = OB_MODE_OBJECT; ob_dst->sculpt = NULL; if (ob_src->pd) { diff --git a/source/blender/blenkernel/intern/object_dupli.c b/source/blender/blenkernel/intern/object_dupli.c index 7419efba065..0db77432d53 100644 --- a/source/blender/blenkernel/intern/object_dupli.c +++ b/source/blender/blenkernel/intern/object_dupli.c @@ -108,8 +108,8 @@ static void init_context(DupliContext *r_ctx, const EvaluationContext *eval_ctx, r_ctx->animated = false; r_ctx->group = NULL; - r_ctx->obedit = OBEDIT_FROM_EVAL_CTX(eval_ctx); r_ctx->object = ob; + r_ctx->obedit = OBEDIT_FROM_OBACT(ob); if (space_mat) copy_m4_m4(r_ctx->space_mat, space_mat); else diff --git a/source/blender/blenkernel/intern/object_update.c b/source/blender/blenkernel/intern/object_update.c index 2a33937e6ed..de2002624c0 100644 --- a/source/blender/blenkernel/intern/object_update.c +++ b/source/blender/blenkernel/intern/object_update.c @@ -172,7 +172,7 @@ void BKE_object_handle_data_update( switch (ob->type) { case OB_MESH: { - BMEditMesh *em = (eval_ctx->object_mode & OB_MODE_EDIT) ? BKE_editmesh_from_object(ob) : NULL; + BMEditMesh *em = (ob->mode & OB_MODE_EDIT) ? BKE_editmesh_from_object(ob) : NULL; uint64_t data_mask = scene->customdata_mask | CD_MASK_BAREMESH; #ifdef WITH_FREESTYLE /* make sure Freestyle edge/face marks appear in DM for render (see T40315) */ @@ -222,7 +222,7 @@ void BKE_object_handle_data_update( } /* particles */ - if ((ob != OBEDIT_FROM_EVAL_CTX(eval_ctx)) && ob->particlesystem.first) { + if ((ob != OBEDIT_FROM_VIEW_LAYER(eval_ctx->view_layer)) && ob->particlesystem.first) { ParticleSystem *tpsys, *psys; DerivedMesh *dm; ob->transflag &= ~OB_DUPLIPARTS; diff --git a/source/blender/blenkernel/intern/paint.c b/source/blender/blenkernel/intern/paint.c index 3ed2aeb6582..20375fe6953 100644 --- a/source/blender/blenkernel/intern/paint.c +++ b/source/blender/blenkernel/intern/paint.c @@ -76,67 +76,27 @@ const char PAINT_CURSOR_TEXTURE_PAINT[3] = {255, 255, 255}; static eOverlayControlFlags overlay_flags = 0; -/* Keep in sync with 'BKE_paint_get_active' */ -#define OB_MODE_HAS_PAINT_STRUCT(SEP) \ - OB_MODE_SCULPT SEP \ - OB_MODE_VERTEX_PAINT SEP \ - OB_MODE_WEIGHT_PAINT SEP \ - OB_MODE_TEXTURE_PAINT SEP \ - OB_MODE_EDIT - -#define COMMA , -static const eObjectMode ob_mode_has_paint_struct = OB_MODE_HAS_PAINT_STRUCT(|); -static const eObjectMode ob_mode_has_paint_struct_array[] = {OB_MODE_HAS_PAINT_STRUCT(COMMA)}; -#undef COMMA - -#define FOREACH_OB_MODE_PAINT_ITER_BEGIN(scene, view_layer, object_mode, p) \ -{ \ - eObjectMode object_mode_test = object_mode & ob_mode_has_paint_struct; \ - for (uint _i = 0; _i < ARRAY_SIZE(ob_mode_has_paint_struct_array) && object_mode_test; _i++) { \ - eObjectMode object_mode_single = ob_mode_has_paint_struct_array[_i]; \ - if (object_mode_test & object_mode_single) { \ - object_mode_test &= ~object_mode_single; \ - Paint *p = BKE_paint_get_active(scene, view_layer, object_mode_single); \ - { - -#define FOREACH_OB_MODE_PAINT_ITER_END \ - } \ - } \ - } \ -} ((void)0) - -void BKE_paint_invalidate_overlay_tex( - Scene *scene, ViewLayer *view_layer, const Tex *tex, eObjectMode object_mode) +void BKE_paint_invalidate_overlay_tex(Scene *scene, ViewLayer *view_layer, const Tex *tex) { - FOREACH_OB_MODE_PAINT_ITER_BEGIN(scene, view_layer, object_mode, p) - { - Brush *br = p->brush; - if (br) { - if (br->mtex.tex == tex) { - overlay_flags |= PAINT_INVALID_OVERLAY_TEXTURE_PRIMARY; - } - if (br->mask_mtex.tex == tex) { - overlay_flags |= PAINT_INVALID_OVERLAY_TEXTURE_SECONDARY; - } - } - } - FOREACH_OB_MODE_PAINT_ITER_END; + Paint *p = BKE_paint_get_active(scene, view_layer); + Brush *br = p->brush; + + if (!br) + return; + + if (br->mtex.tex == tex) + overlay_flags |= PAINT_INVALID_OVERLAY_TEXTURE_PRIMARY; + if (br->mask_mtex.tex == tex) + overlay_flags |= PAINT_INVALID_OVERLAY_TEXTURE_SECONDARY; } -void BKE_paint_invalidate_cursor_overlay( - Scene *scene, ViewLayer *view_layer, CurveMapping *curve, eObjectMode object_mode) +void BKE_paint_invalidate_cursor_overlay(Scene *scene, ViewLayer *view_layer, CurveMapping *curve) { - FOREACH_OB_MODE_PAINT_ITER_BEGIN(scene, view_layer, object_mode, p) - { - Brush *br = p->brush; - if (br) { - if (br->curve == curve) { - overlay_flags |= PAINT_INVALID_OVERLAY_CURVE; - break; - } - } - } - FOREACH_OB_MODE_PAINT_ITER_END; + Paint *p = BKE_paint_get_active(scene, view_layer); + Brush *br = p->brush; + + if (br && br->curve == curve) + overlay_flags |= PAINT_INVALID_OVERLAY_CURVE; } void BKE_paint_invalidate_overlay_all(void) @@ -198,13 +158,13 @@ Paint *BKE_paint_get_active_from_paintmode(Scene *sce, ePaintMode mode) return NULL; } -Paint *BKE_paint_get_active(Scene *sce, ViewLayer *view_layer, const eObjectMode object_mode) +Paint *BKE_paint_get_active(Scene *sce, ViewLayer *view_layer) { if (sce && view_layer) { ToolSettings *ts = sce->toolsettings; if (view_layer->basact && view_layer->basact->object) { - switch (object_mode) { + switch (view_layer->basact->object->mode) { case OB_MODE_SCULPT: return &ts->sculpt->paint; case OB_MODE_VERTEX_PAINT: @@ -236,7 +196,6 @@ Paint *BKE_paint_get_active_from_context(const bContext *C) SpaceImage *sima; if (sce && view_layer) { - const WorkSpace *workspace = CTX_wm_workspace(C); ToolSettings *ts = sce->toolsettings; Object *obact = NULL; @@ -244,7 +203,7 @@ Paint *BKE_paint_get_active_from_context(const bContext *C) obact = view_layer->basact->object; if ((sima = CTX_wm_space_image(C)) != NULL) { - if (obact && workspace->object_mode == OB_MODE_EDIT) { + if (obact && obact->mode == OB_MODE_EDIT) { if (sima->mode == SI_MODE_PAINT) return &ts->imapaint.paint; else if (ts->use_uv_sculpt) @@ -255,7 +214,7 @@ Paint *BKE_paint_get_active_from_context(const bContext *C) } } else if (obact) { - switch (workspace->object_mode) { + switch (obact->mode) { case OB_MODE_SCULPT: return &ts->sculpt->paint; case OB_MODE_VERTEX_PAINT: @@ -288,7 +247,6 @@ ePaintMode BKE_paintmode_get_active_from_context(const bContext *C) SpaceImage *sima; if (sce && view_layer) { - const WorkSpace *workspace = CTX_wm_workspace(C); ToolSettings *ts = sce->toolsettings; Object *obact = NULL; @@ -296,7 +254,7 @@ ePaintMode BKE_paintmode_get_active_from_context(const bContext *C) obact = view_layer->basact->object; if ((sima = CTX_wm_space_image(C)) != NULL) { - if (obact && workspace->object_mode == OB_MODE_EDIT) { + if (obact && obact->mode == OB_MODE_EDIT) { if (sima->mode == SI_MODE_PAINT) return ePaintTexture2D; else if (ts->use_uv_sculpt) @@ -307,7 +265,7 @@ ePaintMode BKE_paintmode_get_active_from_context(const bContext *C) } } else if (obact) { - switch (workspace->object_mode) { + switch (obact->mode) { case OB_MODE_SCULPT: return ePaintSculpt; case OB_MODE_VERTEX_PAINT: @@ -498,24 +456,24 @@ bool BKE_palette_is_empty(const struct Palette *palette) /* are we in vertex paint or weight pain face select mode? */ -bool BKE_paint_select_face_test(Object *ob, eObjectMode object_mode) +bool BKE_paint_select_face_test(Object *ob) { return ( (ob != NULL) && (ob->type == OB_MESH) && (ob->data != NULL) && (((Mesh *)ob->data)->editflag & ME_EDIT_PAINT_FACE_SEL) && - (object_mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)) + (ob->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)) ); } /* are we in weight paint vertex select mode? */ -bool BKE_paint_select_vert_test(Object *ob, eObjectMode object_mode) +bool BKE_paint_select_vert_test(Object *ob) { return ( (ob != NULL) && (ob->type == OB_MESH) && (ob->data != NULL) && (((Mesh *)ob->data)->editflag & ME_EDIT_PAINT_VERT_SEL) && - (object_mode & OB_MODE_WEIGHT_PAINT || object_mode & OB_MODE_VERTEX_PAINT) + (ob->mode & OB_MODE_WEIGHT_PAINT || ob->mode & OB_MODE_VERTEX_PAINT) ); } @@ -523,10 +481,10 @@ bool BKE_paint_select_vert_test(Object *ob, eObjectMode object_mode) * used to check if selection is possible * (when we don't care if its face or vert) */ -bool BKE_paint_select_elem_test(Object *ob, eObjectMode object_mode) +bool BKE_paint_select_elem_test(Object *ob) { - return (BKE_paint_select_vert_test(ob, object_mode) || - BKE_paint_select_face_test(ob, object_mode)); + return (BKE_paint_select_vert_test(ob) || + BKE_paint_select_face_test(ob)); } void BKE_paint_cavity_curve_preset(Paint *p, int preset) @@ -829,7 +787,7 @@ void BKE_sculptsession_free(Object *ob) BM_log_free(ss->bm_log); if (dm && dm->getPBVH) - dm->getPBVH(NULL, dm, OB_MODE_OBJECT); /* signal to clear */ + dm->getPBVH(NULL, dm); /* signal to clear */ if (ss->texcache) MEM_freeN(ss->texcache); @@ -966,7 +924,7 @@ void BKE_sculpt_update_mesh_elements( dm = mesh_get_derived_final(eval_ctx, scene, ob, CD_MASK_BAREMESH); /* VWPaint require mesh info for loop lookup, so require sculpt mode here */ - if (mmd && eval_ctx->object_mode & OB_MODE_SCULPT) { + if (mmd && ob->mode & OB_MODE_SCULPT) { ss->multires = mmd; ss->totvert = dm->getNumVerts(dm); ss->totpoly = dm->getNumPolys(dm); @@ -984,7 +942,7 @@ void BKE_sculpt_update_mesh_elements( ss->vmask = CustomData_get_layer(&me->vdata, CD_PAINT_MASK); } - ss->pbvh = dm->getPBVH(ob, dm, eval_ctx->object_mode); + ss->pbvh = dm->getPBVH(ob, dm); ss->pmap = (need_pmap && dm->getPolyMap) ? dm->getPolyMap(ob, dm) : NULL; pbvh_show_diffuse_color_set(ss->pbvh, ss->show_diffuse_color); diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c index 5a30b3dacf8..3e9c525b92d 100644 --- a/source/blender/blenkernel/intern/particle.c +++ b/source/blender/blenkernel/intern/particle.c @@ -251,7 +251,7 @@ struct LatticeDeformData *psys_create_lattice_deform_data(ParticleSimulationData { struct LatticeDeformData *lattice_deform_data = NULL; - if (psys_in_edit_mode(sim->eval_ctx, sim->eval_ctx->view_layer, sim->psys) == 0) { + if (psys_in_edit_mode(sim->eval_ctx->view_layer, sim->psys) == 0) { Object *lattice = NULL; ModifierData *md = (ModifierData *)psys_get_modifier(sim->ob, sim->psys); int mode = G.is_rendering ? eModifierMode_Render : eModifierMode_Realtime; @@ -288,12 +288,11 @@ void psys_enable_all(Object *ob) psys->flag &= ~PSYS_DISABLED; } -bool psys_in_edit_mode(const EvaluationContext *eval_ctx, ViewLayer *view_layer, ParticleSystem *psys) +bool psys_in_edit_mode(ViewLayer *view_layer, ParticleSystem *psys) { - /* TODO(mai): the check for view_layer shouldnt be needed, remove when render engine api is updated for this */ - return (view_layer && view_layer->basact && - (eval_ctx->object_mode & OB_MODE_PARTICLE_EDIT) && - psys == psys_get_current(view_layer->basact->object) && + return (view_layer->basact && + (view_layer->basact->object->mode & OB_MODE_PARTICLE_EDIT) && + psys == psys_get_current((view_layer->basact)->object) && (psys->edit || psys->pointcache->edit) && !psys->renderdata); } @@ -2095,7 +2094,7 @@ static bool psys_thread_context_init_path( psys_thread_context_init(ctx, sim); /*---start figuring out what is actually wanted---*/ - if (psys_in_edit_mode(sim->eval_ctx, sim->eval_ctx->view_layer, psys)) { + if (psys_in_edit_mode(sim->eval_ctx->view_layer, psys)) { ParticleEditSettings *pset = &scene->toolsettings->particle; if ((psys->renderdata == 0 && use_render_params == 0) && (psys->edit == NULL || pset->flag & PE_DRAW_PART) == 0) @@ -2192,7 +2191,7 @@ static void psys_thread_create_path(ParticleTask *task, struct ChildParticle *cp ParticleSystem *psys = ctx->sim.psys; ParticleSettings *part = psys->part; ParticleCacheKey **cache = psys->childcache; - ParticleCacheKey **pcache = psys_in_edit_mode(ctx->sim.eval_ctx, ctx->sim.eval_ctx->view_layer, psys) && psys->edit ? psys->edit->pathcache : psys->pathcache; + ParticleCacheKey **pcache = psys_in_edit_mode(ctx->sim.eval_ctx->view_layer, psys) && psys->edit ? psys->edit->pathcache : psys->pathcache; ParticleCacheKey *child, *key[4]; ParticleTexture ptex; float *cpa_fuv = 0, *par_rot = 0, rot[4]; @@ -2616,7 +2615,7 @@ void psys_cache_paths(ParticleSimulationData *sim, float cfra, const bool use_re return; #if 0 /* TODO(mai): something is very wrong with these conditionals, they dont make sense and the cache isnt updating */ - if (psys_in_edit_mode(sim->eval_ctx, sim->eval_ctx->view_layer, psys)) + if (psys_in_edit_mode(sim->eval_ctx->view_layer, psys)) if (psys->renderdata == 0 && (psys->edit == NULL || pset->flag & PE_DRAW_PART) == 0) return; #endif @@ -3244,6 +3243,8 @@ void object_remove_particle_system(Scene *UNUSED(scene), Object *ob) if (ob->particlesystem.first) ((ParticleSystem *) ob->particlesystem.first)->flag |= PSYS_CURRENT; + else + ob->mode &= ~OB_MODE_PARTICLE_EDIT; DEG_relations_tag_update(G.main); DEG_id_tag_update(&ob->id, OB_RECALC_DATA); @@ -3829,7 +3830,7 @@ void psys_get_particle_on_path(ParticleSimulationData *sim, int p, ParticleKey * pind.bspline = (psys->part->flag & PART_HAIR_BSPLINE); /* pind.dm disabled in editmode means we don't get effectors taken into * account when subdividing for instance */ - pind.dm = psys_in_edit_mode(sim->eval_ctx, sim->eval_ctx->view_layer, psys) ? NULL : psys->hair_out_dm; + pind.dm = psys_in_edit_mode(sim->eval_ctx->view_layer, psys) ? NULL : psys->hair_out_dm; init_particle_interpolation(sim->ob, psys, pa, &pind); do_particle_interpolation(psys, p, pa, t, &pind, state); diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c index 8bb35dae96c..2b00e52246f 100644 --- a/source/blender/blenkernel/intern/particle_system.c +++ b/source/blender/blenkernel/intern/particle_system.c @@ -2911,11 +2911,8 @@ static void psys_update_path_cache(ParticleSimulationData *sim, float cfra, cons if ((psys->part->childtype && psys->totchild != psys_get_tot_child(sim->scene, psys)) || psys->recalc&PSYS_RECALC_RESET) alloc=1; - if (alloc || psys->recalc&PSYS_RECALC_CHILD || - (psys->vgroup[PSYS_VG_DENSITY] && (sim->ob && sim->eval_ctx->object_mode & OB_MODE_WEIGHT_PAINT))) - { + if (alloc || psys->recalc&PSYS_RECALC_CHILD || (psys->vgroup[PSYS_VG_DENSITY] && (sim->ob && sim->ob->mode & OB_MODE_WEIGHT_PAINT))) distr=1; - } if (distr) { if (alloc) @@ -2945,7 +2942,7 @@ static void psys_update_path_cache(ParticleSimulationData *sim, float cfra, cons skip = 1; /* no need to cache paths while baking dynamics */ #if 0 /* TODO(mai): something is very wrong with these conditionals, they dont make sense and the cache isnt updating */ - else if (psys_in_edit_mode(sim->eval_ctx, sim->eval_ctx->view_layer, psys)) { + else if (psys_in_edit_mode(sim->eval_ctx->view_layer, psys)) { if ((pset->flag & PE_DRAW_PART)==0) skip = 1; else if (part->childtype==0 && (psys->flag & PSYS_HAIR_DYNAMICS && psys->pointcache->flag & PTCACHE_BAKED)==0) diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c index ca9cddde65a..b27f7370ff4 100644 --- a/source/blender/blenkernel/intern/scene.c +++ b/source/blender/blenkernel/intern/scene.c @@ -1353,7 +1353,7 @@ static bool check_rendered_viewport_visible(Main *bmain) /* TODO(campbell): shouldn't we be able to use 'eval_ctx->view_layer' here? * Currently this is NULL on load, so don't. */ static void prepare_mesh_for_viewport_render( - Main *bmain, const EvaluationContext *eval_ctx, const ViewLayer *view_layer) + Main *bmain, const ViewLayer *view_layer) { /* This is needed to prepare mesh to be used by the render * engine from the viewport rendering. We do loading here @@ -1364,8 +1364,7 @@ static void prepare_mesh_for_viewport_render( * call loading of the edit data for the mesh objects. */ - /* Expanded 'OBEDIT_FROM_EVAL_CTX' */ - Object *obedit = (eval_ctx->object_mode & OB_MODE_EDIT) ? OBACT(view_layer) : NULL; + Object *obedit = OBEDIT_FROM_VIEW_LAYER(view_layer); if (obedit) { Mesh *mesh = obedit->data; if ((obedit->type == OB_MESH) && @@ -1407,7 +1406,7 @@ void BKE_scene_graph_update_tagged(EvaluationContext *eval_ctx, /* Uncomment this to check if graph was properly tagged for update. */ // DEG_debug_graph_relations_validate(depsgraph, bmain, scene); /* Flush editing data if needed. */ - prepare_mesh_for_viewport_render(bmain, eval_ctx, view_layer); + prepare_mesh_for_viewport_render(bmain, view_layer); /* Flush recalc flags to dependencies. */ DEG_graph_flush_update(bmain, depsgraph); /* Update all objects: drivers, matrices, displists, etc. flags set diff --git a/source/blender/blenkernel/intern/shrinkwrap.c b/source/blender/blenkernel/intern/shrinkwrap.c index e91c3e43b83..618f495dbf1 100644 --- a/source/blender/blenkernel/intern/shrinkwrap.c +++ b/source/blender/blenkernel/intern/shrinkwrap.c @@ -57,8 +57,6 @@ #include "BLI_strict_flags.h" -#include "DEG_depsgraph.h" - /* for timing... */ #if 0 # include "PIL_time_utildefines.h" @@ -616,9 +614,8 @@ static void shrinkwrap_calc_nearest_surface_point(ShrinkwrapCalcData *calc) } /* Main shrinkwrap function */ -void shrinkwrapModifier_deform( - const EvaluationContext *eval_ctx, ShrinkwrapModifierData *smd, Object *ob, DerivedMesh *dm, - float (*vertexCos)[3], int numVerts, bool for_render) +void shrinkwrapModifier_deform(ShrinkwrapModifierData *smd, Object *ob, DerivedMesh *dm, + float (*vertexCos)[3], int numVerts, bool for_render) { DerivedMesh *ss_mesh = NULL; @@ -673,8 +670,7 @@ void shrinkwrapModifier_deform( ssmd.subdivType = ME_CC_SUBSURF; /* catmull clark */ ssmd.levels = smd->subsurfLevels; /* levels */ - ss_mesh = subsurf_make_derived_from_derived( - dm, &ssmd, NULL, (eval_ctx->object_mode & OB_MODE_EDIT) ? SUBSURF_IN_EDIT_MODE : 0); + ss_mesh = subsurf_make_derived_from_derived(dm, &ssmd, NULL, (ob->mode & OB_MODE_EDIT) ? SUBSURF_IN_EDIT_MODE : 0); if (ss_mesh) { calc.vert = ss_mesh->getVertDataArray(ss_mesh, CD_MVERT); diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c index 10792b7d579..9280341b4e4 100644 --- a/source/blender/blenkernel/intern/subsurf_ccg.c +++ b/source/blender/blenkernel/intern/subsurf_ccg.c @@ -85,8 +85,6 @@ #include "CCGSubSurf.h" -#include "DEG_depsgraph.h" - #ifdef WITH_OPENSUBDIV # include "opensubdiv_capi.h" #endif @@ -3790,14 +3788,12 @@ static void ccgDM_release(DerivedMesh *dm) { ccgdm->multires.mmd = NULL; } + if (ccgdm->multires.mmd) { - if (ccgdm->multires.modified_flags & MULTIRES_COORDS_MODIFIED) { - /* TODO/OBMODE, pass real mode? */ - multires_modifier_update_mdisps(dm, OB_MODE_OBJECT); - } - if (ccgdm->multires.modified_flags & MULTIRES_HIDDEN_MODIFIED) { + if (ccgdm->multires.modified_flags & MULTIRES_COORDS_MODIFIED) + multires_modifier_update_mdisps(dm); + if (ccgdm->multires.modified_flags & MULTIRES_HIDDEN_MODIFIED) multires_modifier_update_hidden(dm); - } } } @@ -4191,8 +4187,7 @@ static int ccgDM_use_grid_pbvh(CCGDerivedMesh *ccgdm) return 1; } -static struct PBVH *ccgDM_getPBVH( - Object *ob, DerivedMesh *dm, eObjectMode object_mode) +static struct PBVH *ccgDM_getPBVH(Object *ob, DerivedMesh *dm) { CCGDerivedMesh *ccgdm = (CCGDerivedMesh *)dm; CCGKey key; @@ -4209,7 +4204,7 @@ static struct PBVH *ccgDM_getPBVH( return NULL; bool grid_pbvh = ccgDM_use_grid_pbvh(ccgdm); - if ((object_mode & OB_MODE_SCULPT) == 0) { + if ((ob->mode & OB_MODE_SCULPT) == 0) { /* In vwpaint, we may use a grid_pbvh for multires/subsurf, under certain conditions. * More complex cases break 'history' trail back to original vertices, in that case we fall back to * deformed cage only (i.e. original deformed mesh). */ diff --git a/source/blender/blenkernel/intern/workspace.c b/source/blender/blenkernel/intern/workspace.c index 301084e22fc..26a680c881f 100644 --- a/source/blender/blenkernel/intern/workspace.c +++ b/source/blender/blenkernel/intern/workspace.c @@ -511,30 +511,6 @@ void BKE_workspace_update_tagged(struct EvaluationContext *eval_ctx, BKE_scene_graph_update_tagged(eval_ctx, depsgraph, bmain, scene, view_layer); } -void BKE_workspace_update_object_mode( - struct EvaluationContext *eval_ctx, - WorkSpace *workspace) -{ - /* TODO(campbell): Investigate how this should work exactly, - * for now without this 'bmain->eval_ctx' is never set. */ - - eval_ctx->object_mode = workspace->object_mode; -} - -Object *BKE_workspace_edit_object(WorkSpace *workspace, Scene *scene) -{ - if (workspace->object_mode & OB_MODE_EDIT) { - ViewLayer *view_layer = BKE_workspace_view_layer_get(workspace, scene); - if (view_layer) { - Object *obedit = OBACT(view_layer); - if (obedit) { - BLI_assert(BKE_object_is_in_editmode(obedit)); - return obedit; - } - } - } - return NULL; -} bool BKE_workspace_owner_id_check( const WorkSpace *workspace, const char *owner_id) @@ -549,3 +525,4 @@ bool BKE_workspace_owner_id_check( return BLI_findstring(&workspace->owner_ids, owner_id, offsetof(wmOwnerID, name)) != NULL; } } + |