Convert BaseLegacy to Base (part)
authorLuca Rood <dev@lucarood.com>
Fri, 21 Apr 2017 12:28:23 +0000 (14:28 +0200)
committerLuca Rood <dev@lucarood.com>
Mon, 24 Apr 2017 14:09:04 +0000 (16:09 +0200)
21 files changed:
source/blender/blenkernel/BKE_dynamicpaint.h
source/blender/blenkernel/BKE_modifier.h
source/blender/blenkernel/BKE_smoke.h
source/blender/blenkernel/BKE_softbody.h
source/blender/blenkernel/intern/dynamicpaint.c
source/blender/blenkernel/intern/effect.c
source/blender/blenkernel/intern/particle_system.c
source/blender/blenkernel/intern/smoke.c
source/blender/blenkernel/intern/softbody.c
source/blender/editors/animation/anim_markers.c
source/blender/editors/object/object_relations.c
source/blender/editors/object/object_select.c
source/blender/editors/physics/dynamicpaint_ops.c
source/blender/editors/physics/physics_fluid.c
source/blender/editors/space_outliner/outliner_tools.c
source/blender/editors/space_view3d/drawmesh.c
source/blender/gpu/GPU_draw.h
source/blender/gpu/intern/gpu_draw.c
source/blender/modifiers/intern/MOD_dynamicpaint.c
source/blender/modifiers/intern/MOD_smoke.c
source/blender/modifiers/intern/MOD_softbody.c

index 5abb53d4c5268ada9f91bd85581a31f98060aee9..b22f5fa7630e337a27d27fd2c502d1fd006f6719 100644 (file)
@@ -28,6 +28,7 @@
  */
 
 struct Scene;
+struct SceneLayer;
 
 /* Actual surface point        */
 typedef struct PaintSurfaceData {
@@ -60,7 +61,8 @@ typedef struct PaintWavePoint {
        short state;
 } PaintWavePoint;
 
-struct DerivedMesh *dynamicPaint_Modifier_do(struct DynamicPaintModifierData *pmd, struct Scene *scene, struct Object *ob, struct DerivedMesh *dm);
+struct DerivedMesh *dynamicPaint_Modifier_do(struct DynamicPaintModifierData *pmd, struct Scene *scene,
+                                             struct SceneLayer *sl, struct Object *ob, struct DerivedMesh *dm);
 void dynamicPaint_Modifier_free(struct DynamicPaintModifierData *pmd);
 void dynamicPaint_Modifier_copy(struct DynamicPaintModifierData *pmd, struct DynamicPaintModifierData *tsmd);
 
@@ -83,7 +85,7 @@ struct DynamicPaintSurface *get_activeSurface(struct DynamicPaintCanvasSettings
 
 /* image sequence baking */
 int dynamicPaint_createUVSurface(struct Scene *scene, struct DynamicPaintSurface *surface, float *progress, short *do_update);
-int dynamicPaint_calculateFrame(struct DynamicPaintSurface *surface, struct Scene *scene, struct Object *cObject, int frame);
+int dynamicPaint_calculateFrame(struct DynamicPaintSurface *surface, struct Scene *scene, struct SceneLayer *sl, struct Object *cObject, int frame);
 void dynamicPaint_outputSurfaceImage(struct DynamicPaintSurface *surface, char *filename, short output_layer);
 
 /* PaintPoint state */
index 7a522cba2826a7d1025aa9668e19925b5a6c91d3..be6ed4f254d98e91b8b746349eba66b071ebc6e6 100644 (file)
@@ -38,6 +38,7 @@ struct DagForest;
 struct DagNode;
 struct Object;
 struct Scene;
+struct SceneLayer;
 struct ListBase;
 struct bArmature;
 struct Main;
index 20366f00df68f96dd7241349e8b14406f284e812..33d7acdd8643f96c2eff0ae52adbf6c2a730b870 100644 (file)
@@ -35,7 +35,7 @@
 
 typedef float (*bresenham_callback)(float *result, float *input, int res[3], int *pixel, float *tRay, float correct);
 
-struct DerivedMesh *smokeModifier_do(struct SmokeModifierData *smd, struct Scene *scene, struct Object *ob, struct DerivedMesh *dm);
+struct DerivedMesh *smokeModifier_do(struct SmokeModifierData *smd, struct Scene *scene, struct SceneLayer *sl, struct Object *ob, struct DerivedMesh *dm);
 
 void smoke_reallocate_fluid(struct SmokeDomainSettings *sds, float dx, int res[3], int free_old);
 void smoke_reallocate_highres_fluid(struct SmokeDomainSettings *sds, float dx, int res[3], int free_old);
index 486fe8ed5a8396cf2dbd2fd4199583f926a80d54..75c5faf4088d53aa18150eb8a6cdd97ef65f208b 100644 (file)
@@ -59,7 +59,8 @@ extern void             sbFree(struct SoftBody *sb);
 extern void             sbFreeSimulation(struct SoftBody *sb);
 
 /* do one simul step, reading and writing vertex locs from given array */
-extern void             sbObjectStep(struct Scene *scene, struct Object *ob, float framnr, float (*vertexCos)[3], int numVerts);
+extern void             sbObjectStep(struct Scene *scene, struct SceneLayer *sl, struct Object *ob,
+                                     float framnr, float (*vertexCos)[3], int numVerts);
 
 /* makes totally fresh start situation, resets time */
 extern void             sbObjectToSoftbody(struct Object *ob);
index fe55909bcd56005baf64c3df2c6454c642a5e827..537ff2b3c694e1ecae9bd885a8de918ecfe2d06d 100644 (file)
@@ -486,9 +486,9 @@ static void scene_setSubframe(Scene *scene, float subframe)
        scene->r.subframe = subframe;
 }
 
-static int surface_getBrushFlags(DynamicPaintSurface *surface, const Scene *scene)
+static int surface_getBrushFlags(DynamicPaintSurface *surface, const SceneLayer *sl)
 {
-       BaseLegacy *base = NULL;
+       Base *base = NULL;
        GroupObject *go = NULL;
        Object *brushObj = NULL;
        ModifierData *md = NULL;
@@ -498,7 +498,7 @@ static int surface_getBrushFlags(DynamicPaintSurface *surface, const Scene *scen
        if (surface->brush_group)
                go = surface->brush_group->gobject.first;
        else
-               base = scene->base.first;
+               base = FIRSTBASE_NEW;
 
        while (base || go) {
                brushObj = NULL;
@@ -1973,7 +1973,7 @@ static void canvas_copyDerivedMesh(DynamicPaintCanvasSettings *canvas, DerivedMe
 /*
  *     Updates derived mesh copy and processes dynamic paint step / caches.
  */
-static void dynamicPaint_frameUpdate(DynamicPaintModifierData *pmd, Scene *scene, Object *ob, DerivedMesh *dm)
+static void dynamicPaint_frameUpdate(DynamicPaintModifierData *pmd, Scene *scene, SceneLayer *sl, Object *ob, DerivedMesh *dm)
 {
        if (pmd->canvas) {
                DynamicPaintCanvasSettings *canvas = pmd->canvas;
@@ -2036,7 +2036,7 @@ static void dynamicPaint_frameUpdate(DynamicPaintModifierData *pmd, Scene *scene
                                else if (can_simulate) {
                                        /* calculate surface frame */
                                        canvas->flags |= MOD_DPAINT_BAKING;
-                                       dynamicPaint_calculateFrame(surface, scene, ob, current_frame);
+                                       dynamicPaint_calculateFrame(surface, scene, sl, ob, current_frame);
                                        canvas->flags &= ~MOD_DPAINT_BAKING;
 
                                        /* restore canvas derivedmesh if required */
@@ -2055,7 +2055,7 @@ static void dynamicPaint_frameUpdate(DynamicPaintModifierData *pmd, Scene *scene
 }
 
 /* Modifier call. Processes dynamic paint modifier step. */
-DerivedMesh *dynamicPaint_Modifier_do(DynamicPaintModifierData *pmd, Scene *scene, Object *ob, DerivedMesh *dm)
+DerivedMesh *dynamicPaint_Modifier_do(DynamicPaintModifierData *pmd, Scene *scene, SceneLayer *sl, Object *ob, DerivedMesh *dm)
 {
        if (pmd->canvas) {
                DerivedMesh *ret;
@@ -2064,7 +2064,7 @@ DerivedMesh *dynamicPaint_Modifier_do(DynamicPaintModifierData *pmd, Scene *scen
                DM_ensure_looptri(dm);
 
                /* Update canvas data for a new frame */
-               dynamicPaint_frameUpdate(pmd, scene, ob, dm);
+               dynamicPaint_frameUpdate(pmd, scene, sl, ob, dm);
 
                /* Return output mesh */
                ret = dynamicPaint_Modifier_apply(pmd, ob, dm);
@@ -2076,7 +2076,7 @@ DerivedMesh *dynamicPaint_Modifier_do(DynamicPaintModifierData *pmd, Scene *scen
                DM_ensure_looptri(dm);
 
                /* Update canvas data for a new frame */
-               dynamicPaint_frameUpdate(pmd, scene, ob, dm);
+               dynamicPaint_frameUpdate(pmd, scene, sl, ob, dm);
 
                /* Return output mesh */
                return dynamicPaint_Modifier_apply(pmd, ob, dm);
@@ -5638,7 +5638,7 @@ static void dynamic_paint_generate_bake_data_cb(void *userdata, const int index)
        }
 }
 
-static int dynamicPaint_generateBakeData(DynamicPaintSurface *surface, const Scene *scene, Object *ob)
+static int dynamicPaint_generateBakeData(DynamicPaintSurface *surface, const SceneLayer *sl, Object *ob)
 {
        PaintSurfaceData *sData = surface->data;
        PaintBakeData *bData = sData->bData;
@@ -5646,7 +5646,7 @@ static int dynamicPaint_generateBakeData(DynamicPaintSurface *surface, const Sce
        int index;
        bool new_bdata = false;
        const bool do_velocity_data = ((surface->effect & MOD_DPAINT_EFFECT_DO_DRIP) ||
-                                      (surface_getBrushFlags(surface, scene) & BRUSH_USES_VELOCITY));
+                                      (surface_getBrushFlags(surface, sl) & BRUSH_USES_VELOCITY));
        const bool do_accel_data = (surface->effect & MOD_DPAINT_EFFECT_DO_DRIP) != 0;
 
        int canvasNumOfVerts = dm->getNumVerts(dm);
@@ -5758,7 +5758,7 @@ static int dynamicPaint_generateBakeData(DynamicPaintSurface *surface, const Sce
 /*
  * Do Dynamic Paint step. Paints scene brush objects of current state/frame to the surface.
  */
-static int dynamicPaint_doStep(Scene *scene, Object *ob, DynamicPaintSurface *surface, float timescale, float subframe)
+static int dynamicPaint_doStep(Scene *scene, SceneLayer *sl, Object *ob, DynamicPaintSurface *surface, float timescale, float subframe)
 {
        PaintSurfaceData *sData = surface->data;
        PaintBakeData *bData = sData->bData;
@@ -5778,7 +5778,7 @@ static int dynamicPaint_doStep(Scene *scene, Object *ob, DynamicPaintSurface *su
         * Loop through surface's target paint objects and do painting
         */
        {
-               BaseLegacy *base = NULL;
+               Base *base = NULL;
                GroupObject *go = NULL;
                Object *brushObj = NULL;
                ModifierData *md = NULL;
@@ -5791,7 +5791,7 @@ static int dynamicPaint_doStep(Scene *scene, Object *ob, DynamicPaintSurface *su
                if (surface->brush_group)
                        go = surface->brush_group->gobject.first;
                else
-                       base = scene->base.first;
+                       base = FIRSTBASE_NEW;
 
                while (base || go) {
                        brushObj = NULL;
@@ -5928,7 +5928,7 @@ static int dynamicPaint_doStep(Scene *scene, Object *ob, DynamicPaintSurface *su
 /*
  * Calculate a single frame and included subframes for surface
  */
-int dynamicPaint_calculateFrame(DynamicPaintSurface *surface, Scene *scene, Object *cObject, int frame)
+int dynamicPaint_calculateFrame(DynamicPaintSurface *surface, Scene *scene, SceneLayer *sl, Object *cObject, int frame)
 {
        float timescale = 1.0f;
 
@@ -5937,7 +5937,7 @@ int dynamicPaint_calculateFrame(DynamicPaintSurface *surface, Scene *scene, Obje
                dynamicPaint_applySurfaceDisplace(surface, surface->canvas->dm);
 
        /* update bake data */
-       dynamicPaint_generateBakeData(surface, scene, cObject);
+       dynamicPaint_generateBakeData(surface, sl, cObject);
 
        /* don't do substeps for first frame */
        if (surface->substeps && (frame != surface->start_frame)) {
@@ -5946,10 +5946,10 @@ int dynamicPaint_calculateFrame(DynamicPaintSurface *surface, Scene *scene, Obje
 
                for (st = 1; st <= surface->substeps; st++) {
                        float subframe = ((float) st) / (surface->substeps + 1);
-                       if (!dynamicPaint_doStep(scene, cObject, surface, timescale, subframe))
+                       if (!dynamicPaint_doStep(scene, sl, cObject, surface, timescale, subframe))
                                return 0;
                }
        }
 
-       return dynamicPaint_doStep(scene, cObject, surface, timescale, 0.0f);
+       return dynamicPaint_doStep(scene, sl, cObject, surface, timescale, 0.0f);
 }
index c58e304db6cc0a139a333fe401e83a7451e51bac..4b5548c48d47f96ba992228fdac2f22a704a3b40 100644 (file)
@@ -64,6 +64,7 @@
 #include "BKE_cdderivedmesh.h"
 #include "BKE_effect.h"
 #include "BKE_global.h"
+#include "BKE_layer.h"
 #include "BKE_library.h"
 #include "BKE_modifier.h"
 #include "BKE_object.h"
@@ -209,7 +210,8 @@ static void add_particles_to_effectors(ListBase **effectors, Scene *scene, Effec
 ListBase *pdInitEffectors(Scene *scene, Object *ob_src, ParticleSystem *psys_src,
                           EffectorWeights *weights, bool for_simulation)
 {
-       BaseLegacy *base;
+       SceneLayer *sl = BKE_scene_layer_context_active(scene); /* Can't get sl from the calling modifiers yet */
+       Base *base;
        unsigned int layer= ob_src->lay;
        ListBase *effectors = NULL;
        
@@ -231,17 +233,15 @@ ListBase *pdInitEffectors(Scene *scene, Object *ob_src, ParticleSystem *psys_src
                }
        }
        else {
-               for (base = scene->base.first; base; base= base->next) {
-                       if ( (base->lay & layer) ) {
-                               if ( base->object->pd && base->object->pd->forcefield )
-                                       add_object_to_effectors(&effectors, scene, weights, base->object, ob_src, for_simulation);
+               for (base = FIRSTBASE_NEW; base; base = base->next) {
+                       if ( base->object->pd && base->object->pd->forcefield )
+                               add_object_to_effectors(&effectors, scene, weights, base->object, ob_src, for_simulation);
 
-                               if ( base->object->particlesystem.first ) {
-                                       ParticleSystem *psys= base->object->particlesystem.first;
+                       if ( base->object->particlesystem.first ) {
+                               ParticleSystem *psys= base->object->particlesystem.first;
 
-                                       for ( ; psys; psys=psys->next )
-                                               add_particles_to_effectors(&effectors, scene, weights, base->object, psys, psys_src, for_simulation);
-                               }
+                               for ( ; psys; psys=psys->next )
+                                       add_particles_to_effectors(&effectors, scene, weights, base->object, psys, psys_src, for_simulation);
                        }
                }
        }
index 4f9759742ce180b3fec12b7b8e0d131e49048d33..c26ac05649928f730995d3cac7414e9e779551d5 100644 (file)
@@ -78,6 +78,7 @@
 #include "BKE_particle.h"
 #include "BKE_global.h"
 
+#include "BKE_collection.h"
 #include "BKE_DerivedMesh.h"
 #include "BKE_object.h"
 #include "BKE_material.h"
@@ -2895,7 +2896,6 @@ static void psys_update_path_cache(ParticleSimulationData *sim, float cfra, cons
        ParticleSystem *psys = sim->psys;
        ParticleSettings *part = psys->part;
        ParticleEditSettings *pset = &sim->scene->toolsettings->particle;
-       BaseLegacy *base;
        int distr=0, alloc=0, skip=0;
 
        if ((psys->part->childtype && psys->totchild != psys_get_tot_child(sim->scene, psys)) || psys->recalc&PSYS_RECALC_RESET)
@@ -2940,8 +2940,9 @@ static void psys_update_path_cache(ParticleSimulationData *sim, float cfra, cons
 
 
        /* particle instance modifier with "path" option need cached paths even if particle system doesn't */
-       for (base = sim->scene->base.first; base; base= base->next) {
-               ModifierData *md = modifiers_findByType(base->object, eModifierType_ParticleInstance);
+       FOREACH_SCENE_OBJECT(sim->scene, ob)
+       {
+               ModifierData *md = modifiers_findByType(ob, eModifierType_ParticleInstance);
                if (md) {
                        ParticleInstanceModifierData *pimd = (ParticleInstanceModifierData *)md;
                        if (pimd->flag & eParticleInstanceFlag_Path && pimd->ob == sim->ob && pimd->psys == (psys - (ParticleSystem*)sim->ob->particlesystem.first)) {
@@ -2950,6 +2951,7 @@ static void psys_update_path_cache(ParticleSimulationData *sim, float cfra, cons
                        }
                }
        }
+       FOREACH_SCENE_OBJECT_END
 
        if (!skip) {
                psys_cache_paths(sim, cfra, use_render_params);
index f1ce69d3945c9773371e3728cde6f66a263ab771..2c572fe75b8a9bba6a0bed77037c259410e238a8 100644 (file)
@@ -693,16 +693,16 @@ void smokeModifier_copy(struct SmokeModifierData *smd, struct SmokeModifierData
 #ifdef WITH_SMOKE
 
 // forward decleration
-static void smoke_calc_transparency(SmokeDomainSettings *sds, Scene *scene);
+static void smoke_calc_transparency(SmokeDomainSettings *sds, SceneLayer *sl);
 static float calc_voxel_transp(float *result, float *input, int res[3], int *pixel, float *tRay, float correct);
 
-static int get_lamp(Scene *scene, float *light)
+static int get_lamp(SceneLayer *sl, float *light)
 {
-       BaseLegacy *base_tmp = NULL;
+       Base *base_tmp = NULL;
        int found_lamp = 0;
 
        // try to find a lamp, preferably local
-       for (base_tmp = scene->base.first; base_tmp; base_tmp = base_tmp->next) {
+       for (base_tmp = FIRSTBASE_NEW; base_tmp; base_tmp = base_tmp->next) {
                if (base_tmp->object->type == OB_LAMP) {
                        Lamp *la = base_tmp->object->data;
 
@@ -2683,7 +2683,7 @@ static DerivedMesh *createDomainGeometry(SmokeDomainSettings *sds, Object *ob)
        return result;
 }
 
-static void smokeModifier_process(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedMesh *dm)
+static void smokeModifier_process(SmokeModifierData *smd, Scene *scene, SceneLayer *sl, Object *ob, DerivedMesh *dm)
 {
        if ((smd->type & MOD_SMOKE_TYPE_FLOW))
        {
@@ -2810,7 +2810,7 @@ static void smokeModifier_process(SmokeModifierData *smd, Scene *scene, Object *
                }
 
                // create shadows before writing cache so they get stored
-               smoke_calc_transparency(sds, scene);
+               smoke_calc_transparency(sds, sl);
 
                if (sds->wt && sds->total_cells > 1) {
                        smoke_turbulence_step(sds->wt, sds->fluid);
@@ -2827,13 +2827,13 @@ static void smokeModifier_process(SmokeModifierData *smd, Scene *scene, Object *
        }
 }
 
-struct DerivedMesh *smokeModifier_do(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedMesh *dm)
+struct DerivedMesh *smokeModifier_do(SmokeModifierData *smd, Scene *scene, SceneLayer *sl, Object *ob, DerivedMesh *dm)
 {
        /* lock so preview render does not read smoke data while it gets modified */
        if ((smd->type & MOD_SMOKE_TYPE_DOMAIN) && smd->domain)
                BLI_rw_mutex_lock(smd->domain->fluid_mutex, THREAD_LOCK_WRITE);
 
-       smokeModifier_process(smd, scene, ob, dm);
+       smokeModifier_process(smd, scene, sl, ob, dm);
 
        if ((smd->type & MOD_SMOKE_TYPE_DOMAIN) && smd->domain)
                BLI_rw_mutex_unlock(smd->domain->fluid_mutex);
@@ -2948,7 +2948,7 @@ static void bresenham_linie_3D(int x1, int y1, int z1, int x2, int y2, int z2, f
        cb(result, input, res, pixel, tRay, correct);
 }
 
-static void smoke_calc_transparency(SmokeDomainSettings *sds, Scene *scene)
+static void smoke_calc_transparency(SmokeDomainSettings *sds, SceneLayer *sl)
 {
        float bv[6] = {0};
        float light[3];
@@ -2956,7 +2956,7 @@ static void smoke_calc_transparency(SmokeDomainSettings *sds, Scene *scene)
        float *density = smoke_get_density(sds->fluid);
        float correct = -7.0f * sds->dx;
 
-       if (!get_lamp(scene, light)) return;
+       if (!get_lamp(sl, light)) return;
 
        /* convert light pos to sim cell space */
        mul_m4_v3(sds->imat, light);
index e7df1d810c99aa719007531872959edc0bfcae85..421a0e300360d8ad9a44b61b875f31e5935c3e61 100644 (file)
@@ -512,7 +512,7 @@ static void ccd_build_deflector_hash_single(GHash *hash, Object *ob)
 /**
  * \note group overrides scene when not NULL.
  */
-static void ccd_build_deflector_hash(Scene *scene, Group *group, Object *vertexowner, GHash *hash)
+static void ccd_build_deflector_hash(SceneLayer *sl, Group *group, Object *vertexowner, GHash *hash)
 {
        Object *ob;
 
@@ -530,10 +530,10 @@ static void ccd_build_deflector_hash(Scene *scene, Group *group, Object *vertexo
                }
        }
        else {
-               for (BaseLegacy *base = scene->base.first; base; base = base->next) {
+               for (Base *base = FIRSTBASE_NEW; base; base = base->next) {
                        /*Only proceed for mesh object in same layer */
-                       if (base->object->type == OB_MESH && (base->lay & vertexowner->lay)) {
-                               ob= base->object;
+                       if (base->object->type == OB_MESH) {
+                               ob = base->object;
                                if ((vertexowner) && (ob == vertexowner)) {
                                        /* if vertexowner is given  we don't want to check collision with owner object */
                                        continue;
@@ -558,7 +558,7 @@ static void ccd_update_deflector_hash_single(GHash *hash, Object *ob)
 /**
  * \note group overrides scene when not NULL.
  */
-static void ccd_update_deflector_hash(Scene *scene, Group *group, Object *vertexowner, GHash *hash)
+static void ccd_update_deflector_hash(SceneLayer *sl, Group *group, Object *vertexowner, GHash *hash)
 {
        Object *ob;
 
@@ -576,10 +576,10 @@ static void ccd_update_deflector_hash(Scene *scene, Group *group, Object *vertex
                }
        }
        else {
-               for (BaseLegacy *base = scene->base.first; base; base = base->next) {
+               for (Base *base = FIRSTBASE_NEW; base; base = base->next) {
                        /*Only proceed for mesh object in same layer */
-                       if (base->object->type == OB_MESH && (base->lay & vertexowner->lay)) {
-                               ob= base->object;
+                       if (base->object->type == OB_MESH) {
+                               ob = base->object;
                                if (ob == vertexowner) {
                                        /* if vertexowner is given  we don't want to check collision with owner object */
                                        continue;
@@ -977,7 +977,7 @@ static void free_softbody_intern(SoftBody *sb)
 /**
  * \note group overrides scene when not NULL.
  */
-static bool are_there_deflectors(Scene *scene, Group *group, unsigned int layer)
+static bool are_there_deflectors(SceneLayer *sl, Group *group)
 {
        if (group) {
                for (GroupObject *go = group->gobject.first; go; go = go->next) {
@@ -986,8 +986,8 @@ static bool are_there_deflectors(Scene *scene, Group *group, unsigned int layer)
                }
        }
        else {
-               for (BaseLegacy *base = scene->base.first; base; base= base->next) {
-                       if ( (base->lay & layer) && base->object->pd) {
+               for (Base *base = FIRSTBASE_NEW; base; base = base->next) {
+                       if (base->object->pd) {
                                if (base->object->pd->deflect)
                                        return 1;
                        }
@@ -997,9 +997,9 @@ static bool are_there_deflectors(Scene *scene, Group *group, unsigned int layer)
        return 0;
 }
 
-static int query_external_colliders(Scene *scene, Group *group, Object *me)
+static int query_external_colliders(SceneLayer *sl, Group *group)
 {
-       return(are_there_deflectors(scene, group, me->lay));
+       return(are_there_deflectors(sl, group));
 }
 /* --- dependency information functions*/
 
@@ -2231,7 +2231,7 @@ static void sb_cf_threads_run(Scene *scene, Object *ob, float forcetime, float t
        MEM_freeN(sb_threads);
 }
 
-static void softbody_calc_forcesEx(Scene *scene, Object *ob, float forcetime, float timenow)
+static void softbody_calc_forcesEx(Scene *scene, SceneLayer *sl, Object *ob, float forcetime, float timenow)
 {
 /* rule we never alter free variables :bp->vec bp->pos in here !
  * this will ruin adaptive stepsize AKA heun! (BM)
@@ -2247,7 +2247,7 @@ static void softbody_calc_forcesEx(Scene *scene, Object *ob, float forcetime, fl
        /* gravity = sb->grav * sb_grav_force_scale(ob); */ /* UNUSED */
 
        /* check conditions for various options */
-       do_deflector= query_external_colliders(scene, sb->collision_group, ob);
+       do_deflector= query_external_colliders(sl, sb->collision_group);
        /* do_selfcollision=((ob->softflag & OB_SB_EDGES) && (sb->bspring)&& (ob->softflag & OB_SB_SELF)); */ /* UNUSED */
        do_springcollision=do_deflector && (ob->softflag & OB_SB_EDGES) &&(ob->softflag & OB_SB_EDGECOLL);
        do_aero=((sb->aeroedge)&& (ob->softflag & OB_SB_EDGES));
@@ -2276,11 +2276,11 @@ static void softbody_calc_forcesEx(Scene *scene, Object *ob, float forcetime, fl
 }
 
 
-static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, float timenow)
+static void softbody_calc_forces(Scene *scene, SceneLayer *sl, Object *ob, float forcetime, float timenow)
 {
        /* redirection to the new threaded Version */
        if (!(G.debug_value & 0x10)) { // 16
-               softbody_calc_forcesEx(scene, ob, forcetime, timenow);
+               softbody_calc_forcesEx(scene, sl, ob, forcetime, timenow);
                return;
        }
        else {
@@ -2311,7 +2311,7 @@ static void softbody_calc_forces(Scene *scene, Object *ob, float forcetime, floa
                }
 
                /* check conditions for various options */
-               do_deflector= query_external_colliders(scene, sb->collision_group, ob);
+               do_deflector= query_external_colliders(sl, sb->collision_group);
                do_selfcollision=((ob->softflag & OB_SB_EDGES) && (sb->bspring)&& (ob->softflag & OB_SB_SELF));
                do_springcollision=do_deflector && (ob->softflag & OB_SB_EDGES) &&(ob->softflag & OB_SB_EDGECOLL);
                do_aero=((sb->aeroedge)&& (ob->softflag & OB_SB_EDGES));
@@ -3508,7 +3508,7 @@ static void softbody_reset(Object *ob, SoftBody *sb, float (*vertexCos)[3], int
        }
 }
 
-static void softbody_step(Scene *scene, Object *ob, SoftBody *sb, float dtime)
+static void softbody_step(Scene *scene, SceneLayer *sl, Object *ob, SoftBody *sb, float dtime)
 {
        /* the simulator */
        float forcetime;
@@ -3522,11 +3522,11 @@ static void softbody_step(Scene *scene, Object *ob, SoftBody *sb, float dtime)
         */
        if (dtime < 0 || dtime > 10.5f) return;
 
-       ccd_update_deflector_hash(scene, sb->collision_group, ob, sb->scratch->colliderhash);
+       ccd_update_deflector_hash(sl, sb->collision_group, ob, sb->scratch->colliderhash);
 
        if (sb->scratch->needstobuildcollider) {
-               if (query_external_colliders(scene, sb->collision_group, ob)) {
-                       ccd_build_deflector_hash(scene, sb->collision_group, ob, sb->scratch->colliderhash);
+               if (query_external_colliders(sl, sb->collision_group)) {
+                       ccd_build_deflector_hash(sl, sb->collision_group, ob, sb->scratch->colliderhash);
                }
                sb->scratch->needstobuildcollider=0;
        }
@@ -3556,12 +3556,12 @@ static void softbody_step(Scene *scene, Object *ob, SoftBody *sb, float dtime)
 
                        sb->scratch->flag &= ~SBF_DOFUZZY;
                        /* do predictive euler step */
-                       softbody_calc_forces(scene, ob, forcetime, timedone/dtime);
+                       softbody_calc_forces(scene, sl, ob, forcetime, timedone/dtime);
 
                        softbody_apply_forces(ob, forcetime, 1, NULL, mid_flags);
 
                        /* crop new slope values to do averaged slope step */
-                       softbody_calc_forces(scene, ob, forcetime, timedone/dtime);
+                       softbody_calc_forces(scene, sl, ob, forcetime, timedone/dtime);
 
                        softbody_apply_forces(ob, forcetime, 2, &err, mid_flags);
                        softbody_apply_goalsnap(ob);
@@ -3642,7 +3642,7 @@ static void softbody_step(Scene *scene, Object *ob, SoftBody *sb, float dtime)
 }
 
 /* simulates one step. framenr is in frames */
-void sbObjectStep(Scene *scene, Object *ob, float cfra, float (*vertexCos)[3], int numVerts)
+void sbObjectStep(Scene *scene, SceneLayer *sl, Object *ob, float cfra, float (*vertexCos)[3], int numVerts)
 {
        SoftBody *sb= ob->soft;
        PointCache *cache;
@@ -3757,7 +3757,7 @@ void sbObjectStep(Scene *scene, Object *ob, float cfra, float (*vertexCos)[3], i
        dtime = framedelta*timescale;
 
        /* do simulation */
-       softbody_step(scene, ob, sb, dtime);
+       softbody_step(scene, sl, ob, sb, dtime);
 
        softbody_to_object(ob, vertexCos, numVerts, 0);
 
index e78752a557c68fba54f8d6f611ff67c5e1e76afa..9273ae119067804ba11df017a35fee9143430425 100644 (file)
@@ -43,6 +43,7 @@
 
 #include "BKE_context.h"
 #include "BKE_fcurve.h"
+#include "BKE_layer.h"
 #include "BKE_main.h"
 #include "BKE_report.h"
 #include "BKE_scene.h"
@@ -1135,7 +1136,8 @@ static int ed_marker_select(bContext *C, const wmEvent *event, bool extend, bool
 
        if (camera) {
                Scene *scene = CTX_data_scene(C);
-               BaseLegacy *base;
+               SceneLayer *sl = CTX_data_scene_layer(C);
+               Base *base;
                TimeMarker *marker;
                int sel = 0;
                
@@ -1152,11 +1154,11 @@ static int ed_marker_select(bContext *C, const wmEvent *event, bool extend, bool
                for (marker = markers->first; marker; marker = marker->next) {
                        if (marker->camera) {
                                if (marker->frame == cfra) {
-                                       base = BKE_scene_base_find(scene, marker->camera);
+                                       base = BKE_scene_layer_base_find(sl, marker->camera);
                                        if (base) {
-                                               ED_base_object_select(base, sel);
+                                               ED_object_base_select(base, sel);
                                                if (sel)
-                                                       ED_base_object_activate(C, base);
+                                                       ED_object_base_activate(C, base);
                                        }
                                }
                        }
index 7ae2f78e91d2872408957a4a681491a5df64c3ba..065d1b4926c21acf5e5b54e4f8fb9c9f852ba291 100644 (file)
@@ -2120,20 +2120,21 @@ static void tag_localizable_objects(bContext *C, const int mode)
  * Instance indirectly referenced zero user objects,
  * otherwise they're lost on reload, see T40595.
  */
-static bool make_local_all__instance_indirect_unused(Main *bmain, Scene *scene)
+static bool make_local_all__instance_indirect_unused(Main *bmain, Scene *scene, SceneLayer *sl, SceneCollection *sc)
 {
        Object *ob;
        bool changed = false;
 
        for (ob = bmain->object.first; ob; ob = ob->id.next) {
                if (ID_IS_LINKED_DATABLOCK(ob) && (ob->id.us == 0)) {
-                       BaseLegacy *base;
+                       Base *base;
 
                        id_us_plus(&ob->id);
 
-                       base = BKE_scene_base_add(scene, ob);
-                       base->flag_legacy |= SELECT;
-                       BKE_scene_base_flag_sync_from_base(base);
+                       BKE_collection_object_add(scene, sc, ob);
+                       base = BKE_scene_layer_base_find(sl, ob);
+                       base->flag |= BASE_SELECTED;
+                       BKE_scene_object_base_flag_sync_from_base(base);
                        DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
 
                        changed = true;
@@ -2147,6 +2148,8 @@ static int make_local_exec(bContext *C, wmOperator *op)
 {
        Main *bmain = CTX_data_main(C);
        Scene *scene = CTX_data_scene(C);
+       SceneLayer *sl = CTX_data_scene_layer(C);
+       SceneCollection *sc = CTX_data_scene_collection(C);
        AnimData *adt;
        ParticleSystem *psys;
        Material *ma, ***matarar;
@@ -2159,7 +2162,7 @@ static int make_local_exec(bContext *C, wmOperator *op)
                /* de-select so the user can differentiate newly instanced from existing objects */
                BKE_scene_base_deselect_all(scene);
 
-               if (make_local_all__instance_indirect_unused(bmain, scene)) {
+               if (make_local_all__instance_indirect_unused(bmain, scene, sl, sc)) {
                        BKE_report(op->reports, RPT_INFO,
                                   "Orphan library objects added to the current scene to avoid loss");
                }
index 37becfca7db6633cbb2b6a45fa397f4436f63a34..4bdd524f11061e798c8cbfe3dd227232bdf07cdd 100644 (file)
@@ -630,7 +630,7 @@ static bool select_grouped_group(bContext *C, Object *ob)  /* Select objects in
 
 static bool select_grouped_object_hooks(bContext *C, Object *ob)
 {
-       Scene *scene = CTX_data_scene(C);
+       SceneLayer *sl = CTX_data_scene_layer(C);
 
        bool changed = false;
        Base *base;
@@ -641,7 +641,7 @@ static bool select_grouped_object_hooks(bContext *C, Object *ob)
                if (md->type == eModifierType_Hook) {
                        hmd = (HookModifierData *) md;
                        if (hmd->object && !(hmd->object->flag & SELECT)) {
-                               base = BKE_scene_base_find(scene, hmd->object);
+                               base = BKE_scene_layer_base_find(sl, hmd->object);
                                if (base && (BASE_SELECTABLE_NEW(base))) {
                                        ED_base_object_select(base, BA_SELECT);
                                        changed = true;
index 3d7a45843cc79b67038d7899aad5861523f74bf3..af2dc31e34f5edcf5e0e1fe77bac03fd7275e6b5 100644 (file)
@@ -286,6 +286,7 @@ typedef struct DynamicPaintBakeJob {
 
        struct Main *bmain;
        Scene *scene;
+       SceneLayer *scene_layer;
        Object *ob;
 
        DynamicPaintSurface *surface;
@@ -384,7 +385,7 @@ static void dynamicPaint_bakeImageSequence(DynamicPaintBakeJob *job)
                /* calculate a frame */
                scene->r.cfra = (int)frame;
                ED_update_for_newframe(job->bmain, scene, 1);
-               if (!dynamicPaint_calculateFrame(surface, scene, cObject, frame)) {
+               if (!dynamicPaint_calculateFrame(surface, scene, job->scene_layer, cObject, frame)) {
                        job->success = 0;
                        return;
                }
@@ -452,6 +453,7 @@ static int dynamicpaint_bake_exec(struct bContext *C, struct wmOperator *op)
        DynamicPaintCanvasSettings *canvas;
        Object *ob = ED_object_context(C);
        Scene *scene = CTX_data_scene(C);
+       SceneLayer *sl = CTX_data_scene_layer(C);
 
        DynamicPaintSurface *surface;
 
@@ -479,6 +481,7 @@ static int dynamicpaint_bake_exec(struct bContext *C, struct wmOperator *op)
        DynamicPaintBakeJob *job = MEM_mallocN(sizeof(DynamicPaintBakeJob), "DynamicPaintBakeJob");
        job->bmain = CTX_data_main(C);
        job->scene = scene;
+       job->scene_layer = sl;
        job->ob = ob;
        job->canvas = canvas;
        job->surface = surface;
index fa613056df77c9a239993cd7c0920557a07169e7..6e62dbabbca89740c5623212a0a73d4c1939d95d 100644 (file)
@@ -329,7 +329,8 @@ static void free_all_fluidobject_channels(ListBase *fobjects)
 static void fluid_init_all_channels(bContext *C, Object *UNUSED(fsDomain), FluidsimSettings *domainSettings, FluidAnimChannels *channels, ListBase *fobjects)
 {
        Scene *scene = CTX_data_scene(C);
-       BaseLegacy *base;
+       SceneLayer *sl = CTX_data_scene_layer(C);
+       Base *base;
        int i;
        int length = channels->length;
        float eval_time;
@@ -343,7 +344,7 @@ static void fluid_init_all_channels(bContext *C, Object *UNUSED(fsDomain), Fluid
        channels->DomainTime = MEM_callocN(length * (CHANNEL_FLOAT+1) * sizeof(float), "channel DomainTime");
        
        /* allocate fluid objects */
-       for (base=scene->base.first; base; base= base->next) {
+       for (base = FIRSTBASE_NEW; base; base = base->next) {
                Object *ob = base->object;
                FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifiers_findByType(ob, eModifierType_Fluidsim);
                
@@ -570,14 +571,14 @@ static void export_fluid_objects(ListBase *fobjects, Scene *scene, int length)
        }
 }
 
-static int fluid_validate_scene(ReportList *reports, Scene *scene, Object *fsDomain)
+static int fluid_validate_scene(ReportList *reports, SceneLayer *sl, Object *fsDomain)
 {
-       BaseLegacy *base;
+       Base *base;
        Object *newdomain = NULL;
        int channelObjCount = 0;
        int fluidInputCount = 0;
 
-       for (base=scene->base.first; base; base= base->next) {
+       for (base = FIRSTBASE_NEW; base; base = base->next) {
                Object *ob = base->object;
                FluidsimModifierData *fluidmdtmp = (FluidsimModifierData *)modifiers_findByType(ob, eModifierType_Fluidsim);
 
@@ -835,7 +836,8 @@ static void fluidsim_delete_until_lastframe(FluidsimSettings *fss, const char *r
 
 static int fluidsimBake(bContext *C, ReportList *reports, Object *fsDomain, short do_job)
 {
-       Scene *scene= CTX_data_scene(C);
+       Scene *scene = CTX_data_scene(C);
+       SceneLayer *sl = CTX_data_scene_layer(C);
        int i;
        FluidsimSettings *domainSettings;
 
@@ -882,7 +884,7 @@ static int fluidsimBake(bContext *C, ReportList *reports, Object *fsDomain, shor
        }
        
        /* check scene for sane object/modifier settings */
-       if (!fluid_validate_scene(reports, scene, fsDomain)) {
+       if (!fluid_validate_scene(reports, sl, fsDomain)) {
                fluidbake_free_data(channels, fobjects, fsset, fb);
                return 0;
        }
index 34879c09583337b6f5fe552f24dbfddef7b5ceaf..7afd4e28602f2190c5208d8236711ef0ab9c936f 100644 (file)
@@ -513,22 +513,25 @@ static void singleuser_world_cb(
 }
 
 static void group_linkobs2scene_cb(
-        bContext *UNUSED(C), ReportList *UNUSED(reports), Scene *scene, TreeElement *UNUSED(te),
+        bContext *C, ReportList *UNUSED(reports), Scene *scene, TreeElement *UNUSED(te),
         TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem, void *UNUSED(user_data))
 {
+       SceneLayer *sl = CTX_data_scene_layer(C);
+       SceneCollection *sc = CTX_data_scene_collection(C);
        Group *group = (Group *)tselem->id;
        GroupObject *gob;
-       BaseLegacy *base;
+       Base *base;
 
        for (gob = group->gobject.first; gob; gob = gob->next) {
-               base = BKE_scene_base_find(scene, gob->ob);
+               base = BKE_scene_layer_base_find(sl, gob->ob);
                if (!base) {
                        /* link to scene */
-                       base = BKE_scene_base_add(scene, gob->ob);
+                       BKE_collection_object_add(scene, sc, gob->ob);
+                       base = BKE_scene_layer_base_find(sl, gob->ob);
                        id_us_plus(&gob->ob->id);
                }
-               base->object->flag |= SELECT;
-               base->flag_legacy |= SELECT;
+
+               base->flag |= BASE_SELECTED;
        }
 }
 
index f1deae7e0fdb1c8c836eeb6c2f404416f04736c2..1162a7ac36d605c3e6a76ceba26a67463294726b 100644 (file)
@@ -403,7 +403,7 @@ static bool set_draw_settings_cached(
        return c_badtex;
 }
 
-static void draw_textured_begin(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob)
+static void draw_textured_begin(Scene *scene, SceneLayer *sl, View3D *v3d, RegionView3D *rv3d, Object *ob)
 {
        unsigned char obcol[4];
        bool is_tex, solidtex;
@@ -439,9 +439,7 @@ static void draw_textured_begin(Scene *scene, View3D *v3d, RegionView3D *rv3d, O
                        Gtexdraw.is_lit = 0;
                }
                else {
-                       Gtexdraw.is_lit = GPU_scene_object_lights(
-                                             scene, ob, v3d->localvd ? v3d->localvd->lay : v3d->lay,
-                                             rv3d->viewmat, !rv3d->is_persp);
+                       Gtexdraw.is_lit = GPU_scene_object_lights(sl, rv3d->viewmat, !rv3d->is_persp);
                }
        }
 
@@ -957,7 +955,7 @@ static void draw_mesh_textured_old(Scene *scene, SceneLayer *sl, View3D *v3d, Re
        else glFrontFace(GL_CCW);
        
        /* draw the textured mesh */
-       draw_textured_begin(scene, v3d, rv3d, ob);
+       draw_textured_begin(scene, sl, v3d, rv3d, ob);
 
        glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
 
index 3704f909336cf234b403e665fbaeaffe72d0d5aa..127c2525de82c42b0fdf40fc69fe368bb06d15db 100644 (file)
@@ -107,8 +107,7 @@ void GPU_clear_tpage(bool force);
 
 int GPU_default_lights(void);
 int GPU_scene_object_lights(
-        struct Scene *scene, struct Object *ob,
-        int lay, float viewmat[4][4], int ortho);
+        struct SceneLayer *sl, float viewmat[4][4], int ortho);
 
 /* Text render
  * - based on moving uv coordinates */
index 01759338744f498a74a3ac3d9b6dc3b0255c1563..55b3f17096228b8ab529ef1eec65d0f268d4dd98 100644 (file)
@@ -2179,7 +2179,7 @@ int GPU_default_lights(void)
        return count;
 }
 
-int GPU_scene_object_lights(Scene *scene, Object *ob, int lay, float viewmat[4][4], int ortho)
+int GPU_scene_object_lights(SceneLayer *sl, float viewmat[4][4], int ortho)
 {
        /* disable all lights */
        for (int count = 0; count < 8; count++)
@@ -2191,13 +2191,10 @@ int GPU_scene_object_lights(Scene *scene, Object *ob, int lay, float viewmat[4][
 
        int count = 0;
 
-       for (BaseLegacy *base = scene->base.first; base; base = base->next) {
+       for (Base *base = FIRSTBASE_NEW; base; base = base->next) {
                if (base->object->type != OB_LAMP)
                        continue;
 
-               if (!(base->lay & lay) || !(base->lay & ob->lay))
-                       continue;
-
                Lamp *la = base->object->data;
 
                /* setup lamp transform */
index 50382c125401b0dc70297022c0fbd251c9a9f5ac..d0ca21aabf227cedb74dbfd1ab72e708c71ccc19 100644 (file)
@@ -36,6 +36,7 @@
 
 #include "BKE_cdderivedmesh.h"
 #include "BKE_dynamicpaint.h"
+#include "BKE_layer.h"
 #include "BKE_library_query.h"
 #include "BKE_modifier.h"
 
@@ -108,7 +109,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
 
        /* dont apply dynamic paint on orco dm stack */
        if (!(flag & MOD_APPLY_ORCO)) {
-               return dynamicPaint_Modifier_do(pmd, md->scene, ob, dm);
+               return dynamicPaint_Modifier_do(pmd, md->scene, BKE_scene_layer_context_active(md->scene), ob, dm);
        }
        return dm;
 }
index 28969c414a682d4f639987aa2590ababb3871aad..a11b0f887ea75e2984b36a42ba04ec5f5b9dbfda 100644 (file)
@@ -47,6 +47,7 @@
 
 
 #include "BKE_cdderivedmesh.h"
+#include "BKE_layer.h"
 #include "BKE_library.h"
 #include "BKE_library_query.h"
 #include "BKE_main.h"
@@ -108,7 +109,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
        if (flag & MOD_APPLY_ORCO)
                return dm;
 
-       return smokeModifier_do(smd, md->scene, ob, dm);
+       return smokeModifier_do(smd, md->scene, BKE_scene_layer_context_active(md->scene), ob, dm);
 }
 
 static bool dependsOnTime(ModifierData *UNUSED(md))
index 9f6c54b11bb42931cb8d29954a7226357ec2bb81..5468b8a61f0a356d336500fd1586c2a2ee27329c 100644 (file)
@@ -40,6 +40,7 @@
 #include "BLI_utildefines.h"
 
 #include "BKE_cdderivedmesh.h"
+#include "BKE_layer.h"
 #include "BKE_particle.h"
 #include "BKE_softbody.h"
 
@@ -53,7 +54,7 @@ static void deformVerts(ModifierData *md, Object *ob,
                         int numVerts,
                         ModifierApplyFlag UNUSED(flag))
 {
-       sbObjectStep(md->scene, ob, (float)md->scene->r.cfra, vertexCos, numVerts);
+       sbObjectStep(md->scene, BKE_scene_layer_context_active(md->scene), ob, (float)md->scene->r.cfra, vertexCos, numVerts);
 }
 
 static bool dependsOnTime(ModifierData *UNUSED(md))