Farewell Scene->basact

This commit is contained in:
Dalai Felinto 2017-11-09 13:11:20 -02:00
parent 09d26cab0b
commit c35f1d05ea
25 changed files with 103 additions and 135 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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)

View File

@ -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;

View File

@ -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 */
}

View File

@ -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;

View File

@ -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);
}
}
}

View File

@ -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

View File

@ -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;

View File

@ -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);

View File

@ -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);

View File

@ -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);
}
}
}

View File

@ -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);
}
}
}

View File

@ -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;
}
}

View File

@ -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;

View File

@ -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;
}

View File

@ -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)

View File

@ -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 */

View File

@ -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);
}
}

View File

@ -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);

View File

@ -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)

View File

@ -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);

View File

@ -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

View File

@ -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);
}
}