diff --git a/source/blender/blenkernel/BKE_particle.h b/source/blender/blenkernel/BKE_particle.h index a563fcbc99e..406a6b0e982 100644 --- a/source/blender/blenkernel/BKE_particle.h +++ b/source/blender/blenkernel/BKE_particle.h @@ -63,6 +63,7 @@ struct BVHTreeRay; struct BVHTreeRayHit; struct EdgeHash; struct EvaluationContext; +struct SceneLayer; #define PARTICLE_COLLISION_MAX_COLLISIONS 10 @@ -296,7 +297,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(struct Scene *scene, struct ParticleSystem *psys); +bool psys_in_edit_mode(struct SceneLayer *scene_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_scene.h b/source/blender/blenkernel/BKE_scene.h index fac11edea75..b9a9b6452d9 100644 --- a/source/blender/blenkernel/BKE_scene.h +++ b/source/blender/blenkernel/BKE_scene.h @@ -106,10 +106,8 @@ int BKE_scene_base_iter_next( const struct EvaluationContext *eval_ctx, struct SceneBaseIter *iter, struct Scene **scene, int val, struct BaseLegacy **base, struct Object **ob); -void BKE_scene_base_flag_to_objects(struct SceneLayer *sl); +void BKE_scene_base_flag_to_objects(struct SceneLayer *scene_layer); void BKE_scene_base_flag_from_objects(struct Scene *scene); -void BKE_scene_base_flag_sync_from_base(struct BaseLegacy *base); -void BKE_scene_base_flag_sync_from_object(struct BaseLegacy *base); void BKE_scene_object_base_flag_sync_from_base(struct Base *base); void BKE_scene_object_base_flag_sync_from_object(struct Base *base); diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c index 7ba7c13fe40..ee1c94554e3 100644 --- a/source/blender/blenkernel/intern/particle.c +++ b/source/blender/blenkernel/intern/particle.c @@ -252,7 +252,7 @@ struct LatticeDeformData *psys_create_lattice_deform_data(ParticleSimulationData { struct LatticeDeformData *lattice_deform_data = NULL; - if (psys_in_edit_mode(sim->scene, sim->psys) == 0) { + if (psys_in_edit_mode(sim->eval_ctx->scene_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,10 +288,16 @@ void psys_enable_all(Object *ob) for (; psys; psys = psys->next) psys->flag &= ~PSYS_DISABLED; } -bool psys_in_edit_mode(Scene *scene, ParticleSystem *psys) + +bool psys_in_edit_mode(SceneLayer *scene_layer, ParticleSystem *psys) { - return (scene->basact && (scene->basact->object->mode & OB_MODE_PARTICLE_EDIT) && psys == psys_get_current((scene->basact)->object) && (psys->edit || psys->pointcache->edit) && !psys->renderdata); + return (scene_layer->basact && + (scene_layer->basact->object->mode & OB_MODE_PARTICLE_EDIT) && + psys == psys_get_current((scene_layer->basact)->object) && + (psys->edit || psys->pointcache->edit) && + !psys->renderdata); } + bool psys_check_enabled(Object *ob, ParticleSystem *psys, const bool use_render_params) { ParticleSystemModifierData *psmd; @@ -2091,7 +2097,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(scene, psys)) { + if (psys_in_edit_mode(sim->eval_ctx->scene_layer, psys)) { ParticleEditSettings *pset = &scene->toolsettings->particle; if ((psys->renderdata == 0 && use_render_params == 0) && (psys->edit == NULL || pset->flag & PE_DRAW_PART) == 0) @@ -2180,7 +2186,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.scene, psys) && psys->edit ? psys->edit->pathcache : psys->pathcache; + ParticleCacheKey **pcache = psys_in_edit_mode(ctx->sim.eval_ctx->scene_layer, psys) && psys->edit ? psys->edit->pathcache : psys->pathcache; ParticleCacheKey *child, *key[4]; ParticleTexture ptex; float *cpa_fuv = 0, *par_rot = 0, rot[4]; @@ -2589,7 +2595,7 @@ void psys_cache_paths(ParticleSimulationData *sim, float cfra, const bool use_re if ((psys->flag & PSYS_HAIR_DONE || psys->flag & PSYS_KEYED || psys->pointcache) == 0) return; - if (psys_in_edit_mode(sim->scene, psys)) + if (psys_in_edit_mode(sim->eval_ctx->scene_layer, psys)) if (psys->renderdata == 0 && (psys->edit == NULL || pset->flag & PE_DRAW_PART) == 0) return; @@ -3772,7 +3778,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->scene, psys) ? NULL : psys->hair_out_dm; + pind.dm = psys_in_edit_mode(sim->eval_ctx->scene_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 ddf4f04c808..14f67aaea39 100644 --- a/source/blender/blenkernel/intern/particle_system.c +++ b/source/blender/blenkernel/intern/particle_system.c @@ -90,6 +90,8 @@ #include "BKE_scene.h" #include "BKE_bvhutils.h" +#include "DEG_depsgraph.h" + #include "PIL_time.h" #include "RE_shader_ext.h" @@ -2931,7 +2933,7 @@ static void psys_update_path_cache(ParticleSimulationData *sim, float cfra, cons skip = 1; /* draw visualization */ else if (psys->pointcache->flag & PTCACHE_BAKING) skip = 1; /* no need to cache paths while baking dynamics */ - else if (psys_in_edit_mode(sim->scene, psys)) { + else if (psys_in_edit_mode(sim->eval_ctx->scene_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 ccdd785986d..015d688c1dd 100644 --- a/source/blender/blenkernel/intern/scene.c +++ b/source/blender/blenkernel/intern/scene.c @@ -579,7 +579,6 @@ void BKE_scene_free_ex(Scene *sce, const bool do_id_user) /* check all sequences */ BKE_sequencer_clear_scene_in_allseqs(G.main, sce); - sce->basact = NULL; BKE_sequencer_editing_free(sce); BKE_keyingsets_free(&sce->keyingsets); @@ -1832,9 +1831,9 @@ bool BKE_scene_uses_blender_eevee(const Scene *scene) return BKE_viewrender_uses_blender_eevee(&scene->view_render); } -void BKE_scene_base_flag_to_objects(SceneLayer *sl) +void BKE_scene_base_flag_to_objects(SceneLayer *scene_layer) { - Base *base = sl->object_bases.first; + Base *base = scene_layer->object_bases.first; while (base) { BKE_scene_object_base_flag_sync_from_base(base); @@ -1842,16 +1841,6 @@ void BKE_scene_base_flag_to_objects(SceneLayer *sl) } } -void BKE_scene_base_flag_sync_from_base(BaseLegacy *base) -{ - BKE_scene_object_base_flag_sync_from_base(base); -} - -void BKE_scene_base_flag_sync_from_object(BaseLegacy *base) -{ - BKE_scene_object_base_flag_sync_from_object(base); -} - void BKE_scene_object_base_flag_sync_from_base(Base *base) { Object *ob = base->object; diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 9c8c6f86ef0..0fc00945b4c 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -10155,7 +10155,7 @@ static void give_base_to_objects( * but it will miss objects from non-instanciated groups... */ if (base->flag & BASE_SELECTABLED) { base->flag |= BASE_SELECTED; - BKE_scene_base_flag_sync_from_base(base); + BKE_scene_object_base_flag_sync_from_base(base); } /* Do NOT make base active here! screws up GUI stuff, if you want it do it on src/ level. */ } @@ -10308,7 +10308,7 @@ static void link_object_postprocess(ID *id, Scene *scene, SceneLayer *scene_laye if (flag & FILE_AUTOSELECT) { if (base->flag & BASE_SELECTABLED) { base->flag |= BASE_SELECTED; - BKE_scene_base_flag_sync_from_base(base); + BKE_scene_object_base_flag_sync_from_base(base); } /* do NOT make base active here! screws up GUI stuff, if you want it do it on src/ level */ } diff --git a/source/blender/editors/armature/armature_relations.c b/source/blender/editors/armature/armature_relations.c index 51c9836c741..0705d17882c 100644 --- a/source/blender/editors/armature/armature_relations.c +++ b/source/blender/editors/armature/armature_relations.c @@ -403,7 +403,7 @@ int join_armature_exec(bContext *C, wmOperator *op) } /* Free the old object data */ - ED_base_object_free_and_unlink(bmain, scene, base->object); + ED_object_base_free_and_unlink(bmain, scene, base->object); } } CTX_DATA_END; diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c index 85715bf575b..3716827c113 100644 --- a/source/blender/editors/curve/editcurve.c +++ b/source/blender/editors/curve/editcurve.c @@ -6123,7 +6123,7 @@ int join_curve_exec(bContext *C, wmOperator *op) } } - ED_base_object_free_and_unlink(bmain, scene, base->object); + ED_object_base_free_and_unlink(bmain, scene, base->object); } } } diff --git a/source/blender/editors/gpencil/drawgpencil.c b/source/blender/editors/gpencil/drawgpencil.c index 1b6261a6bef..5d38ab2340a 100644 --- a/source/blender/editors/gpencil/drawgpencil.c +++ b/source/blender/editors/gpencil/drawgpencil.c @@ -1669,14 +1669,19 @@ void ED_gpencil_draw_view2d(const bContext *C, bool onlyv2d) /* draw grease-pencil sketches to specified 3d-view assuming that matrices are already set correctly * Note: this gets called twice - first time with only3d=true to draw 3d-strokes, * second time with only3d=false for screen-aligned strokes */ -void ED_gpencil_draw_view3d(wmWindowManager *wm, Scene *scene, View3D *v3d, ARegion *ar, bool only3d) +void ED_gpencil_draw_view3d(wmWindowManager *wm, + Scene *scene, + SceneLayer *scene_layer, + View3D *v3d, + ARegion *ar, + bool only3d) { int dflag = 0; RegionView3D *rv3d = ar->regiondata; int offsx, offsy, winx, winy; /* check that we have grease-pencil stuff to draw */ - bGPdata *gpd = ED_gpencil_data_get_active_v3d(scene, v3d); + bGPdata *gpd = ED_gpencil_data_get_active_v3d(scene, scene_layer); if (gpd == NULL) return; /* when rendering to the offscreen buffer we don't want to diff --git a/source/blender/editors/gpencil/gpencil_utils.c b/source/blender/editors/gpencil/gpencil_utils.c index 4023a343b22..dfefd1aa745 100644 --- a/source/blender/editors/gpencil/gpencil_utils.c +++ b/source/blender/editors/gpencil/gpencil_utils.c @@ -204,15 +204,15 @@ bGPdata *ED_gpencil_data_get_active(const bContext *C) /* -------------------------------------------------------- */ // XXX: this should be removed... We really shouldn't duplicate logic like this! -bGPdata *ED_gpencil_data_get_active_v3d(Scene *scene, View3D *v3d) +bGPdata *ED_gpencil_data_get_active_v3d(Scene *scene, SceneLayer *scene_layer) { - BaseLegacy *base = scene->basact; + Base *base = scene_layer->basact; bGPdata *gpd = NULL; /* We have to make sure active object is actually visible and selected, else we must use default scene gpd, * to be consistent with ED_gpencil_data_get_active's behavior. */ - if (base && TESTBASE(v3d, base)) { + if (base && TESTBASE_NEW(base)) { gpd = base->object->gpd; } return gpd ? gpd : scene->gpd; diff --git a/source/blender/editors/include/ED_gpencil.h b/source/blender/editors/include/ED_gpencil.h index 74d9ad0886d..926f31781e2 100644 --- a/source/blender/editors/include/ED_gpencil.h +++ b/source/blender/editors/include/ED_gpencil.h @@ -48,6 +48,8 @@ struct bGPDpalettecolor; struct bAnimContext; struct KeyframeEditData; struct PointerRNA; +struct Scene; +struct SceneLayer; struct wmWindowManager; struct wmKeyConfig; @@ -113,7 +115,7 @@ struct bGPdata *ED_gpencil_data_get_active_direct(struct ID *screen_id, struct S struct ScrArea *sa, struct Object *ob); /* 3D View */ -struct bGPdata *ED_gpencil_data_get_active_v3d(struct Scene *scene, struct View3D *v3d); +struct bGPdata *ED_gpencil_data_get_active_v3d(struct Scene *scene, struct SceneLayer *scene_layer); bool ED_gpencil_has_keyframe_v3d(struct Scene *scene, struct Object *ob, int cfra); @@ -147,7 +149,12 @@ void ED_gpencil_strokes_copybuf_free(void); void ED_gpencil_draw_2dimage(const struct bContext *C); void ED_gpencil_draw_view2d(const struct bContext *C, bool onlyv2d); -void ED_gpencil_draw_view3d(struct wmWindowManager *wm, struct Scene *scene, struct View3D *v3d, struct ARegion *ar, bool only3d); +void ED_gpencil_draw_view3d(struct wmWindowManager *wm, + struct Scene *scene, + struct SceneLayer *scene_layer, + struct View3D *v3d, + struct ARegion *ar, + bool only3d); void ED_gpencil_draw_ex(struct Scene *scene, struct bGPdata *gpd, int winx, int winy, const int cfra, const char spacetype); void ED_gp_draw_interpolation(struct tGPDinterpolate *tgpi, const int type); diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h index 19c1588fe7e..0dbe37c91b5 100644 --- a/source/blender/editors/include/ED_object.h +++ b/source/blender/editors/include/ED_object.h @@ -105,18 +105,9 @@ void ED_keymap_proportional_maskmode(struct wmKeyConfig *keyconf, struct wmKeyMa void ED_keymap_proportional_editmode(struct wmKeyConfig *keyconf, struct wmKeyMap *keymap, const bool do_connected); -/* send your own notifier for select! */ -void ED_base_object_select(struct BaseLegacy *base, short mode); -/* includes notifier */ -void ED_base_object_activate(struct bContext *C, struct BaseLegacy *base); - void ED_object_base_select(struct Base *base, eObjectSelect_Mode mode); void ED_object_base_activate(struct bContext *C, struct Base *base); - -void ED_base_object_free_and_unlink(struct Main *bmain, struct Scene *scene, struct Object *ob); - -void ED_base_object_sync_from_base(struct BaseLegacy *base, struct Object *ob); -void ED_base_object_sync_from_object(struct BaseLegacy *base, struct Object *ob); +void ED_object_base_free_and_unlink(struct Main *bmain, struct Scene *scene, struct Object *ob); /* single object duplicate, if (dupflag == 0), fully linked, else it uses the flags given */ struct Base *ED_object_add_duplicate(struct Main *bmain, struct Scene *scene, struct SceneLayer *sl, struct Base *base, int dupflag); diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c index da0da05bb13..dd1fbc36d8a 100644 --- a/source/blender/editors/mesh/meshtools.c +++ b/source/blender/editors/mesh/meshtools.c @@ -526,7 +526,7 @@ int join_mesh_exec(bContext *C, wmOperator *op) /* free base, now that data is merged */ if (base->object != ob) { - ED_base_object_free_and_unlink(bmain, scene, base->object); + ED_object_base_free_and_unlink(bmain, scene, base->object); } } } diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c index f6a23a03aa4..2f9dbb657c4 100644 --- a/source/blender/editors/object/object_add.c +++ b/source/blender/editors/object/object_add.c @@ -1204,7 +1204,7 @@ static void object_delete_check_glsl_update(Object *ob) /* remove base from a specific scene */ /* note: now unlinks constraints as well */ -void ED_base_object_free_and_unlink(Main *bmain, Scene *scene, Object *ob) +void ED_object_base_free_and_unlink(Main *bmain, Scene *scene, Object *ob) { if (BKE_library_ID_is_indirectly_used(bmain, ob) && ID_REAL_USERS(ob) <= 1 && ID_EXTRA_USERS(ob) == 0) @@ -1272,7 +1272,7 @@ static int object_delete_exec(bContext *C, wmOperator *op) } /* remove from current scene only */ - ED_base_object_free_and_unlink(bmain, scene, ob); + ED_object_base_free_and_unlink(bmain, scene, ob); changed = true; if (use_global) { @@ -1285,7 +1285,7 @@ static int object_delete_exec(bContext *C, wmOperator *op) ob->id.name + 2, scene_iter->id.name + 2); break; } - ED_base_object_free_and_unlink(bmain, scene_iter, ob); + ED_object_base_free_and_unlink(bmain, scene_iter, ob); } } } @@ -2013,7 +2013,7 @@ static int convert_exec(bContext *C, wmOperator *op) if (BKE_mball_is_basis(ob_mball) || ((ob_basis = BKE_mball_basis_find(scene, ob_mball)) && (ob_basis->flag & OB_DONE))) { - ED_base_object_free_and_unlink(bmain, scene, ob_mball); + ED_object_base_free_and_unlink(bmain, scene, ob_mball); } } } diff --git a/source/blender/editors/object/object_select.c b/source/blender/editors/object/object_select.c index 9da7154ae8d..b87c8500de0 100644 --- a/source/blender/editors/object/object_select.c +++ b/source/blender/editors/object/object_select.c @@ -89,44 +89,6 @@ /* Note: send a NC_SCENE|ND_OB_SELECT notifier yourself! (or * or a NC_SCENE|ND_OB_VISIBLE in case of visibility toggling */ -void ED_base_object_select(BaseLegacy *base, short mode) -{ - if (base) { - if (mode == BA_SELECT) { - if (!(base->object->restrictflag & OB_RESTRICT_SELECT)) - base->flag_legacy |= SELECT; - } - else if (mode == BA_DESELECT) { - base->flag_legacy &= ~SELECT; - } - BKE_scene_base_flag_sync_from_base(base); - } -} - -/* also to set active NULL */ -void ED_base_object_activate(bContext *C, BaseLegacy *base) -{ - Scene *scene = CTX_data_scene(C); - - /* sets scene->basact */ - BASACT = base; - - if (base) { -#ifdef USE_WORKSPACE_MODE - WorkSpace *workspace = CTX_wm_workspace(C); - - BKE_workspace_object_mode_set(workspace, base->object->mode); -#endif - - /* XXX old signals, remember to handle notifiers now! */ - // select_actionchannel_by_name(base->object->action, "Object", 1); - - WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, scene); - } - else - WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, NULL); -} - void ED_object_base_select(Base *base, eObjectSelect_Mode mode) { if (mode == BA_INVERT) { @@ -147,16 +109,24 @@ void ED_object_base_select(Base *base, eObjectSelect_Mode mode) /* Never happens. */ break; } + BKE_scene_object_base_flag_sync_from_base(base); } } +/** + * Change active base, it includes the notifier + */ void ED_object_base_activate(bContext *C, Base *base) { - SceneLayer *sl = CTX_data_scene_layer(C); - sl->basact = base; + SceneLayer *scene_layer = CTX_data_scene_layer(C); + scene_layer->basact = base; if (base) { - WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, sl); +#ifdef USE_WORKSPACE_MODE + WorkSpace *workspace = CTX_wm_workspace(C); + BKE_workspace_object_mode_set(workspace, base->object->mode); +#endif + WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, scene_layer); } else { WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, NULL); @@ -659,7 +629,7 @@ static bool select_grouped_object_hooks(bContext *C, Object *ob) if (hmd->object && !(hmd->object->flag & SELECT)) { base = BKE_scene_layer_base_find(sl, hmd->object); if (base && (BASE_SELECTABLE_NEW(base))) { - ED_base_object_select(base, BA_SELECT); + ED_object_base_select(base, BA_SELECT); changed = true; } } diff --git a/source/blender/editors/space_buttons/buttons_texture.c b/source/blender/editors/space_buttons/buttons_texture.c index e3d72ba67d8..a7f18a4298c 100644 --- a/source/blender/editors/space_buttons/buttons_texture.c +++ b/source/blender/editors/space_buttons/buttons_texture.c @@ -54,6 +54,7 @@ #include "DNA_linestyle_types.h" #include "BKE_context.h" +#include "BKE_layer.h" #include "BKE_linestyle.h" #include "BKE_material.h" #include "BKE_modifier.h" @@ -324,6 +325,7 @@ static void buttons_texture_users_from_context(ListBase *users, const bContext * Material *ma = NULL; Lamp *la = NULL; World *wrld = NULL; + WorkSpace *workspace = NULL; FreestyleLineStyle *linestyle = NULL; Brush *brush = NULL; ID *pinid = sbuts->pinid; @@ -345,17 +347,25 @@ static void buttons_texture_users_from_context(ListBase *users, const bContext * brush = (Brush *)pinid; else if (GS(pinid->name) == ID_LS) linestyle = (FreestyleLineStyle *)pinid; + else if (GS(pinid->name) == ID_WS) + workspace = (WorkSpace *)workspace; } if (!scene) scene = CTX_data_scene(C); if (!pinid || GS(pinid->name) == ID_SCE) { - ob = (scene->basact) ? scene->basact->object : NULL; wrld = scene->world; brush = BKE_paint_brush(BKE_paint_get_active_from_context(C)); linestyle = BKE_linestyle_active_from_scene(scene); } + else if (!pinid || GS(pinid->name) == ID_WS) { + if (!workspace) { + workspace = CTX_wm_workspace(C); + } + SceneLayer *scene_layer = BKE_scene_layer_from_workspace_get(scene, workspace); + ob = OBACT_NEW(scene_layer); + } if (ob && ob->type == OB_LAMP && !la) la = ob->data; diff --git a/source/blender/editors/space_outliner/outliner_tools.c b/source/blender/editors/space_outliner/outliner_tools.c index 481497e15f1..ca168094ae2 100644 --- a/source/blender/editors/space_outliner/outliner_tools.c +++ b/source/blender/editors/space_outliner/outliner_tools.c @@ -424,7 +424,7 @@ static void object_delete_cb( if (scene->obedit == ob) ED_object_editmode_exit(C, EM_FREEDATA | EM_FREEUNDO | EM_WAITCURSOR | EM_DO_UNDO); - ED_base_object_free_and_unlink(CTX_data_main(C), scene, ob); + ED_object_base_free_and_unlink(CTX_data_main(C), scene, ob); /* leave for ED_outliner_id_unref to handle */ #if 0 te->directdata = NULL; @@ -928,7 +928,7 @@ static Base *outline_delete_hierarchy(bContext *C, ReportList *reports, Scene *s base->object->id.name + 2, scene->id.name + 2); return base_next; } - ED_base_object_free_and_unlink(CTX_data_main(C), scene, base->object); + ED_object_base_free_and_unlink(CTX_data_main(C), scene, base->object); return base_next; } diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index e75c353a34d..b2fdc62af3c 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -5941,7 +5941,7 @@ static void draw_new_particle_system( if (pars == NULL) return; /* don't draw normal paths in edit mode */ - if (psys_in_edit_mode(scene, psys) && (pset->flag & PE_DRAW_PART) == 0) + if (psys_in_edit_mode(eval_ctx->scene_layer, psys) && (pset->flag & PE_DRAW_PART) == 0) return; if (part->draw_as == PART_DRAW_REND) diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 75d064bbbac..13d5f590177 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -2048,7 +2048,7 @@ void ED_view3d_draw_offscreen( if (v3d->flag2 & V3D_SHOW_GPENCIL) { /* draw grease-pencil stuff - needed to get paint-buffer shown too (since it's 2D) */ - ED_gpencil_draw_view3d(NULL, scene, v3d, ar, false); + ED_gpencil_draw_view3d(NULL, scene, scene_layer, v3d, ar, false); } /* freeing the images again here could be done after the operator runs, leaving for now */ diff --git a/source/blender/editors/space_view3d/view3d_draw_legacy.c b/source/blender/editors/space_view3d/view3d_draw_legacy.c index 834c0390e2c..e242b2eef33 100644 --- a/source/blender/editors/space_view3d/view3d_draw_legacy.c +++ b/source/blender/editors/space_view3d/view3d_draw_legacy.c @@ -1182,7 +1182,7 @@ void ED_view3d_draw_depth_gpencil( glEnable(GL_DEPTH_TEST); if (v3d->flag2 & V3D_SHOW_GPENCIL) { - ED_gpencil_draw_view3d(NULL, scene, v3d, ar, true); + ED_gpencil_draw_view3d(NULL, scene, eval_ctx->scene_layer, v3d, ar, true); } v3d->zbuf = zbuf; @@ -1502,7 +1502,7 @@ static void view3d_draw_objects( const char **grid_unit, const bool do_bgpic, const bool draw_offscreen, GPUFX *fx) { - SceneLayer *sl = C ? CTX_data_scene_layer(C) : BKE_scene_layer_from_scene_get(scene); + SceneLayer *scene_layer = C ? CTX_data_scene_layer(C) : BKE_scene_layer_from_scene_get(scene); RegionView3D *rv3d = ar->regiondata; Base *base; const bool do_camera_frame = !draw_offscreen; @@ -1561,10 +1561,10 @@ static void view3d_draw_objects( for (SETLOOPER(scene->set, sce_iter, base)) { if ((base->flag & BASE_VISIBLED) != 0) { UI_ThemeColorBlend(TH_WIRE, TH_BACK, 0.6f); - draw_object(eval_ctx, scene, sl, ar, v3d, base, dflag); + draw_object(eval_ctx, scene, scene_layer, ar, v3d, base, dflag); if (base->object->transflag & OB_DUPLI) { - draw_dupli_objects_color(eval_ctx, scene, sl, ar, v3d, base, dflag, TH_UNDEFINED); + draw_dupli_objects_color(eval_ctx, scene, scene_layer, ar, v3d, base, dflag, TH_UNDEFINED); } } } @@ -1573,14 +1573,14 @@ static void view3d_draw_objects( } if (draw_offscreen) { - for (base = sl->object_bases.first; base; base = base->next) { + for (base = scene_layer->object_bases.first; base; base = base->next) { if ((base->flag & BASE_VISIBLED) != 0) { /* dupli drawing */ if (base->object->transflag & OB_DUPLI) { - draw_dupli_objects(eval_ctx, scene, sl, ar, v3d, base); + draw_dupli_objects(eval_ctx, scene, scene_layer, ar, v3d, base); } - draw_object(eval_ctx, scene, sl, ar, v3d, base, 0); + draw_object(eval_ctx, scene, scene_layer, ar, v3d, base, 0); } } } @@ -1588,18 +1588,18 @@ static void view3d_draw_objects( unsigned int lay_used = 0; /* then draw not selected and the duplis, but skip editmode object */ - for (base = sl->object_bases.first; base; base = base->next) { + for (base = scene_layer->object_bases.first; base; base = base->next) { lay_used |= base->lay; if ((base->flag & BASE_VISIBLED) != 0) { /* dupli drawing */ if (base->object->transflag & OB_DUPLI) { - draw_dupli_objects(eval_ctx, scene, sl, ar, v3d, base); + draw_dupli_objects(eval_ctx, scene, scene_layer, ar, v3d, base); } if ((base->flag & BASE_SELECTED) == 0) { if (base->object != scene->obedit) - draw_object(eval_ctx, scene, sl, ar, v3d, base, 0); + draw_object(eval_ctx, scene, scene_layer, ar, v3d, base, 0); } } } @@ -1608,10 +1608,10 @@ static void view3d_draw_objects( v3d->lay_used = lay_used & ((1 << 20) - 1); /* draw selected and editmode */ - for (base = sl->object_bases.first; base; base = base->next) { + for (base = scene_layer->object_bases.first; base; base = base->next) { if ((base->flag & BASE_VISIBLED) != 0) { if (base->object == scene->obedit || (base->flag & BASE_SELECTED)) { - draw_object(eval_ctx, scene, sl, ar, v3d, base, 0); + draw_object(eval_ctx, scene, scene_layer, ar, v3d, base, 0); } } } @@ -1628,12 +1628,12 @@ static void view3d_draw_objects( /* must be before xray draw which clears the depth buffer */ if (v3d->zbuf) glDisable(GL_DEPTH_TEST); - ED_gpencil_draw_view3d(wm, scene, v3d, ar, true); + ED_gpencil_draw_view3d(wm, scene, scene_layer, v3d, ar, true); if (v3d->zbuf) glEnable(GL_DEPTH_TEST); } /* transp and X-ray afterdraw stuff */ - if (v3d->afterdraw_transp.first) view3d_draw_transp(eval_ctx, scene, sl, ar, v3d); + if (v3d->afterdraw_transp.first) view3d_draw_transp(eval_ctx, scene, scene_layer, ar, v3d); /* always do that here to cleanup depth buffers if none needed */ if (fx) { @@ -1641,8 +1641,8 @@ static void view3d_draw_objects( GPU_fx_compositor_setup_XRay_pass(fx, do_composite_xray); } - if (v3d->afterdraw_xray.first) view3d_draw_xray(eval_ctx, scene, sl, ar, v3d, &xrayclear); - if (v3d->afterdraw_xraytransp.first) view3d_draw_xraytransp(eval_ctx, scene, sl, ar, v3d, xrayclear); + if (v3d->afterdraw_xray.first) view3d_draw_xray(eval_ctx, scene, scene_layer, ar, v3d, &xrayclear); + if (v3d->afterdraw_xraytransp.first) view3d_draw_xraytransp(eval_ctx, scene, scene_layer, ar, v3d, xrayclear); if (fx && do_composite_xray) { GPU_fx_compositor_XRay_resolve(fx); @@ -2041,7 +2041,7 @@ static void view3d_main_region_draw_info(const bContext *C, Scene *scene, ARegion *ar, View3D *v3d, const char *grid_unit, bool render_border) { - SceneLayer *sl = CTX_data_scene_layer(C); + SceneLayer *scene_layer = CTX_data_scene_layer(C); wmWindowManager *wm = CTX_wm_manager(C); RegionView3D *rv3d = ar->regiondata; rcti rect; @@ -2058,11 +2058,11 @@ static void view3d_main_region_draw_info(const bContext *C, Scene *scene, if (v3d->flag2 & V3D_SHOW_GPENCIL) { /* draw grease-pencil stuff - needed to get paint-buffer shown too (since it's 2D) */ - ED_gpencil_draw_view3d(wm, scene, v3d, ar, false); + ED_gpencil_draw_view3d(wm, scene, scene_layer, v3d, ar, false); } if ((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) { - VP_legacy_drawcursor(scene, sl, ar, v3d); /* 3D cursor */ + VP_legacy_drawcursor(scene, scene_layer, ar, v3d); /* 3D cursor */ if (U.uiflag & USER_SHOW_ROTVIEWICON) VP_legacy_draw_view_axis(rv3d, &rect); @@ -2070,7 +2070,7 @@ static void view3d_main_region_draw_info(const bContext *C, Scene *scene, draw_view_icon(rv3d, &rect); if (U.uiflag & USER_DRAWVIEWINFO) { - Object *ob = OBACT_NEW(sl); + Object *ob = OBACT_NEW(scene_layer); VP_legacy_draw_selected_name(scene, ob, &rect); } } diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index 5408269ce13..82147f7af4c 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -1551,7 +1551,7 @@ static bool ed_object_select_pick( /* we make the armature selected: * not-selected active object in posemode won't work well for tools */ basact->flag |= BASE_SELECTED; - BKE_scene_base_flag_sync_from_base(basact); + BKE_scene_object_base_flag_sync_from_base(basact); retval = true; WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, basact->object); diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h index f05369a0d58..f6efca10700 100644 --- a/source/blender/makesdna/DNA_scene_types.h +++ b/source/blender/makesdna/DNA_scene_types.h @@ -1615,7 +1615,7 @@ typedef struct Scene { struct Scene *set; ListBase base DNA_DEPRECATED; - struct BaseLegacy *basact; /* active base */ + struct Base *basact DNA_DEPRECATED; /* active base */ struct Object *obedit; /* name replaces old G.obedit */ float cursor[3]; /* 3d cursor location */ @@ -1911,12 +1911,7 @@ extern const char *RE_engine_id_CYCLES; #define MINAFRAME -1048574 #define MINAFRAMEF -1048574.0f -/* depricate this! */ -#define TESTBASE(v3d, base) ( \ - ((base)->flag_legacy & SELECT) && \ - ((base)->lay & v3d->lay) && \ - (((base)->object->restrictflag & OB_RESTRICT_VIEW) == 0)) - +/* deprecate this! */ #define TESTBASE_NEW(base) ( \ (((base)->flag & BASE_SELECTED) != 0) && \ (((base)->flag & BASE_VISIBLED) != 0)) @@ -1936,11 +1931,6 @@ extern const char *RE_engine_id_CYCLES; #define BASE_VISIBLE_NEW(base) ( \ ((base)->flag & BASE_VISIBLED) != 0) -#define FIRSTBASE scene->base.first -#define LASTBASE scene->base.last -#define BASACT (scene->basact) -#define OBACT (BASACT ? BASACT->object: NULL) - #define FIRSTBASE_NEW(_sl) ((_sl)->object_bases.first) #define LASTBASE_NEW(_sl) ((_sl)->object_bases.last) #define BASACT_NEW(_sl) ((_sl)->basact) diff --git a/source/blender/makesrna/intern/rna_layer.c b/source/blender/makesrna/intern/rna_layer.c index 100b08e38ef..ea20e4c6786 100644 --- a/source/blender/makesrna/intern/rna_layer.c +++ b/source/blender/makesrna/intern/rna_layer.c @@ -2047,7 +2047,7 @@ static void rna_def_layer_objects(BlenderRNA *brna, PropertyRNA *cprop) RNA_def_property_pointer_funcs(prop, "rna_LayerObjects_active_object_get", "rna_LayerObjects_active_object_set", NULL, NULL); RNA_def_property_flag(prop, PROP_EDITABLE | PROP_NEVER_UNLINK); RNA_def_property_ui_text(prop, "Active Object", "Active object for this layer"); - /* Could call: ED_base_object_activate(C, rl->basact); + /* Could call: ED_object_base_activate(C, rl->basact); * but would be a bad level call and it seems the notifier is enough */ RNA_def_property_update(prop, NC_SCENE | ND_OB_ACTIVE, NULL); diff --git a/source/blenderplayer/bad_level_call_stubs/stubs.c b/source/blenderplayer/bad_level_call_stubs/stubs.c index 6d64588ce66..1da3c6295f0 100644 --- a/source/blenderplayer/bad_level_call_stubs/stubs.c +++ b/source/blenderplayer/bad_level_call_stubs/stubs.c @@ -550,7 +550,6 @@ void ED_screen_animation_timer_update(struct bScreen *screen, int redraws, int r struct bScreen *ED_screen_animation_playing(const struct wmWindowManager *wm) RET_NULL struct Scene *ED_screen_scene_find(const struct bScreen *screen, const struct wmWindowManager *wm) RET_NULL bool ED_scene_render_layer_delete(struct Main *bmain, Scene *scene, SceneLayer *layer, ReportList *reports) RET_ZERO -void ED_base_object_select(struct BaseLegacy *base, short mode) RET_NONE void ED_object_base_select(struct Base *base, eObjectSelect_Mode mode) RET_NONE bool ED_object_modifier_remove(struct ReportList *reports, struct Main *bmain, struct Object *ob, struct ModifierData *md) RET_ZERO struct ModifierData *ED_object_modifier_add(struct ReportList *reports, struct Main *bmain, struct Scene *scene, struct Object *ob, const char *name, int type) RET_ZERO @@ -572,7 +571,7 @@ void uiLayoutSetAlignment(uiLayout *layout, char alignment) RET_NONE void uiLayoutSetScaleX(struct uiLayout *layout, float scale) RET_NONE void uiLayoutSetScaleY(struct uiLayout *layout, float scale) RET_NONE void uiTemplateIconView(struct uiLayout *layout, struct PointerRNA *ptr, const char *propname, int show_labels, float icon_scale) RET_NONE -void ED_base_object_free_and_unlink(struct Main *bmain, struct Scene *scene, struct Object *base) RET_NONE +void ED_object_base_free_and_unlink(struct Main *bmain, struct Scene *scene, struct Object *base) RET_NONE void ED_mesh_update(struct Mesh *mesh, struct bContext *C, int calc_edges, int calc_tessface) RET_NONE void ED_mesh_vertices_add(struct Mesh *mesh, struct ReportList *reports, int count) RET_NONE void ED_mesh_edges_add(struct Mesh *mesh, struct ReportList *reports, int count) RET_NONE diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.cpp b/source/gameengine/Converter/BL_BlenderDataConversion.cpp index 8534d340b13..ad9855586ee 100644 --- a/source/gameengine/Converter/BL_BlenderDataConversion.cpp +++ b/source/gameengine/Converter/BL_BlenderDataConversion.cpp @@ -1740,7 +1740,7 @@ static void blenderSceneSetBackground(Scene *blenderscene) for (SETLOOPER(blenderscene, it, base)) { base->object->lay = base->lay; - BKE_scene_base_flag_sync_from_base(base); + BKE_scene_object_base_flag_sync_from_base(base); } }