2.5: code changes to reduce the usage of G.main and pass it along
authorBrecht Van Lommel <brechtvanlommel@pandora.be>
Sun, 1 Aug 2010 12:47:49 +0000 (12:47 +0000)
committerBrecht Van Lommel <brechtvanlommel@pandora.be>
Sun, 1 Aug 2010 12:47:49 +0000 (12:47 +0000)
or get it from the context instead.

76 files changed:
source/blender/blenkernel/BKE_depsgraph.h
source/blender/blenkernel/BKE_material.h
source/blender/blenkernel/BKE_pointcache.h
source/blender/blenkernel/BKE_scene.h
source/blender/blenkernel/intern/anim.c
source/blender/blenkernel/intern/blender.c
source/blender/blenkernel/intern/depsgraph.c
source/blender/blenkernel/intern/material.c
source/blender/blenkernel/intern/particle.c
source/blender/blenkernel/intern/pointcache.c
source/blender/blenkernel/intern/scene.c
source/blender/blenkernel/intern/sequencer.c
source/blender/blenloader/intern/readfile.c
source/blender/editors/animation/drivers.c
source/blender/editors/animation/keyframing.c
source/blender/editors/animation/keyingsets.c
source/blender/editors/armature/editarmature.c
source/blender/editors/curve/editcurve.c
source/blender/editors/include/ED_object.h
source/blender/editors/interface/interface_templates.c
source/blender/editors/interface/resources.c
source/blender/editors/mesh/editmesh.c
source/blender/editors/mesh/meshtools.c
source/blender/editors/object/object_add.c
source/blender/editors/object/object_constraint.c
source/blender/editors/object/object_edit.c
source/blender/editors/object/object_group.c
source/blender/editors/object/object_hook.c
source/blender/editors/object/object_modifier.c
source/blender/editors/object/object_relations.c
source/blender/editors/object/object_transform.c
source/blender/editors/physics/particle_boids.c
source/blender/editors/physics/particle_object.c
source/blender/editors/render/render_internal.c
source/blender/editors/render/render_opengl.c
source/blender/editors/render/render_preview.c
source/blender/editors/screen/screen_edit.c
source/blender/editors/screen/screen_ops.c
source/blender/editors/space_graph/graph_buttons.c
source/blender/editors/space_logic/logic_window.c
source/blender/editors/space_node/drawnode.c
source/blender/editors/space_node/node_edit.c
source/blender/editors/space_outliner/outliner.c
source/blender/editors/space_text/text_ops.c
source/blender/editors/space_view3d/view3d_buttons.c
source/blender/editors/space_view3d/view3d_header.c
source/blender/editors/space_view3d/view3d_snap.c
source/blender/editors/space_view3d/view3d_view.c
source/blender/editors/transform/transform_conversions.c
source/blender/editors/util/ed_util.c
source/blender/makesrna/intern/rna_boid.c
source/blender/makesrna/intern/rna_constraint.c
source/blender/makesrna/intern/rna_curve.c
source/blender/makesrna/intern/rna_fcurve.c
source/blender/makesrna/intern/rna_modifier.c
source/blender/makesrna/intern/rna_object.c
source/blender/makesrna/intern/rna_object_force.c
source/blender/makesrna/intern/rna_particle.c
source/blender/makesrna/intern/rna_pose.c
source/blender/makesrna/intern/rna_scene.c
source/blender/makesrna/intern/rna_scene_api.c
source/blender/makesrna/intern/rna_smoke.c
source/blender/render/extern/include/RE_pipeline.h
source/blender/render/intern/include/render_types.h
source/blender/render/intern/include/texture.h
source/blender/render/intern/source/convertblender.c
source/blender/render/intern/source/envmap.c
source/blender/render/intern/source/pipeline.c
source/blender/render/intern/source/pointdensity.c
source/blender/render/intern/source/sss.c
source/blender/render/intern/source/texture.c
source/blender/render/intern/source/voxeldata.c
source/blender/windowmanager/intern/wm_event_system.c
source/blender/windowmanager/intern/wm_files.c
source/blender/windowmanager/intern/wm_operators.c
source/creator/creator.c

index 6a44051..0b78a12 100644 (file)
@@ -70,7 +70,7 @@ int           queue_count(struct DagNodeQueue *queue);
 void   queue_delete(struct DagNodeQueue *queue);
 
 // queries
-struct DagForest       *build_dag(struct Scene *sce, short mask);
+struct DagForest       *build_dag(struct Main *bmain, struct Scene *sce, short mask);
 void                           free_forest(struct DagForest *Dag);
 
 // note :
@@ -97,14 +97,14 @@ void        draw_all_deps(void);
 /* Note that the DAG never executes changes in Objects, only sets flags in Objects */
 
                /* (re)-create dependency graph for scene */
-void   DAG_scene_sort(struct Scene *sce);
+void   DAG_scene_sort(struct Main *bmain, struct Scene *sce);
 
                /* flag all objects that need recalc because they're animated */
-void   DAG_scene_update_flags(struct Scene *sce, unsigned int lay);
+void   DAG_scene_update_flags(struct Main *bmain, struct Scene *sce, unsigned int lay);
                /* flushes all recalc flags in objects down the dependency tree */
-void   DAG_scene_flush_update(struct Scene *sce, unsigned int lay, int time);
+void   DAG_scene_flush_update(struct Main *bmain, struct Scene *sce, unsigned int lay, int time);
                /* tag objects for update on file load */
-void   DAG_on_load_update(void);
+void   DAG_on_load_update(struct Main *bmain);
 
                /* flag all IDs that need recalc because they're animated, influencing
                   this ID only. only for objects currently */
@@ -113,7 +113,7 @@ void        DAG_id_update_flags(struct ID *id);
                   but note the DAG only supports objects and object data currently */
 void   DAG_id_flush_update(struct ID *id, short flag);
                /* when setting manual RECALC flags, call this afterwards */
-void   DAG_ids_flush_update(int time);
+void   DAG_ids_flush_update(struct Main *bmain, int time);
 
                /* (re)-create dependency graph for armature pose */
 void   DAG_pose_sort(struct Object *ob);
index 07ca5a1..a220153 100644 (file)
@@ -35,6 +35,7 @@
 extern "C" {
 #endif
 
+struct Main;
 struct Material;
 struct ID;
 struct Object;
@@ -69,9 +70,9 @@ int object_remove_material_slot(struct Object *ob);
 /* rendering */
 
 void init_render_material(struct Material *, int, float *);
-void init_render_materials(int, float *);
+void init_render_materials(struct Main *, int, float *);
 void end_render_material(struct Material *);
-void end_render_materials(void);
+void end_render_materials(struct Main *);
 
 int material_in_material(struct Material *parmat, struct Material *mat);
 
index 03a86b6..63f36a5 100644 (file)
 #define PTCACHE_READ_OLD                               3
 
 /* Structs */
+struct ClothModifierData;
+struct ListBase;
+struct Main;
 struct Object;
-struct Scene;
-struct SoftBody;
-struct ParticleSystem;
 struct ParticleKey;
-struct ClothModifierData;
-struct SmokeModifierData;
+struct ParticleSystem;
 struct PointCache;
-struct ListBase;
+struct Scene;
+struct SmokeModifierData;
+struct SoftBody;
 
 /* temp structure for read/write */
 typedef struct PTCacheData {
@@ -143,6 +144,7 @@ typedef struct PTCacheID {
 } PTCacheID;
 
 typedef struct PTCacheBaker {
+       struct Main *main;
        struct Scene *scene;
        int bake;
        int render;
@@ -286,7 +288,7 @@ struct PointCache *BKE_ptcache_copy_list(struct ListBase *ptcaches_new, struct L
 /********************** Baking *********************/
 
 /* Bakes cache with cache_step sized jumps in time, not accurate but very fast. */
-void BKE_ptcache_quick_cache_all(struct Scene *scene);
+void BKE_ptcache_quick_cache_all(struct Main *bmain, struct Scene *scene);
 
 /* Bake cache or simulate to current frame with settings defined in the baker. */
 void BKE_ptcache_make_cache(struct PTCacheBaker* baker);
index f0fb2a6..878fca8 100644 (file)
@@ -82,8 +82,8 @@ int scene_check_setscene(struct Scene *sce);
 
 float BKE_curframe(struct Scene *scene);
 
-void scene_update_tagged(struct Scene *sce);
-void scene_update_for_newframe(struct Scene *sce, unsigned int lay);
+void scene_update_tagged(struct Main *bmain, struct Scene *sce);
+void scene_update_for_newframe(struct Main *bmain, struct Scene *sce, unsigned int lay);
 
 void scene_add_render_layer(struct Scene *sce);
 
index 412084f..c24ec78 100644 (file)
@@ -289,7 +289,7 @@ static void motionpaths_calc_optimise_depsgraph(Scene *scene, ListBase *targets)
        }
        
        /* "brew me a list that's sorted a bit faster now depsy" */
-       DAG_scene_sort(scene);
+       DAG_scene_sort(G.main, scene);
 }
 
 /* update scene for current frame */
@@ -299,7 +299,7 @@ static void motionpaths_calc_update_scene(Scene *scene)
        Base *base, *last=NULL;
        
        /* only stuff that moves or needs display still */
-       DAG_scene_update_flags(scene, scene->lay);
+       DAG_scene_update_flags(G.main, scene, scene->lay);
        
        /* find the last object with the tag 
         *      - all those afterwards are assumed to not be relevant for our calculations
@@ -327,7 +327,7 @@ static void motionpaths_calc_update_scene(Scene *scene)
         *        that doesn't force complete update, but for now, this is the
         *        most accurate way!
         */
-       scene_update_for_newframe(scene, scene->lay); // XXX this is the best way we can get anything moving
+       scene_update_for_newframe(G.main, scene, scene->lay); // XXX this is the best way we can get anything moving
 #endif
 }
 
index 9a62401..64d07db 100644 (file)
@@ -478,7 +478,7 @@ static int read_undosave(bContext *C, UndoElem *uel)
        G.fileflags= fileflags;
 
        if(success)
-               DAG_on_load_update();
+               DAG_on_load_update(G.main);
 
        return success;
 }
index 142f80a..1f83603 100644 (file)
@@ -658,7 +658,7 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Scene *scene, O
                dag_add_relation(dag,scenenode,node,DAG_RL_SCENE, "Scene Relation");
 }
 
-struct DagForest *build_dag(struct Scene *sce, short mask) 
+struct DagForest *build_dag(Main *bmain, Scene *sce, short mask) 
 {
        Base *base;
        Object *ob;
@@ -695,7 +695,7 @@ struct DagForest *build_dag(struct Scene *sce, short mask)
        }
        
        /* add groups used in current scene objects */
-       for(group= G.main->group.first; group; group= group->id.next) {
+       for(group= bmain->group.first; group; group= group->id.next) {
                if(group->id.flag & LIB_DOIT) {
                        for(go= group->gobject.first; go; go= go->next) {
                                build_dag_object(dag, scenenode, sce, go->ob, mask);
@@ -1605,7 +1605,7 @@ static void dag_editors_update(Main *bmain, ID *id)
 }
 
 /* groups with objects in this scene need to be put in the right order as well */
-static void scene_sort_groups(Scene *sce)
+static void scene_sort_groups(Main *bmain, Scene *sce)
 {
        Base *base;
        Group *group;
@@ -1613,14 +1613,14 @@ static void scene_sort_groups(Scene *sce)
        Object *ob;
        
        /* test; are group objects all in this scene? */
-       for(ob= G.main->object.first; ob; ob= ob->id.next) {
+       for(ob= bmain->object.first; ob; ob= ob->id.next) {
                ob->id.flag &= ~LIB_DOIT;
                ob->id.newid= NULL;     /* newid abuse for GroupObject */
        }
        for(base = sce->base.first; base; base= base->next)
                base->object->id.flag |= LIB_DOIT;
        
-       for(group= G.main->group.first; group; group= group->id.next) {
+       for(group= bmain->group.first; group; group= group->id.next) {
                for(go= group->gobject.first; go; go= go->next) {
                        if((go->ob->id.flag & LIB_DOIT)==0)
                                break;
@@ -1649,7 +1649,7 @@ static void scene_sort_groups(Scene *sce)
 }
 
 /* sort the base list on dependency order */
-void DAG_scene_sort(struct Scene *sce)
+void DAG_scene_sort(Main *bmain, Scene *sce)
 {
        DagNode *node;
        DagNodeQueue *nqueue;
@@ -1661,7 +1661,7 @@ void DAG_scene_sort(struct Scene *sce)
        
        tempbase.first= tempbase.last= NULL;
        
-       build_dag(sce, DAG_RL_ALL_BUT_DATA);
+       build_dag(bmain, sce, DAG_RL_ALL_BUT_DATA);
        
        dag_check_cycle(sce->theDag);
 
@@ -1731,7 +1731,7 @@ void DAG_scene_sort(struct Scene *sce)
        queue_delete(nqueue);
        
        /* all groups with objects in this scene gets resorted too */
-       scene_sort_groups(sce);
+       scene_sort_groups(bmain, sce);
        
        if(G.f & G_DEBUG) {
                printf("\nordered\n");
@@ -1926,7 +1926,7 @@ static void dag_scene_flush_layers(Scene *sce, int lay)
 }
 
 /* flushes all recalc flags in objects down the dependency tree */
-void DAG_scene_flush_update(Scene *sce, unsigned int lay, int time)
+void DAG_scene_flush_update(Main *bmain, Scene *sce, unsigned int lay, int time)
 {
        DagNode *firstnode;
        DagAdjList *itA;
@@ -1935,7 +1935,7 @@ void DAG_scene_flush_update(Scene *sce, unsigned int lay, int time)
        
        if(sce->theDag==NULL) {
                printf("DAG zero... not allowed to happen!\n");
-               DAG_scene_sort(sce);
+               DAG_scene_sort(bmain, sce);
        }
        
        firstnode= sce->theDag->DagNode.first;  // always scene node
@@ -2135,7 +2135,7 @@ static void dag_object_time_update_flags(Object *ob)
        }               
 }
 /* flag all objects that need recalc, for changes in time for example */
-void DAG_scene_update_flags(Scene *scene, unsigned int lay)
+void DAG_scene_update_flags(Main *bmain, Scene *scene, unsigned int lay)
 {
        Base *base;
        Object *ob;
@@ -2157,7 +2157,7 @@ void DAG_scene_update_flags(Scene *scene, unsigned int lay)
        }       
        
        /* we do groups each once */
-       for(group= G.main->group.first; group; group= group->id.next) {
+       for(group= bmain->group.first; group; group= group->id.next) {
                if(group->id.flag & LIB_DOIT) {
                        for(go= group->gobject.first; go; go= go->next) {
                                dag_object_time_update_flags(go->ob);
@@ -2166,7 +2166,7 @@ void DAG_scene_update_flags(Scene *scene, unsigned int lay)
        }
        
        for(sce= scene; sce; sce= sce->set)
-               DAG_scene_flush_update(sce, lay, 1);
+               DAG_scene_flush_update(bmain, sce, lay, 1);
        
        /* test: set time flag, to disable baked systems to update */
        for(SETLOOPER(scene, base)) {
@@ -2223,21 +2223,19 @@ static void dag_current_scene_layers(Main *bmain, Scene **sce, unsigned int *lay
        }
 }
 
-void DAG_ids_flush_update(int time)
+void DAG_ids_flush_update(Main *bmain, int time)
 {
-       Main *bmain= G.main;
        Scene *sce;
        unsigned int lay;
 
        dag_current_scene_layers(bmain, &sce, &lay);
 
        if(sce)
-               DAG_scene_flush_update(sce, lay, time);
+               DAG_scene_flush_update(bmain, sce, lay, time);
 }
 
-void DAG_on_load_update(void)
+void DAG_on_load_update(Main *bmain)
 {
-       Main *bmain= G.main;
        Scene *scene, *sce;
        Base *base;
        Object *ob;
@@ -2268,7 +2266,7 @@ void DAG_on_load_update(void)
                        }
                }
 
-               for(group= G.main->group.first; group; group= group->id.next) {
+               for(group= bmain->group.first; group; group= group->id.next) {
                        if(group->id.flag & LIB_DOIT) {
                                for(go= group->gobject.first; go; go= go->next) {
                                        if(ELEM5(go->ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL))
@@ -2282,7 +2280,7 @@ void DAG_on_load_update(void)
                }
 
                /* now tag update flags, to ensure deformers get calculated on redraw */
-               DAG_scene_update_flags(scene, lay);
+               DAG_scene_update_flags(bmain, scene, lay);
        }
 }
 
@@ -2394,7 +2392,7 @@ void DAG_id_flush_update(ID *id, short flag)
        }
 
        /* flush to other objects that depend on this one */
-       DAG_scene_flush_update(sce, lay, 0);
+       DAG_scene_flush_update(bmain, sce, lay, 0);
 }
 
 /* recursively descends tree, each node only checked once */
@@ -2477,7 +2475,7 @@ void DAG_id_update_flags(ID *id)
                }
                
                /* set recalcs and flushes */
-               DAG_scene_update_flags(sce, lay);
+               DAG_scene_update_flags(bmain, sce, lay);
                
                /* now we clear recalcs, unless color is set */
                for(node = sce->theDag->DagNode.first; node; node= node->next) {
index 11c96e9..6b79a7b 100644 (file)
@@ -783,14 +783,14 @@ void init_render_material(Material *mat, int r_mode, float *amb)
        }
 }
 
-void init_render_materials(int r_mode, float *amb)
+void init_render_materials(Main *bmain, int r_mode, float *amb)
 {
        Material *ma;
        
        /* clear these flags before going over materials, to make sure they
         * are cleared only once, otherwise node materials contained in other
         * node materials can go wrong */
-       for(ma= G.main->mat.first; ma; ma= ma->id.next) {
+       for(ma= bmain->mat.first; ma; ma= ma->id.next) {
                if(ma->id.us) {
                        ma->texco= 0;
                        ma->mapto= 0;
@@ -798,7 +798,7 @@ void init_render_materials(int r_mode, float *amb)
        }
 
        /* two steps, first initialize, then or the flags for layers */
-       for(ma= G.main->mat.first; ma; ma= ma->id.next) {
+       for(ma= bmain->mat.first; ma; ma= ma->id.next) {
                /* is_used flag comes back in convertblender.c */
                ma->flag &= ~MA_IS_USED;
                if(ma->id.us) 
@@ -815,10 +815,10 @@ void end_render_material(Material *mat)
                ntreeEndExecTree(mat->nodetree); /* has internal flag to detect it only does it once */
 }
 
-void end_render_materials(void)
+void end_render_materials(Main *bmain)
 {
        Material *ma;
-       for(ma= G.main->mat.first; ma; ma= ma->id.next)
+       for(ma= bmain->mat.first; ma; ma= ma->id.next)
                if(ma->id.us) 
                        end_render_material(ma);
 }
index ed63f01..52ee018 100644 (file)
@@ -3395,7 +3395,7 @@ ModifierData *object_add_particle_system(Scene *scene, Object *ob, char *name)
        psys->flag = PSYS_ENABLED|PSYS_CURRENT;
        psys->cfra=bsystem_time(scene,ob,scene->r.cfra+1,0.0);
 
-       DAG_scene_sort(scene);
+       DAG_scene_sort(G.main, scene);
        DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
 
        return md;
@@ -3432,7 +3432,7 @@ void object_remove_particle_system(Scene *scene, Object *ob)
        else
                ob->mode &= ~OB_MODE_PARTICLE_EDIT;
 
-       DAG_scene_sort(scene);
+       DAG_scene_sort(G.main, scene);
        DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
 }
 static void default_particle_settings(ParticleSettings *part)
index ced5d11..d44221d 100644 (file)
@@ -2335,7 +2335,7 @@ PointCache *BKE_ptcache_copy_list(ListBase *ptcaches_new, ListBase *ptcaches_old
 
 
 /* Baking */
-void BKE_ptcache_quick_cache_all(Scene *scene)
+void BKE_ptcache_quick_cache_all(Main *bmain, Scene *scene)
 {
        PTCacheBaker baker;
 
@@ -2348,6 +2348,7 @@ void BKE_ptcache_quick_cache_all(Scene *scene)
        baker.progresscontext=NULL;
        baker.render=0;
        baker.anim_init = 0;
+       baker.main=bmain;
        baker.scene=scene;
        baker.quick_step=scene->physics_settings.quick_cache_step;
 
@@ -2362,6 +2363,7 @@ typedef struct {
        int endframe;
        int step;
        int *cfra_ptr;
+       Main *main;
        Scene *scene;
 } ptcache_make_cache_data;
 
@@ -2369,7 +2371,7 @@ static void *ptcache_make_cache_thread(void *ptr) {
        ptcache_make_cache_data *data = (ptcache_make_cache_data*)ptr;
 
        for(; (*data->cfra_ptr <= data->endframe) && !data->break_operation; *data->cfra_ptr+=data->step) {
-               scene_update_for_newframe(data->scene, data->scene->lay);
+               scene_update_for_newframe(data->main, data->scene, data->scene->lay);
                if(G.background) {
                        printf("bake: frame %d :: %d\n", (int)*data->cfra_ptr, data->endframe);
                }
@@ -2382,6 +2384,7 @@ static void *ptcache_make_cache_thread(void *ptr) {
 /* if bake is not given run simulations to current frame */
 void BKE_ptcache_make_cache(PTCacheBaker* baker)
 {
+       Main *bmain = baker->main;
        Scene *scene = baker->scene;
        Scene *sce; /* SETLOOPER macro only */
        Base *base;
@@ -2401,6 +2404,7 @@ void BKE_ptcache_make_cache(PTCacheBaker* baker)
        thread_data.step = baker->quick_step;
        thread_data.cfra_ptr = &CFRA;
        thread_data.scene = baker->scene;
+       thread_data.main = baker->main;
 
        G.afbreek = 0;
 
@@ -2570,7 +2574,7 @@ void BKE_ptcache_make_cache(PTCacheBaker* baker)
        CFRA = cfrao;
        
        if(bake) /* already on cfra unless baking */
-               scene_update_for_newframe(scene, scene->lay);
+               scene_update_for_newframe(bmain, scene, scene->lay);
 
        if (thread_data.break_operation)
                WM_cursor_wait(0);
index 3c7f6e1..811f8a8 100644 (file)
@@ -531,12 +531,12 @@ void set_scene_bg(Scene *scene)
        }
 
        /* sort baselist */
-       DAG_scene_sort(scene);
+       DAG_scene_sort(G.main, scene);
        
        /* ensure dags are built for sets */
        for(sce= scene->set; sce; sce= sce->set)
                if(sce->theDag==NULL)
-                       DAG_scene_sort(sce);
+                       DAG_scene_sort(G.main, sce);
 
        /* copy layers and flags from bases to objects */
        for(base= scene->base.first; base; base= base->next) {
@@ -907,14 +907,14 @@ float BKE_curframe(Scene *scene)
        return ctime;
 }
 
-static void scene_update_tagged_recursive(Scene *scene, Scene *scene_parent)
+static void scene_update_tagged_recursive(Main *bmain, Scene *scene, Scene *scene_parent)
 {
        Base *base;
 
        /* sets first, we allow per definition current scene to have
           dependencies on sets, but not the other way around. */
        if(scene->set)
-               scene_update_tagged_recursive(scene->set, scene_parent);
+               scene_update_tagged_recursive(bmain, scene->set, scene_parent);
 
        for(base= scene->base.first; base; base= base->next) {
                Object *ob= base->object;
@@ -930,14 +930,14 @@ static void scene_update_tagged_recursive(Scene *scene, Scene *scene_parent)
 }
 
 /* this is called in main loop, doing tagged updates before redraw */
-void scene_update_tagged(Scene *scene)
+void scene_update_tagged(Main *bmain, Scene *scene)
 {
        scene->physics_settings.quick_cache_step= 0;
 
        /* update all objects: drivers, matrices, displists, etc. flags set
           by depgraph or manual, no layer check here, gets correct flushed */
 
-       scene_update_tagged_recursive(scene, scene);
+       scene_update_tagged_recursive(bmain, scene, scene);
 
        /* recalc scene animation data here (for sequencer) */
        {
@@ -949,14 +949,14 @@ void scene_update_tagged(Scene *scene)
        }
 
        if(scene->physics_settings.quick_cache_step)
-               BKE_ptcache_quick_cache_all(scene);
+               BKE_ptcache_quick_cache_all(bmain, scene);
 
        /* in the future this should handle updates for all datablocks, not
           only objects and scenes. - brecht */
 }
 
 /* applies changes right away, does all sets too */
-void scene_update_for_newframe(Scene *sce, unsigned int lay)
+void scene_update_for_newframe(Main *bmain, Scene *sce, unsigned int lay)
 {
        float ctime = BKE_curframe(sce);
        Scene *sce_iter;
@@ -966,13 +966,13 @@ void scene_update_for_newframe(Scene *sce, unsigned int lay)
 
        for(sce_iter= sce; sce_iter; sce_iter= sce_iter->set) {
                if(sce_iter->theDag==NULL)
-                       DAG_scene_sort(sce_iter);
+                       DAG_scene_sort(bmain, sce_iter);
        }
 
 
        /* Following 2 functions are recursive
         * so dont call within 'scene_update_tagged_recursive' */
-       DAG_scene_update_flags(sce, lay);   // only stuff that moves or needs display still
+       DAG_scene_update_flags(bmain, sce, lay);   // only stuff that moves or needs display still
 
        /* All 'standard' (i.e. without any dependencies) animation is handled here,
         * with an 'local' to 'macro' order of evaluation. This should ensure that
@@ -980,11 +980,11 @@ void scene_update_for_newframe(Scene *sce, unsigned int lay)
         * can be overridden by settings from Scene, which owns the Texture through a hierarchy
         * such as Scene->World->MTex/Texture) can still get correctly overridden.
         */
-       BKE_animsys_evaluate_all_animation(G.main, ctime);
+       BKE_animsys_evaluate_all_animation(bmain, ctime);
        /*...done with recusrive funcs */
 
        /* object_handle_update() on all objects, groups and sets */
-       scene_update_tagged_recursive(sce, sce);
+       scene_update_tagged_recursive(bmain, sce, sce);
 }
 
 /* return default layer, also used to patch old files */
index df18573..aab4e12 100644 (file)
@@ -1852,7 +1852,7 @@ static ImBuf * seq_render_scene_strip_impl(
        
        if(sequencer_view3d_cb && BLI_thread_is_main() && doseq_gl && (seq->scene == scene || have_seq==0) && seq->scene->camera) {
                /* opengl offscreen render */
-               scene_update_for_newframe(seq->scene, seq->scene->lay);
+               scene_update_for_newframe(G.main, seq->scene, seq->scene->lay);
                ibuf= sequencer_view3d_cb(seq->scene, seqrectx, seqrecty, 
                                          scene->r.seq_prev_type);
        }
@@ -1865,7 +1865,7 @@ static ImBuf * seq_render_scene_strip_impl(
                else
                        re= RE_NewRender(sce->id.name);
                
-               RE_BlenderFrame(re, sce, NULL, sce->lay, frame);
+               RE_BlenderFrame(re, G.main, sce, NULL, sce->lay, frame);
                
                RE_AcquireResultImage(re, &rres);
                
index 943bf2c..1fab3d8 100644 (file)
@@ -12509,7 +12509,7 @@ void BLO_script_library_append(BlendHandle **bh, char *dir, char *name,
 
        /* do we need to do this? */
        if(scene)
-               DAG_scene_sort(scene);
+               DAG_scene_sort(bmain, scene);
 
        *bh= (BlendHandle*)fd;
 }
index 3fc228e..9edcf63 100644 (file)
@@ -389,7 +389,7 @@ static int add_driver_button_exec (bContext *C, wmOperator *op)
        
        if (success) {
                /* send updates */
-               DAG_ids_flush_update(0);
+               DAG_ids_flush_update(CTX_data_main(C), 0);
                
                WM_event_add_notifier(C, NC_ANIMATION|ND_FCURVES_ORDER, NULL); // XXX
        }
@@ -440,7 +440,7 @@ static int remove_driver_button_exec (bContext *C, wmOperator *op)
        
        if (success) {
                /* send updates */
-               DAG_ids_flush_update(0);
+               DAG_ids_flush_update(CTX_data_main(C), 0);
                
                WM_event_add_notifier(C, NC_ANIMATION|ND_FCURVES_ORDER, NULL);  // XXX
        }
index f60181d..ea20a5c 100644 (file)
@@ -51,6 +51,7 @@
 #include "BKE_constraint.h"
 #include "BKE_depsgraph.h"
 #include "BKE_fcurve.h"
+#include "BKE_main.h"
 #include "BKE_nla.h"
 #include "BKE_global.h"
 #include "BKE_utildefines.h"
@@ -1060,6 +1061,7 @@ static int modify_key_op_poll(bContext *C)
 
 static int insert_key_exec (bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        KeyingSet *ks= NULL;
        int type= RNA_int_get(op->ptr, "type");
@@ -1106,7 +1108,7 @@ static int insert_key_exec (bContext *C, wmOperator *op)
                BKE_report(op->reports, RPT_WARNING, "Keying Set failed to insert any keyframes");
        
        /* send updates */
-       DAG_ids_flush_update(0);
+       DAG_ids_flush_update(bmain, 0);
        
        return OPERATOR_FINISHED;
 }
@@ -1202,6 +1204,7 @@ void ANIM_OT_keyframe_insert_menu (wmOperatorType *ot)
 
 static int delete_key_exec (bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        KeyingSet *ks= NULL;    
        int type= RNA_int_get(op->ptr, "type");
@@ -1248,7 +1251,7 @@ static int delete_key_exec (bContext *C, wmOperator *op)
                BKE_report(op->reports, RPT_WARNING, "Keying Set failed to remove any keyframes");
        
        /* send updates */
-       DAG_ids_flush_update(0);
+       DAG_ids_flush_update(bmain, 0);
        
        return OPERATOR_FINISHED;
 }
@@ -1287,6 +1290,7 @@ void ANIM_OT_keyframe_delete (wmOperatorType *ot)
  
 static int delete_key_v3d_exec (bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        float cfra= (float)CFRA; // XXX for now, don't bother about all the yucky offset crap
        
@@ -1315,7 +1319,7 @@ static int delete_key_v3d_exec (bContext *C, wmOperator *op)
        CTX_DATA_END;
        
        /* send updates */
-       DAG_ids_flush_update(0);
+       DAG_ids_flush_update(bmain, 0);
        
        WM_event_add_notifier(C, NC_OBJECT|ND_KEYS, NULL);
        
@@ -1343,6 +1347,7 @@ void ANIM_OT_keyframe_delete_v3d (wmOperatorType *ot)
 
 static int insert_key_button_exec (bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        PointerRNA ptr;
        PropertyRNA *prop= NULL;
@@ -1400,7 +1405,7 @@ static int insert_key_button_exec (bContext *C, wmOperator *op)
        
        if (success) {
                /* send updates */
-               DAG_ids_flush_update(0);
+               DAG_ids_flush_update(bmain, 0);
                
                /* send notifiers that keyframes have been changed */
                WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
@@ -1430,6 +1435,7 @@ void ANIM_OT_keyframe_insert_button (wmOperatorType *ot)
 
 static int delete_key_button_exec (bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        PointerRNA ptr;
        PropertyRNA *prop= NULL;
@@ -1470,7 +1476,7 @@ static int delete_key_button_exec (bContext *C, wmOperator *op)
        
        if (success) {
                /* send updates */
-               DAG_ids_flush_update(0);
+               DAG_ids_flush_update(bmain, 0);
                
                /* send notifiers that keyframes have been changed */
                WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
index 301111d..033c471 100644 (file)
@@ -289,6 +289,7 @@ void ANIM_OT_keying_set_path_remove (wmOperatorType *ot)
 
 static int add_keyingset_button_exec (bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        KeyingSet *ks = NULL;
        PropertyRNA *prop= NULL;
@@ -359,7 +360,7 @@ static int add_keyingset_button_exec (bContext *C, wmOperator *op)
        
        if (success) {
                /* send updates */
-               DAG_ids_flush_update(0);
+               DAG_ids_flush_update(bmain, 0);
                
                /* for now, only send ND_KEYS for KeyingSets */
                WM_event_add_notifier(C, NC_SCENE|ND_KEYINGSET, NULL);
@@ -389,6 +390,7 @@ void ANIM_OT_keyingset_button_add (wmOperatorType *ot)
 
 static int remove_keyingset_button_exec (bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        KeyingSet *ks = NULL;
        PropertyRNA *prop= NULL;
@@ -441,7 +443,7 @@ static int remove_keyingset_button_exec (bContext *C, wmOperator *op)
        
        if (success) {
                /* send updates */
-               DAG_ids_flush_update(0);
+               DAG_ids_flush_update(bmain, 0);
                
                /* for now, only send ND_KEYS for KeyingSets */
                WM_event_add_notifier(C, NC_SCENE|ND_KEYINGSET, NULL);
index 480bade..3b5c07a 100644 (file)
@@ -809,6 +809,7 @@ static void joined_armature_fix_links(Object *tarArm, Object *srcArm, bPoseChann
 /* join armature exec is exported for use in object->join objects operator... */
 int join_armature_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        Object  *ob= CTX_data_active_object(C);
        bArmature *arm= (ob)? ob->data: NULL;
@@ -901,12 +902,12 @@ int join_armature_exec(bContext *C, wmOperator *op)
                                free_pose_channels_hash(pose);
                        }
                        
-                       ED_base_object_free_and_unlink(scene, base);
+                       ED_base_object_free_and_unlink(bmain, scene, base);
                }
        }
        CTX_DATA_END;
        
-       DAG_scene_sort(scene);  // because we removed object(s)
+       DAG_scene_sort(bmain, scene);   // because we removed object(s)
 
        ED_armature_from_edit(ob);
        ED_armature_edit_free(ob);
@@ -1118,6 +1119,7 @@ static void separate_armature_bones (Scene *scene, Object *ob, short sel)
 /* separate selected bones into their armature */
 static int separate_armature_exec (bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        Object *obedit= CTX_data_edit_object(C);
        Object *oldob, *newob;
@@ -1158,7 +1160,7 @@ static int separate_armature_exec (bContext *C, wmOperator *op)
        ED_armature_edit_free(obedit);
        
        /* 2) duplicate base */
-       newbase= ED_object_add_duplicate(scene, oldbase, USER_DUP_ARM); /* only duplicate linked armature */
+       newbase= ED_object_add_duplicate(bmain, scene, oldbase, USER_DUP_ARM); /* only duplicate linked armature */
        newob= newbase->object;         
        newbase->flag &= ~SELECT;
        
index d38c91d..16204e9 100644 (file)
@@ -1119,6 +1119,7 @@ void CU_select_swap(Object *obedit)
 
 static int separate_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        Nurb *nu, *nu1;
        Object *oldob, *newob;
@@ -1139,7 +1140,7 @@ static int separate_exec(bContext *C, wmOperator *op)
        WM_cursor_wait(1);
        
        /* 1. duplicate the object and data */
-       newbase= ED_object_add_duplicate(scene, oldbase, 0);    /* 0 = fully linked */
+       newbase= ED_object_add_duplicate(bmain, scene, oldbase, 0);     /* 0 = fully linked */
        ED_base_object_select(newbase, BA_DESELECT);
        newob= newbase->object;
 
@@ -5543,6 +5544,7 @@ void CURVE_OT_shade_flat(wmOperatorType *ot)
 
 int join_curve_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        Object *ob= CTX_data_active_object(C);
        Curve *cu;
@@ -5594,7 +5596,7 @@ int join_curve_exec(bContext *C, wmOperator *op)
                                        }
                                }
                        
-                               ED_base_object_free_and_unlink(scene, base);
+                               ED_base_object_free_and_unlink(bmain, scene, base);
                        }
                }
        }
@@ -5603,7 +5605,7 @@ int join_curve_exec(bContext *C, wmOperator *op)
        cu= ob->data;
        addlisttolist(&cu->nurb, &tempbase);
        
-       DAG_scene_sort(scene);  // because we removed object(s), call before editmode!
+       DAG_scene_sort(bmain, scene);   // because we removed object(s), call before editmode!
        
        ED_object_enter_editmode(C, EM_WAITCURSOR);
        ED_object_exit_editmode(C, EM_FREEDATA|EM_WAITCURSOR|EM_DO_UNDO);
index efa5d6c..f243b4c 100644 (file)
 #ifndef ED_OBJECT_H
 #define ED_OBJECT_H
 
-struct wmKeyConfig;
-struct wmKeyMap;
-struct Scene;
-struct Object;
-struct bContext;
 struct Base;
-struct View3D;
 struct bConstraint;
+struct bContext;
 struct bPoseChannel;
+struct Curve;
 struct KeyBlock;
 struct Lattice;
+struct Main;
 struct Mesh;
-struct Curve;
-struct ReportList;
 struct ModifierData;
-struct wmOperatorType;
-struct wmOperator;
+struct Object;
+struct ReportList;
+struct Scene;
+struct View3D;
 struct wmEvent;
+struct wmKeyConfig;
+struct wmKeyMap;
+struct wmOperator;
+struct wmOperatorType;
 
 /* object_edit.c */
 struct Object *ED_object_active_context(struct bContext *C);
@@ -69,10 +70,10 @@ void ED_base_object_select(struct Base *base, short mode);
        /* includes notifier */
 void ED_base_object_activate(struct bContext *C, struct Base *base);
 
-void ED_base_object_free_and_unlink(struct Scene *scene, struct Base *base);
+void ED_base_object_free_and_unlink(struct Main *bmain, struct Scene *scene, struct Base *base);
 
        /* single object duplicate, if dupflag==0, fully linked, else it uses the flags given */
-struct Base *ED_object_add_duplicate(struct Scene *scene, struct Base *base, int dupflag);
+struct Base *ED_object_add_duplicate(struct Main *bmain, struct Scene *scene, struct Base *base, int dupflag);
 
 void ED_object_parent(struct Object *ob, struct Object *parent, int type, const char *substr);
 
@@ -97,7 +98,7 @@ int ED_object_add_generic_invoke(struct bContext *C, struct wmOperator *op, stru
 int ED_object_add_generic_get_opts(struct bContext *C, struct wmOperator *op, float *loc, float *rot, int *enter_editmode, unsigned int *layer);
 struct Object *ED_object_add_type(struct bContext *C, int type, float *loc, float *rot, int enter_editmode, unsigned int layer);
 
-void ED_object_single_users(struct Scene *scene, int full);
+void ED_object_single_users(struct Main *bmain, struct Scene *scene, int full);
 
 /* cleanup */
 int object_is_libdata(struct Object *ob);
@@ -116,7 +117,7 @@ void object_test_constraints(struct Object *ob);
 
 void ED_object_constraint_set_active(struct Object *ob, struct bConstraint *con);
 void ED_object_constraint_update(struct Object *ob);
-void ED_object_constraint_dependency_update(struct Scene *scene, struct Object *ob);
+void ED_object_constraint_dependency_update(struct Main *bmain, struct Scene *scene, struct Object *ob);
 
 /* object_lattice.c */
 int  mouse_lattice(struct bContext *C, short mval[2], int extend);
@@ -132,11 +133,11 @@ enum {
        MODIFIER_APPLY_SHAPE,
 } eModifier_Apply_Mode;
 
-struct ModifierData *ED_object_modifier_add(struct ReportList *reports, struct Scene *scene, struct Object *ob, char *name, int type);
-int ED_object_modifier_remove(struct ReportList *reports, struct Scene *scene, struct Object *ob, struct ModifierData *md);
+struct ModifierData *ED_object_modifier_add(struct ReportList *reports, struct Main *bmain, struct Scene *scene, struct Object *ob, char *name, int type);
+int ED_object_modifier_remove(struct ReportList *reports, struct Main *bmain, struct Scene *scene, struct Object *ob, struct ModifierData *md);
 int ED_object_modifier_move_down(struct ReportList *reports, struct Object *ob, struct ModifierData *md);
 int ED_object_modifier_move_up(struct ReportList *reports, struct Object *ob, struct ModifierData *md);
-int ED_object_modifier_convert(struct ReportList *reports, struct Scene *scene, struct Object *ob, struct ModifierData *md);
+int ED_object_modifier_convert(struct ReportList *reports, struct Main *bmain, struct Scene *scene, struct Object *ob, struct ModifierData *md);
 int ED_object_modifier_apply(struct ReportList *reports, struct Scene *scene, struct Object *ob, struct ModifierData *md, int mode);
 int ED_object_modifier_copy(struct ReportList *reports, struct Object *ob, struct ModifierData *md);
 
index 1b600a2..3d32030 100644 (file)
@@ -961,6 +961,7 @@ uiLayout *uiTemplateModifier(uiLayout *layout, bContext *C, PointerRNA *ptr, int
 
 void do_constraint_panels(bContext *C, void *arg, int event)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        Object *ob= CTX_data_active_object(C);
        
@@ -972,7 +973,7 @@ void do_constraint_panels(bContext *C, void *arg, int event)
                break;  // no handling
        case B_CONSTRAINT_CHANGETARGET:
                if (ob->pose) ob->pose->flag |= POSE_RECALC;    // checks & sorts pose channels
-               DAG_scene_sort(scene);
+               DAG_scene_sort(bmain, scene);
                break;
        default:
                break;
index 3f943f7..4b02e4b 100644 (file)
@@ -979,6 +979,7 @@ void UI_make_axis_color(char *src_col, char *dst_col, char axis)
 /* patching UserDef struct and Themes */
 void init_userdef_do_versions(void)
 {
+       Main *bmain= G.main;
 //     countall();
        
        /* the UserDef struct is not corrected with do_versions() .... ugh! */
@@ -1013,18 +1014,18 @@ void init_userdef_do_versions(void)
        if(U.flag & USER_CUSTOM_RANGE) 
                vDM_ColorBand_store(&U.coba_weight); /* signal for derivedmesh to use colorband */
        
-       if (G.main->versionfile <= 191) {
+       if (bmain->versionfile <= 191) {
                strcpy(U.plugtexdir, U.textudir);
                strcpy(U.sounddir, "/");
        }
        
        /* patch to set Dupli Armature */
-       if (G.main->versionfile < 220) {
+       if (bmain->versionfile < 220) {
                U.dupflag |= USER_DUP_ARM;
        }
        
        /* added seam, normal color, undo */
-       if (G.main->versionfile <= 234) {
+       if (bmain->versionfile <= 234) {
                bTheme *btheme;
                
                U.uiflag |= USER_GLOBALUNDO;
@@ -1047,12 +1048,12 @@ void init_userdef_do_versions(void)
                        }
                }
        }
-       if (G.main->versionfile <= 235) {
+       if (bmain->versionfile <= 235) {
                /* illegal combo... */
                if (U.flag & USER_LMOUSESELECT) 
                        U.flag &= ~USER_TWOBUTTONMOUSE;
        }
-       if (G.main->versionfile <= 236) {
+       if (bmain->versionfile <= 236) {
                bTheme *btheme;
                /* new space type */
                for(btheme= U.themes.first; btheme; btheme= btheme->next) {
@@ -1069,7 +1070,7 @@ void init_userdef_do_versions(void)
                        }
                }
        }
-       if (G.main->versionfile <= 237) {
+       if (bmain->versionfile <= 237) {
                bTheme *btheme;
                /* bone colors */
                for(btheme= U.themes.first; btheme; btheme= btheme->next) {
@@ -1080,7 +1081,7 @@ void init_userdef_do_versions(void)
                        }
                }
        }
-       if (G.main->versionfile <= 238) {
+       if (bmain->versionfile <= 238) {
                bTheme *btheme;
                /* bone colors */
                for(btheme= U.themes.first; btheme; btheme= btheme->next) {
@@ -1091,7 +1092,7 @@ void init_userdef_do_versions(void)
                        }
                }
        }
-       if (G.main->versionfile <= 239) {
+       if (bmain->versionfile <= 239) {
                bTheme *btheme;
                
                for(btheme= U.themes.first; btheme; btheme= btheme->next) {
@@ -1105,7 +1106,7 @@ void init_userdef_do_versions(void)
                }
                if(U.obcenter_dia==0) U.obcenter_dia= 6;
        }
-       if (G.main->versionfile <= 241) {
+       if (bmain->versionfile <= 241) {
                bTheme *btheme;
                for(btheme= U.themes.first; btheme; btheme= btheme->next) {
                        /* Node editor theme, check for alpha==0 is safe, then color was never set */
@@ -1146,7 +1147,7 @@ void init_userdef_do_versions(void)
                }
                
        }
-       if (G.main->versionfile <= 242) {
+       if (bmain->versionfile <= 242) {
                bTheme *btheme;
                
                for(btheme= U.themes.first; btheme; btheme= btheme->next) {
@@ -1164,11 +1165,11 @@ void init_userdef_do_versions(void)
                        }
                }
        }
-       if (G.main->versionfile <= 243) {
+       if (bmain->versionfile <= 243) {
                /* set default number of recently-used files (if not set) */
                if (U.recent_files == 0) U.recent_files = 10;
        }
-       if (G.main->versionfile < 245 || (G.main->versionfile == 245 && G.main->subversionfile < 3)) {
+       if (bmain->versionfile < 245 || (bmain->versionfile == 245 && bmain->subversionfile < 3)) {
                bTheme *btheme;
                for(btheme= U.themes.first; btheme; btheme= btheme->next) {
                        SETCOL(btheme->tv3d.editmesh_active, 255, 255, 255, 128);
@@ -1176,7 +1177,7 @@ void init_userdef_do_versions(void)
                if(U.coba_weight.tot==0)
                        init_colorband(&U.coba_weight, 1);
        }
-       if ((G.main->versionfile < 245) || (G.main->versionfile == 245 && G.main->subversionfile < 11)) {
+       if ((bmain->versionfile < 245) || (bmain->versionfile == 245 && bmain->subversionfile < 11)) {
                bTheme *btheme;
                for (btheme= U.themes.first; btheme; btheme= btheme->next) {
                        /* these should all use the same colour */
@@ -1189,7 +1190,7 @@ void init_userdef_do_versions(void)
                        SETCOL(btheme->ttime.cframe, 0x60, 0xc0, 0x40, 255);
                }
        }
-       if ((G.main->versionfile < 245) || (G.main->versionfile == 245 && G.main->subversionfile < 13)) {
+       if ((bmain->versionfile < 245) || (bmain->versionfile == 245 && bmain->subversionfile < 13)) {
                bTheme *btheme;
                for (btheme= U.themes.first; btheme; btheme= btheme->next) {
                        /* action channel groups (recolor anyway) */
@@ -1262,10 +1263,10 @@ void init_userdef_do_versions(void)
                        }
                }
        }
-       if ((G.main->versionfile < 245) || (G.main->versionfile == 245 && G.main->subversionfile < 16)) {
+       if ((bmain->versionfile < 245) || (bmain->versionfile == 245 && bmain->subversionfile < 16)) {
                U.flag |= USER_ADD_VIEWALIGNED|USER_ADD_EDITMODE;
        }
-       if ((G.main->versionfile < 247) || (G.main->versionfile == 247 && G.main->subversionfile <= 2)) {
+       if ((bmain->versionfile < 247) || (bmain->versionfile == 247 && bmain->subversionfile <= 2)) {
                bTheme *btheme;
                
                /* adjust themes */
@@ -1287,7 +1288,7 @@ void init_userdef_do_versions(void)
                        SETCOL(btheme->tseq.vertex_select, col[0], col[1], col[2], 255);
                }
        }
-       if (G.main->versionfile < 250) {
+       if (bmain->versionfile < 250) {
                bTheme *btheme;
                
                for(btheme= U.themes.first; btheme; btheme= btheme->next) {
@@ -1328,7 +1329,7 @@ void init_userdef_do_versions(void)
                U.ipo_new= BEZT_IPO_BEZ;
        }
        
-       if (G.main->versionfile < 250 || (G.main->versionfile == 250 && G.main->subversionfile < 1)) {
+       if (bmain->versionfile < 250 || (bmain->versionfile == 250 && bmain->subversionfile < 1)) {
                bTheme *btheme;
 
                for(btheme= U.themes.first; btheme; btheme= btheme->next) {
@@ -1351,7 +1352,7 @@ void init_userdef_do_versions(void)
                }
        }
 
-       if (G.main->versionfile < 250 || (G.main->versionfile == 250 && G.main->subversionfile < 3)) {
+       if (bmain->versionfile < 250 || (bmain->versionfile == 250 && bmain->subversionfile < 3)) {
                /* new audio system */
                if(U.audiochannels == 0)
                        U.audiochannels = 2;
@@ -1369,10 +1370,10 @@ void init_userdef_do_versions(void)
                        U.audiorate = 44100;
        }
 
-       if (G.main->versionfile < 250 || (G.main->versionfile == 250 && G.main->subversionfile < 5))
+       if (bmain->versionfile < 250 || (bmain->versionfile == 250 && bmain->subversionfile < 5))
                U.gameflags |= USER_DISABLE_VBO;
        
-       if (G.main->versionfile < 250 || (G.main->versionfile == 250 && G.main->subversionfile < 8)) {
+       if (bmain->versionfile < 250 || (bmain->versionfile == 250 && bmain->subversionfile < 8)) {
                wmKeyMap *km;
                
                for(km=U.keymaps.first; km; km=km->next) {
@@ -1412,16 +1413,16 @@ void init_userdef_do_versions(void)
                                strcpy(km->idname, "Property Editor");
                }
        }
-       if (G.main->versionfile < 250 || (G.main->versionfile == 250 && G.main->subversionfile < 16)) {
+       if (bmain->versionfile < 250 || (bmain->versionfile == 250 && bmain->subversionfile < 16)) {
                if(U.wmdrawmethod == USER_DRAW_TRIPLE)
                        U.wmdrawmethod = USER_DRAW_AUTOMATIC;
        }
        
-       if (G.main->versionfile < 252 || (G.main->versionfile == 252 && G.main->subversionfile < 3)) {
+       if (bmain->versionfile < 252 || (bmain->versionfile == 252 && bmain->subversionfile < 3)) {
                if (U.flag & USER_LMOUSESELECT) 
                        U.flag &= ~USER_TWOBUTTONMOUSE;
        }
-       if (G.main->versionfile < 252 || (G.main->versionfile == 252 && G.main->subversionfile < 4)) {
+       if (bmain->versionfile < 252 || (bmain->versionfile == 252 && bmain->subversionfile < 4)) {
                bTheme *btheme;
                
                /* default new handle type is auto handles */
@@ -1454,7 +1455,7 @@ void init_userdef_do_versions(void)
                        SETCOLF(btheme->tv3d.edge_crease, 0.8, 0, 0.6, 1.0);
                }
        }
-       if (G.main->versionfile <= 252) {
+       if (bmain->versionfile <= 252) {
                bTheme *btheme;
 
                /* init new curve colors */
@@ -1463,7 +1464,7 @@ void init_userdef_do_versions(void)
                                SETCOL(btheme->tv3d.lastsel_point, 0xff, 0xff, 0xff, 255);
                }
        }
-       if (G.main->versionfile < 252 || (G.main->versionfile == 252 && G.main->subversionfile < 5)) {
+       if (bmain->versionfile < 252 || (bmain->versionfile == 252 && bmain->subversionfile < 5)) {
                bTheme *btheme;
                
                /* interface_widgets.c */
index cdcbb5c..a63f499 100644 (file)
@@ -1330,7 +1330,7 @@ static EnumPropertyItem prop_separate_types[] = {
 };
 
 /* return 1: success */
-static int mesh_separate_selected(Scene *scene, Base *editbase)
+static int mesh_separate_selected(Main *bmain, Scene *scene, Base *editbase)
 {
        EditMesh *em, *emnew;
        EditVert *eve, *v1;
@@ -1372,7 +1372,7 @@ static int mesh_separate_selected(Scene *scene, Base *editbase)
         */
        
        /* 1 */
-       basenew= ED_object_add_duplicate(scene, editbase, 0);   /* 0 = fully linked */
+       basenew= ED_object_add_duplicate(bmain, scene, editbase, 0);    /* 0 = fully linked */
        ED_base_object_select(basenew, BA_DESELECT);
        
        /* 2 */
@@ -1441,7 +1441,7 @@ static int mesh_separate_selected(Scene *scene, Base *editbase)
 }
 
 /* return 1: success */
-static int mesh_separate_material(Scene *scene, Base *editbase)
+static int mesh_separate_material(Main *bmain, Scene *scene, Base *editbase)
 {
        Mesh *me= editbase->object->data;
        EditMesh *em= BKE_mesh_get_editmesh(me);
@@ -1453,7 +1453,7 @@ static int mesh_separate_material(Scene *scene, Base *editbase)
                /* select the material */
                EM_select_by_material(em, curr_mat);
                /* and now separate */
-               if(0==mesh_separate_selected(scene, editbase)) {
+               if(0==mesh_separate_selected(bmain, scene, editbase)) {
                        BKE_mesh_end_editmesh(me, em);
                        return 0;
                }
@@ -1464,7 +1464,7 @@ static int mesh_separate_material(Scene *scene, Base *editbase)
 }
 
 /* return 1: success */
-static int mesh_separate_loose(Scene *scene, Base *editbase)
+static int mesh_separate_loose(Main *bmain, Scene *scene, Base *editbase)
 {
        Mesh *me;
        EditMesh *em;
@@ -1504,7 +1504,7 @@ static int mesh_separate_loose(Scene *scene, Base *editbase)
                tot= BLI_countlist(&em->verts);
 
                /* and now separate */
-               doit= mesh_separate_selected(scene, editbase);
+               doit= mesh_separate_selected(bmain, scene, editbase);
 
                /* with hidden verts this can happen */
                if(tot == BLI_countlist(&em->verts))
@@ -1518,16 +1518,17 @@ static int mesh_separate_loose(Scene *scene, Base *editbase)
 
 static int mesh_separate_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        Base *base= CTX_data_active_base(C);
        int retval= 0, type= RNA_enum_get(op->ptr, "type");
        
        if(type == 0)
-               retval= mesh_separate_selected(scene, base);
+               retval= mesh_separate_selected(bmain, scene, base);
        else if(type == 1)
-               retval= mesh_separate_material (scene, base);
+               retval= mesh_separate_material(bmain, scene, base);
        else if(type == 2)
-               retval= mesh_separate_loose(scene, base);
+               retval= mesh_separate_loose(bmain, scene, base);
           
        if(retval) {
                WM_event_add_notifier(C, NC_GEOM|ND_DATA, base->object->data);
index 87b5c88..47b7b89 100644 (file)
@@ -92,6 +92,7 @@ return 0 if no join is made (error) and 1 of the join is done */
 
 int join_mesh_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        Object *ob= CTX_data_active_object(C);
        Material **matar, *ma;
@@ -443,7 +444,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(scene, base);
+                               ED_base_object_free_and_unlink(bmain, scene, base);
                }
        }
        CTX_DATA_END;
@@ -503,17 +504,17 @@ int join_mesh_exec(bContext *C, wmOperator *op)
                /* free it's ipo too - both are not actually freed from memory yet as ID-blocks */
                if(nkey->ipo) {
                        free_ipo(nkey->ipo);
-                       BLI_remlink(&G.main->ipo, nkey->ipo);
+                       BLI_remlink(&bmain->ipo, nkey->ipo);
                        MEM_freeN(nkey->ipo);
                }
 #endif
                
                free_key(nkey);
-               BLI_remlink(&G.main->key, nkey);
+               BLI_remlink(&bmain->key, nkey);
                MEM_freeN(nkey);
        }
        
-       DAG_scene_sort(scene);  // removed objects, need to rebuild dag before editmode call
+       DAG_scene_sort(bmain, scene);   // removed objects, need to rebuild dag before editmode call
        
        ED_object_enter_editmode(C, EM_WAITCURSOR);
        ED_object_exit_editmode(C, EM_FREEDATA|EM_WAITCURSOR|EM_DO_UNDO);
index 50851b5..67cae8d 100644 (file)
@@ -284,6 +284,7 @@ int ED_object_add_generic_get_opts(bContext *C, wmOperator *op, float *loc, floa
 /* for object add primitive operators */
 Object *ED_object_add_type(bContext *C, int type, float *loc, float *rot, int enter_editmode, unsigned int layer)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        Object *ob;
        
@@ -300,8 +301,8 @@ Object *ED_object_add_type(bContext *C, int type, float *loc, float *rot, int en
        /* more editor stuff */
        ED_object_base_init_transform(C, BASACT, loc, rot);
 
-       DAG_scene_sort(scene);
-       ED_render_id_flush_update(G.main, ob->data);
+       DAG_scene_sort(bmain, scene);
+       ED_render_id_flush_update(bmain, ob->data);
 
        if(enter_editmode)
                ED_object_enter_editmode(C, EM_IGNORE_LAYER);
@@ -750,6 +751,8 @@ static int group_instance_add_exec(bContext *C, wmOperator *op)
                return OPERATOR_CANCELLED;
 
        if(group) {
+               Main *bmain= CTX_data_main(C);
+               Scene *scene= CTX_data_scene(C);
                Object *ob= ED_object_add_type(C, OB_EMPTY, loc, rot, FALSE, layer);
                rename_id(&ob->id, group->id.name+2);
                ob->dup_group= group;
@@ -757,7 +760,7 @@ static int group_instance_add_exec(bContext *C, wmOperator *op)
                id_lib_extern(&group->id);
 
                /* works without this except if you try render right after, see: 22027 */
-               DAG_scene_sort(CTX_data_scene(C));
+               DAG_scene_sort(bmain, scene);
 
                WM_event_add_notifier(C, NC_SCENE|ND_OB_ACTIVE, CTX_data_scene(C));
 
@@ -797,16 +800,17 @@ void OBJECT_OT_group_instance_add(wmOperatorType *ot)
 
 /* remove base from a specific scene */
 /* note: now unlinks constraints as well */
-void ED_base_object_free_and_unlink(Scene *scene, Base *base)
+void ED_base_object_free_and_unlink(Main *bmain, Scene *scene, Base *base)
 {
        BLI_remlink(&scene->base, base);
-       free_libblock_us(&G.main->object, base->object);
+       free_libblock_us(&bmain->object, base->object);
        if(scene->basact==base) scene->basact= NULL;
        MEM_freeN(base);
 }
 
 static int object_delete_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        int islamp= 0;
        
@@ -817,14 +821,14 @@ static int object_delete_exec(bContext *C, wmOperator *op)
 
                if(base->object->type==OB_LAMP) islamp= 1;
                /* remove from current scene only */
-               ED_base_object_free_and_unlink(scene, base);
+               ED_base_object_free_and_unlink(bmain, scene, base);
        }
        CTX_DATA_END;
 
        if(islamp) reshadeall_displist(scene);  /* only frees displist */
 
-       DAG_scene_sort(scene);
-       DAG_ids_flush_update(0);
+       DAG_scene_sort(bmain, scene);
+       DAG_ids_flush_update(bmain, 0);
        
        WM_event_add_notifier(C, NC_SCENE|ND_OB_ACTIVE, CTX_data_scene(C));
        
@@ -859,6 +863,7 @@ static void copy_object__forwardModifierLinks(void *userData, Object *ob,
 /* after copying objects, copied data should get new pointers */
 static void copy_object_set_idnew(bContext *C, int dupflag)
 {
+       Main *bmain= CTX_data_main(C);
        Material *ma, *mao;
        ID *id;
        int a;
@@ -881,7 +886,7 @@ static void copy_object_set_idnew(bContext *C, int dupflag)
        
        /* materials */
        if( dupflag & USER_DUP_MAT) {
-               mao= G.main->mat.first;
+               mao= bmain->mat.first;
                while(mao) {
                        if(mao->id.newid) {
                                
@@ -915,7 +920,7 @@ static void copy_object_set_idnew(bContext *C, int dupflag)
 #if 0 // XXX old animation system
        /* lamps */
        if( dupflag & USER_DUP_IPO) {
-               Lamp *la= G.main->lamp.first;
+               Lamp *la= bmain->lamp.first;
                while(la) {
                        if(la->id.newid) {
                                Lamp *lan= (Lamp *)la->id.newid;
@@ -931,7 +936,7 @@ static void copy_object_set_idnew(bContext *C, int dupflag)
        }
        
        /* ipos */
-       ipo= G.main->ipo.first;
+       ipo= bmain->ipo.first;
        while(ipo) {
                if(ipo->id.lib==NULL && ipo->id.newid) {
                        Ipo *ipon= (Ipo *)ipo->id.newid;
@@ -1000,6 +1005,7 @@ static void make_object_duplilist_real(bContext *C, Scene *scene, Base *base)
 
 static int object_duplicates_make_real_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        
        clear_id_newpoins();
@@ -1009,8 +1015,8 @@ static int object_duplicates_make_real_exec(bContext *C, wmOperator *op)
        }
        CTX_DATA_END;
 
-       DAG_scene_sort(scene);
-       DAG_ids_flush_update(0);
+       DAG_scene_sort(bmain, scene);
+       DAG_ids_flush_update(bmain, 0);
        WM_event_add_notifier(C, NC_SCENE, scene);
        WM_main_add_notifier(NC_OBJECT|ND_DRAW, NULL);
        
@@ -1089,6 +1095,7 @@ static Base *duplibase_for_convert(Scene *scene, Base *base, Object *ob)
 
 static int convert_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        Base *basen=NULL, *basact=NULL, *basedel=NULL;
        Object *ob, *ob1, *newob, *obact= CTX_data_active_object(C);
@@ -1214,7 +1221,7 @@ static int convert_exec(bContext *C, wmOperator *op)
                        if (!keep_original) {
                                /* other users */
                                if(cu->id.us>1) {
-                                       for(ob1= G.main->object.first; ob1; ob1=ob1->id.next) {
+                                       for(ob1= bmain->object.first; ob1; ob1=ob1->id.next) {
                                                if(ob1->data==ob->data) {
                                                        ob1->type= OB_CURVE;
                                                        ob1->recalc |= OB_RECALC_ALL;
@@ -1321,7 +1328,7 @@ static int convert_exec(bContext *C, wmOperator *op)
                /* delete original if needed */
                if(basedel) {
                        if(!keep_original)
-                               ED_base_object_free_and_unlink(scene, basedel); 
+                               ED_base_object_free_and_unlink(bmain, scene, basedel);  
 
                        basedel = NULL;
                }
@@ -1337,13 +1344,13 @@ static int convert_exec(bContext *C, wmOperator *op)
                                base= base->next;
 
                                if (ob->type == OB_MBALL) {
-                                       ED_base_object_free_and_unlink(scene, tmpbase);
+                                       ED_base_object_free_and_unlink(bmain, scene, tmpbase);
                                }
                        }
                }
 
                /* delete object should renew depsgraph */
-               DAG_scene_sort(scene);
+               DAG_scene_sort(bmain, scene);
        }
 
 // XXX ED_object_enter_editmode(C, 0);
@@ -1357,7 +1364,7 @@ static int convert_exec(bContext *C, wmOperator *op)
                WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER|ND_DATA, BASACT->object);
        }
 
-       DAG_scene_sort(scene);
+       DAG_scene_sort(bmain, scene);
        WM_event_add_notifier(C, NC_SCENE|NC_OBJECT|ND_DRAW, scene); /* is NC_SCENE needed ? */
 
        return OPERATOR_FINISHED;
@@ -1394,7 +1401,7 @@ void OBJECT_OT_convert(wmOperatorType *ot)
 
 /* used below, assumes id.new is correct */
 /* leaves selection of base/object unaltered */
-static Base *object_add_duplicate_internal(Scene *scene, Base *base, int dupflag)
+static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, Base *base, int dupflag)
 {
        Base *basen= NULL;
        Material ***matarar;
@@ -1417,7 +1424,7 @@ static Base *object_add_duplicate_internal(Scene *scene, Base *base, int dupflag
                
                if(basen->flag & OB_FROMGROUP) {
                        Group *group;
-                       for(group= G.main->group.first; group; group= group->id.next) {
+                       for(group= bmain->group.first; group; group= group->id.next) {
                                if(object_in_group(ob, group))
                                        add_to_group(group, obn, scene, basen);
                        }
@@ -1596,7 +1603,7 @@ static Base *object_add_duplicate_internal(Scene *scene, Base *base, int dupflag
 
 /* single object duplicate, if dupflag==0, fully linked, else it uses the flags given */
 /* leaves selection of base/object unaltered */
-Base *ED_object_add_duplicate(Scene *scene, Base *base, int dupflag)
+Base *ED_object_add_duplicate(Main *bmain, Scene *scene, Base *base, int dupflag)
 {
        Base *basen;
        Object *ob;
@@ -1604,15 +1611,15 @@ Base *ED_object_add_duplicate(Scene *scene, Base *base, int dupflag)
        clear_id_newpoins();
        clear_sca_new_poins();  /* sensor/contr/act */
 
-       basen= object_add_duplicate_internal(scene, base, dupflag);
+       basen= object_add_duplicate_internal(bmain, scene, base, dupflag);
        if (basen == NULL) {
                return NULL;
        }
 
        ob= basen->object;
 
-       DAG_scene_sort(scene);
-       ED_render_id_flush_update(G.main, ob->data);
+       DAG_scene_sort(bmain, scene);
+       ED_render_id_flush_update(bmain, ob->data);
 
        return basen;
 }
@@ -1620,6 +1627,7 @@ Base *ED_object_add_duplicate(Scene *scene, Base *base, int dupflag)
 /* contextual operator dupli */
 static int duplicate_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        int linked= RNA_boolean_get(op->ptr, "linked");
        int dupflag= (linked)? 0: U.dupflag;
@@ -1628,7 +1636,7 @@ static int duplicate_exec(bContext *C, wmOperator *op)
        clear_sca_new_poins();  /* sensor/contr/act */
        
        CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) {
-               Base *basen= object_add_duplicate_internal(scene, base, dupflag);
+               Base *basen= object_add_duplicate_internal(bmain, scene, base, dupflag);
                
                /* note that this is safe to do with this context iterator,
                   the list is made in advance */
@@ -1642,14 +1650,14 @@ static int duplicate_exec(bContext *C, wmOperator *op)
                if(BASACT==base)
                        ED_base_object_activate(C, basen);
                
-               ED_render_id_flush_update(G.main, basen->object->data);
+               ED_render_id_flush_update(bmain, basen->object->data);
        }
        CTX_DATA_END;
 
        copy_object_set_idnew(C, dupflag);
 
-       DAG_scene_sort(scene);
-       DAG_ids_flush_update(0);
+       DAG_scene_sort(bmain, scene);
+       DAG_ids_flush_update(bmain, 0);
 
        WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene);
 
@@ -1697,6 +1705,7 @@ static int add_named_poll(bContext *C)
 
 static int add_named_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        Base *basen, *base;
        Object *ob;
@@ -1718,7 +1727,7 @@ static int add_named_exec(bContext *C, wmOperator *op)
        clear_id_newpoins();
        clear_sca_new_poins();  /* sensor/contr/act */
 
-       basen= object_add_duplicate_internal(scene, base, dupflag);
+       basen= object_add_duplicate_internal(bmain, scene, base, dupflag);
 
        if (basen == NULL) {
                MEM_freeN(base);
@@ -1732,8 +1741,8 @@ static int add_named_exec(bContext *C, wmOperator *op)
 
        copy_object_set_idnew(C, dupflag);
 
-       DAG_scene_sort(scene);
-       DAG_ids_flush_update(0);
+       DAG_scene_sort(bmain, scene);
+       DAG_ids_flush_update(bmain, 0);
 
        MEM_freeN(base);
 
index b1dc415..8f83a41 100644 (file)
@@ -779,12 +779,12 @@ void ED_object_constraint_update(Object *ob)
        else DAG_id_flush_update(&ob->id, OB_RECALC_OB);
 }
 
-void ED_object_constraint_dependency_update(Scene *scene, Object *ob)
+void ED_object_constraint_dependency_update(Main *bmain, Scene *scene, Object *ob)
 {
        ED_object_constraint_update(ob);
 
        if(ob->pose) ob->pose->flag |= POSE_RECALC;     // checks & sorts pose channels
-       DAG_scene_sort(scene);
+       DAG_scene_sort(bmain, scene);
 }
 
 static int constraint_poll(bContext *C)
@@ -931,8 +931,9 @@ void CONSTRAINT_OT_move_up (wmOperatorType *ot)
 
 static int pose_constraints_clear_exec(bContext *C, wmOperator *op)
 {
-       Object *ob= CTX_data_active_object(C);
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
+       Object *ob= CTX_data_active_object(C);
        
        /* free constraints for all selected bones */
        CTX_DATA_BEGIN(C, bPoseChannel*, pchan, selected_pose_bones)
@@ -943,7 +944,7 @@ static int pose_constraints_clear_exec(bContext *C, wmOperator *op)
        CTX_DATA_END;
        
        /* force depsgraph to get recalculated since relationships removed */
-       DAG_scene_sort(scene);          /* sort order of objects */     
+       DAG_scene_sort(bmain, scene);           /* sort order of objects */     
        
        /* do updates */
        DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
@@ -967,6 +968,7 @@ void POSE_OT_constraints_clear(wmOperatorType *ot)
 
 static int object_constraints_clear_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        
        /* do freeing */
@@ -978,7 +980,7 @@ static int object_constraints_clear_exec(bContext *C, wmOperator *op)
        CTX_DATA_END;
        
        /* force depsgraph to get recalculated since relationships removed */
-       DAG_scene_sort(scene);          /* sort order of objects */     
+       DAG_scene_sort(bmain, scene);           /* sort order of objects */     
        
        /* do updates */
        WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, NULL);
@@ -1002,8 +1004,9 @@ void OBJECT_OT_constraints_clear(wmOperatorType *ot)
 
 static int pose_constraint_copy_exec(bContext *C, wmOperator *op)
 {
-       bPoseChannel *pchan = CTX_data_active_pose_bone(C);
+       Main *bmain= CTX_data_main(C);
        Scene *scene = CTX_data_scene(C);
+       bPoseChannel *pchan = CTX_data_active_pose_bone(C);
        
        /* don't do anything if bone doesn't exist or doesn't have any constraints */
        if (ELEM(NULL, pchan, pchan->constraints.first)) {
@@ -1021,7 +1024,7 @@ static int pose_constraint_copy_exec(bContext *C, wmOperator *op)
        CTX_DATA_END;
        
        /* force depsgraph to get recalculated since new relationships added */
-       DAG_scene_sort(scene);          /* sort order of objects/bones */
+       DAG_scene_sort(bmain, scene);           /* sort order of objects/bones */
 
        return OPERATOR_FINISHED;
 }
@@ -1043,8 +1046,9 @@ void POSE_OT_constraints_copy(wmOperatorType *ot)
 
 static int object_constraint_copy_exec(bContext *C, wmOperator *op)
 {
-       Object *obact = ED_object_active_context(C);
+       Main *bmain= CTX_data_main(C);
        Scene *scene = CTX_data_scene(C);
+       Object *obact = ED_object_active_context(C);
        
        /* copy all constraints from active object to all selected objects */
        CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) 
@@ -1056,7 +1060,7 @@ static int object_constraint_copy_exec(bContext *C, wmOperator *op)
        CTX_DATA_END;
        
        /* force depsgraph to get recalculated since new relationships added */
-       DAG_scene_sort(scene);          /* sort order of objects */
+       DAG_scene_sort(bmain, scene);           /* sort order of objects */
 
        return OPERATOR_FINISHED;
 }
@@ -1219,6 +1223,7 @@ static short get_new_constraint_target(bContext *C, int con_type, Object **tar_o
 /* used by add constraint operators to add the constraint required */
 static int constraint_add_exec(bContext *C, wmOperator *op, Object *ob, ListBase *list, int type, short setTarget)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        bPoseChannel *pchan;
        bConstraint *con;
@@ -1316,7 +1321,7 @@ static int constraint_add_exec(bContext *C, wmOperator *op, Object *ob, ListBase
        
        
        /* force depsgraph to get recalculated since new relationships added */
-       DAG_scene_sort(scene);          /* sort order of objects */
+       DAG_scene_sort(bmain, scene);           /* sort order of objects */
        
        if ((ob->type==OB_ARMATURE) && (pchan)) {
                ob->pose->flag |= POSE_RECALC;  /* sort pose channels */
index 0d3ebc7..18da264 100644 (file)
@@ -137,6 +137,7 @@ Object *ED_object_active_context(bContext *C)
 /* ********* clear/set restrict view *********/
 static int object_hide_view_clear_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        ScrArea *sa= CTX_wm_area(C);
        View3D *v3d= sa->spacedata.first;
        Scene *scene= CTX_data_scene(C);
@@ -153,7 +154,7 @@ static int object_hide_view_clear_exec(bContext *C, wmOperator *op)
                }
        }
        if (changed) {
-               DAG_scene_sort(scene);
+               DAG_scene_sort(bmain, scene);
                WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene);
        }
 
@@ -178,6 +179,7 @@ void OBJECT_OT_hide_view_clear(wmOperatorType *ot)
 
 static int object_hide_view_set_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        short changed = 0;
        int unselected= RNA_boolean_get(op->ptr, "unselected");
@@ -204,7 +206,7 @@ static int object_hide_view_set_exec(bContext *C, wmOperator *op)
        CTX_DATA_END;
 
        if (changed) {
-               DAG_scene_sort(scene);
+               DAG_scene_sort(bmain, scene);
                
                WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, CTX_data_scene(C));
                
@@ -965,144 +967,6 @@ void special_editmenu(Scene *scene, View3D *v3d)
 
 }
 
-/* Change subdivision or particle properties of mesh object ob, if level==-1
- * then toggle subsurf, else set to level set allows to toggle multiple
- * selections */
-
-static void object_has_subdivision_particles(Object *ob, int *havesubdiv, int *havepart, int depth)
-{
-       if(ob->type==OB_MESH) {
-               if(modifiers_findByType(ob, eModifierType_Subsurf))
-                       *havesubdiv= 1;
-               if(modifiers_findByType(ob, eModifierType_ParticleSystem))
-                       *havepart= 1;
-       }
-
-       if(ob->dup_group && depth <= 4) {
-               GroupObject *go;
-
-               for(go= ob->dup_group->gobject.first; go; go= go->next)
-                       object_has_subdivision_particles(go->ob, havesubdiv, havepart, depth+1);
-       }
-}
-
-static void object_flip_subdivison_particles(Scene *scene, Object *ob, int *set, int level, int mode, int particles, int depth)
-{
-       ModifierData *md;
-
-       if(ob->type==OB_MESH) {
-               if(particles) {
-                       for(md=ob->modifiers.first; md; md=md->next) {
-                               if(md->type == eModifierType_ParticleSystem) {
-                                       ParticleSystemModifierData *psmd = (ParticleSystemModifierData*)md;
-
-                                       if(*set == -1)
-                                               *set= psmd->modifier.mode&(mode);
-
-                                       if (*set)
-                                               psmd->modifier.mode &= ~(mode);
-                                       else
-                                               psmd->modifier.mode |= (mode);
-                               }
-                       }
-               }
-               else {
-                       md = modifiers_findByType(ob, eModifierType_Subsurf);
-
-                       if (md) {
-                               SubsurfModifierData *smd = (SubsurfModifierData*) md;
-
-                               if (level == -1) {
-                                       if(*set == -1) 
-                                               *set= smd->modifier.mode&(mode);
-
-                                       if (*set)
-                                               smd->modifier.mode &= ~(mode);
-                                       else
-                                               smd->modifier.mode |= (mode);
-                               } else {
-                                       smd->levels = level;
-                               }
-                       } 
-                       else if(depth == 0 && *set != 0) {
-                               SubsurfModifierData *smd = (SubsurfModifierData*) modifier_new(eModifierType_Subsurf);
-                               
-                               BLI_addtail(&ob->modifiers, smd);
-                               modifier_unique_name(&ob->modifiers, (ModifierData*)smd);
-                               
-                               if (level!=-1) {
-                                       smd->levels = level;
-                               }
-                               
-                               if(*set == -1)
-                                       *set= 1;
-                       }
-               }
-
-               DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
-       }
-
-       if(ob->dup_group && depth<=4) {
-               GroupObject *go;
-
-               for(go= ob->dup_group->gobject.first; go; go= go->next)
-                       object_flip_subdivison_particles(scene, go->ob, set, level, mode, particles, depth+1);
-       }
-}
-
-/* Change subdivision properties of mesh object ob, if
-* level==-1 then toggle subsurf, else set to level.
-*/
-
-void flip_subdivison(Scene *scene, View3D *v3d, int level)
-{
-       Base *base;
-       int set= -1;
-       int mode, pupmode, particles= 0, havesubdiv= 0, havepart= 0;
-       int alt= 0; // XXX
-       
-       if(alt)
-               mode= eModifierMode_Realtime;
-       else
-               mode= eModifierMode_Render|eModifierMode_Realtime;
-       
-       if(level == -1) {
-               if (scene->obedit) { // XXX get from context
-                       object_has_subdivision_particles(scene->obedit, &havesubdiv, &havepart, 0);                     
-               } else {
-                       for(base= scene->base.first; base; base= base->next) {
-                               if(((level==-1) && (TESTBASE(v3d, base))) || (TESTBASELIB(v3d, base))) {
-                                       object_has_subdivision_particles(base->object, &havesubdiv, &havepart, 0);
-                               }
-                       }
-               }
-       }
-       else
-               havesubdiv= 1;
-       
-       if(havesubdiv && havepart) {
-               pupmode= pupmenu("Switch%t|Subsurf %x1|Particle Systems %x2");
-               if(pupmode <= 0)
-                       return;
-               else if(pupmode == 2)
-                       particles= 1;
-       }
-       else if(havepart)
-               particles= 1;
-
-       if (scene->obedit) {     // XXX get from context
-               object_flip_subdivison_particles(scene, scene->obedit, &set, level, mode, particles, 0);
-       } else {
-               for(base= scene->base.first; base; base= base->next) {
-                       if(((level==-1) && (TESTBASE(v3d, base))) || (TESTBASELIB(v3d, base))) {
-                               object_flip_subdivison_particles(scene, base->object, &set, level, mode, particles, 0);
-                       }
-               }
-       }
-       
-       DAG_ids_flush_update(0);
-}
 static void copymenu_properties(Scene *scene, View3D *v3d, Object *ob)
 {      
 //XXX no longer used - to be removed - replaced by game_properties_copy_exec
@@ -1197,7 +1061,7 @@ static void copymenu_logicbricks(Scene *scene, View3D *v3d, Object *ob)
        }
 }
 
-static void copymenu_modifiers(Scene *scene, View3D *v3d, Object *ob)
+static void copymenu_modifiers(Main *bmain, Scene *scene, View3D *v3d, Object *ob)
 {
        Base *base;
        int i, event;
@@ -1296,7 +1160,7 @@ static void copymenu_modifiers(Scene *scene, View3D *v3d, Object *ob)
        
 //     if(errorstr) notice(errorstr);
        
-       DAG_scene_sort(scene);
+       DAG_scene_sort(bmain, scene);
        
 }
 
@@ -1344,7 +1208,7 @@ static void copy_texture_space(Object *to, Object *ob)
        
 }
 
-void copy_attr(Scene *scene, View3D *v3d, short event)
+void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event)
 {
        Object *ob;
        Base *base;
@@ -1369,7 +1233,7 @@ void copy_attr(Scene *scene, View3D *v3d, short event)
                return;
        }
        else if(event==24) {
-               copymenu_modifiers(scene, v3d, ob);
+               copymenu_modifiers(bmain, scene, v3d, ob);
                return;
        }
 
@@ -1587,12 +1451,12 @@ void copy_attr(Scene *scene, View3D *v3d, short event)
        }
        
        if(do_scene_sort)
-               DAG_scene_sort(scene);
+               DAG_scene_sort(bmain, scene);
 
-       DAG_ids_flush_update(0);
+       DAG_ids_flush_update(bmain, 0);
 }
 
-void copy_attr_menu(Scene *scene, View3D *v3d)
+void copy_attr_menu(Main *bmain, Scene *scene, View3D *v3d)
 {
        Object *ob;
        short event;
@@ -1643,7 +1507,7 @@ void copy_attr_menu(Scene *scene, View3D *v3d)
        event= pupmenu(str);
        if(event<= 0) return;
        
-       copy_attr(scene, v3d, event);
+       copy_attr(bmain, scene, v3d, event);
 }
 
 /* ********************************************** */
index ba609bd..b0a6c64 100644 (file)
@@ -60,6 +60,7 @@
 
 static int objects_add_active_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        Object *ob= OBACT;
        Group *group;
@@ -70,7 +71,7 @@ static int objects_add_active_exec(bContext *C, wmOperator *op)
        /* linking to same group requires its own loop so we can avoid
           looking up the active objects groups each time */
 
-       for(group= G.main->group.first; group; group=group->id.next) {
+       for(group= bmain->group.first; group; group=group->id.next) {
                if(object_in_group(ob, group)) {
                        /* Assign groups to selected objects */
                        CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) {
@@ -83,7 +84,7 @@ static int objects_add_active_exec(bContext *C, wmOperator *op)
        
        if(!ok) BKE_report(op->reports, RPT_ERROR, "Active Object contains no groups");
        
-       DAG_scene_sort(scene);
+       DAG_scene_sort(bmain, scene);
        WM_event_add_notifier(C, NC_GROUP|NA_EDITED, NULL);
        
        return OPERATOR_FINISHED;
@@ -106,6 +107,7 @@ void GROUP_OT_objects_add_active(wmOperatorType *ot)
 
 static int objects_remove_active_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        Object *ob= OBACT;
        Group *group;
@@ -116,7 +118,7 @@ static int objects_remove_active_exec(bContext *C, wmOperator *op)
        /* linking to same group requires its own loop so we can avoid
           looking up the active objects groups each time */
 
-       for(group= G.main->group.first; group; group=group->id.next) {
+       for(group= bmain->group.first; group; group=group->id.next) {
                if(object_in_group(ob, group)) {
                        /* Assign groups to selected objects */
                        CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) {
@@ -129,7 +131,7 @@ static int objects_remove_active_exec(bContext *C, wmOperator *op)
        
        if(!ok) BKE_report(op->reports, RPT_ERROR, "Active Object contains no groups");
        
-       DAG_scene_sort(scene);
+       DAG_scene_sort(bmain, scene);
        WM_event_add_notifier(C, NC_GROUP|NA_EDITED, NULL);
        
        return OPERATOR_FINISHED;
@@ -152,6 +154,7 @@ void GROUP_OT_objects_remove_active(wmOperatorType *ot)
 
 static int group_objects_remove_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        Group *group= NULL;
 
@@ -162,7 +165,7 @@ static int group_objects_remove_exec(bContext *C, wmOperator *op)
        }
        CTX_DATA_END;
 
-       DAG_scene_sort(scene);
+       DAG_scene_sort(bmain, scene);
        WM_event_add_notifier(C, NC_GROUP|NA_EDITED, NULL);
        
        return OPERATOR_FINISHED;
@@ -185,6 +188,7 @@ void GROUP_OT_objects_remove(wmOperatorType *ot)
 
 static int group_create_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        Group *group= NULL;
        char name[32]; /* id name */
@@ -198,7 +202,7 @@ static int group_create_exec(bContext *C, wmOperator *op)
        }
        CTX_DATA_END;
 
-       DAG_scene_sort(scene);
+       DAG_scene_sort(bmain, scene);
        WM_event_add_notifier(C, NC_GROUP|NA_EDITED, NULL);
        
        return OPERATOR_FINISHED;
index 88e4630..fefefae 100644 (file)
@@ -45,6 +45,7 @@
 #include "BKE_context.h"
 #include "BKE_customdata.h"
 #include "BKE_depsgraph.h"
+#include "BKE_main.h"
 #include "BKE_mesh.h"
 #include "BKE_modifier.h"
 #include "BKE_object.h"
@@ -413,7 +414,7 @@ static Object *add_hook_object_new(Scene *scene, Object *obedit)
        return ob;
 }
 
-static void add_hook_object(Scene *scene, Object *obedit, Object *ob, int mode)
+static void add_hook_object(Main *bmain, Scene *scene, Object *obedit, Object *ob, int mode)
 {
        ModifierData *md=NULL;
        HookModifierData *hmd = NULL;
@@ -459,11 +460,12 @@ static void add_hook_object(Scene *scene, Object *obedit, Object *ob, int mode)
        mul_serie_m4(hmd->parentinv, ob->imat, obedit->obmat, NULL, 
                                 NULL, NULL, NULL, NULL, NULL);
        
-       DAG_scene_sort(scene);
+       DAG_scene_sort(bmain, scene);
 }
 
 static int object_add_hook_selob_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        Object *obedit = CTX_data_edit_object(C);
        Object *obsel=NULL;
@@ -482,7 +484,7 @@ static int object_add_hook_selob_exec(bContext *C, wmOperator *op)
                return OPERATOR_CANCELLED;
        }
        
-       add_hook_object(scene, obedit, obsel, OBJECT_ADDHOOK_SELOB);
+       add_hook_object(bmain, scene, obedit, obsel, OBJECT_ADDHOOK_SELOB);
        
        WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, obedit);
        return OPERATOR_FINISHED;
@@ -505,10 +507,11 @@ void OBJECT_OT_hook_add_selobj(wmOperatorType *ot)
 
 static int object_add_hook_newob_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        Object *obedit = CTX_data_edit_object(C);
 
-       add_hook_object(scene, obedit, NULL, OBJECT_ADDHOOK_NEWOB);
+       add_hook_object(bmain, scene, obedit, NULL, OBJECT_ADDHOOK_NEWOB);
        
        WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene);
        WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, obedit);
index 0661b67..a54ed9b 100644 (file)
@@ -53,6 +53,7 @@
 #include "BKE_global.h"
 #include "BKE_key.h"
 #include "BKE_lattice.h"
+#include "BKE_main.h"
 #include "BKE_mesh.h"
 #include "BKE_modifier.h"
 #include "BKE_multires.h"
@@ -77,7 +78,7 @@
 
 /******************************** API ****************************/
 
-ModifierData *ED_object_modifier_add(ReportList *reports, Scene *scene, Object *ob, char *name, int type)
+ModifierData *ED_object_modifier_add(ReportList *reports, Main *bmain, Scene *scene, Object *ob, char *name, int type)
 {
        ModifierData *md=NULL, *new_md=NULL;
        ModifierTypeInfo *mti = modifierType_getInfo(type);
@@ -129,10 +130,10 @@ ModifierData *ED_object_modifier_add(ReportList *reports, Scene *scene, Object *
                                ob->pd= object_add_collision_fields(0);
                        
                        ob->pd->deflect= 1;
-                       DAG_scene_sort(scene);
+                       DAG_scene_sort(bmain, scene);
                }
                else if(type == eModifierType_Surface)
-                       DAG_scene_sort(scene);
+                       DAG_scene_sort(bmain, scene);
        }
 
        DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
@@ -140,7 +141,7 @@ ModifierData *ED_object_modifier_add(ReportList *reports, Scene *scene, Object *
        return new_md;
 }
 
-int ED_object_modifier_remove(ReportList *reports, Scene *scene, Object *ob, ModifierData *md)
+int ED_object_modifier_remove(ReportList *reports, Main *bmain, Scene *scene, Object *ob, ModifierData *md)
 {
        ModifierData *obmd;
 
@@ -175,13 +176,13 @@ int ED_object_modifier_remove(ReportList *reports, Scene *scene, Object *ob, Mod
                if(ob->pd)
                        ob->pd->deflect= 0;
 
-               DAG_scene_sort(scene);
+               DAG_scene_sort(bmain, scene);
        }
        else if(md->type == eModifierType_Surface) {
                if(ob->pd && ob->pd->shape == PFIELD_SHAPE_SURFACE)
                        ob->pd->shape = PFIELD_SHAPE_PLANE;
 
-               DAG_scene_sort(scene);
+               DAG_scene_sort(bmain, scene);
        }
        else if(md->type == eModifierType_Smoke) {
                ob->dt = OB_TEXTURE;
@@ -243,7 +244,7 @@ int ED_object_modifier_move_down(ReportList *reports, Object *ob, ModifierData *
        return 1;
 }
 
-int ED_object_modifier_convert(ReportList *reports, Scene *scene, Object *ob, ModifierData *md)
+int ED_object_modifier_convert(ReportList *reports, Main *bmain, Scene *scene, Object *ob, ModifierData *md)
 {
        Object *obn;
        ParticleSystem *psys;
@@ -341,7 +342,7 @@ int ED_object_modifier_convert(ReportList *reports, Scene *scene, Object *ob, Mo
                }
        }
 
-       DAG_scene_sort(scene);
+       DAG_scene_sort(bmain, scene);
 
        return 1;
 }
@@ -500,11 +501,12 @@ int ED_object_modifier_copy(ReportList *reports, Object *ob, ModifierData *md)
 
 static int modifier_add_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        Object *ob = ED_object_active_context(C);
        int type= RNA_enum_get(op->ptr, "type");
 
-       if(!ED_object_modifier_add(op->reports, scene, ob, NULL, type))
+       if(!ED_object_modifier_add(op->reports, bmain, scene, ob, NULL, type))
                return OPERATOR_CANCELLED;
 
        WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob);
@@ -626,11 +628,12 @@ static ModifierData *edit_modifier_property_get(bContext *C, wmOperator *op, Obj
 
 static int modifier_remove_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        Object *ob = ED_object_active_context(C);
        ModifierData *md = edit_modifier_property_get(C, op, ob, 0);
        
-       if(!ob || !md || !ED_object_modifier_remove(op->reports, scene, ob, md))
+       if(!ob || !md || !ED_object_modifier_remove(op->reports, bmain, scene, ob, md))
                return OPERATOR_CANCELLED;
 
        WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob);
@@ -792,11 +795,12 @@ void OBJECT_OT_modifier_apply(wmOperatorType *ot)
 
 static int modifier_convert_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        Object *ob = ED_object_active_context(C);
        ModifierData *md = edit_modifier_property_get(C, op, ob, 0);
        
-       if(!ob || !md || !ED_object_modifier_convert(op->reports, scene, ob, md))
+       if(!ob || !md || !ED_object_modifier_convert(op->reports, bmain, scene, ob, md))
                return OPERATOR_CANCELLED;
 
        DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
index 8d488ee..463db87 100644 (file)
@@ -97,6 +97,7 @@ static int vertex_parent_set_poll(bContext *C)
 
 static int vertex_parent_set_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        Object *obedit= CTX_data_edit_object(C);
        EditVert *eve;
@@ -230,7 +231,7 @@ static int vertex_parent_set_exec(bContext *C, wmOperator *op)
        }
        CTX_DATA_END;
        
-       DAG_scene_sort(scene);
+       DAG_scene_sort(bmain, scene);
 
        WM_event_add_notifier(C, NC_OBJECT, NULL);
 
@@ -295,6 +296,7 @@ static int make_proxy_invoke (bContext *C, wmOperator *op, wmEvent *evt)
 
 static int make_proxy_exec (bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Object *ob, *gob= CTX_data_active_object(C);
        GroupObject *go;
        Scene *scene= CTX_data_scene(C);
@@ -338,7 +340,7 @@ static int make_proxy_exec (bContext *C, wmOperator *op)
                object_make_proxy(newob, ob, gob);
                
                /* depsgraph flushes are needed for the new data */
-               DAG_scene_sort(scene);
+               DAG_scene_sort(bmain, scene);
                DAG_id_flush_update(&newob->id, OB_RECALC_ALL);
                WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, newob);
        }
@@ -413,6 +415,8 @@ static EnumPropertyItem prop_clear_parent_types[] = {
 /* note, poll should check for editable scene */
 static int parent_clear_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
+       Scene *scene= CTX_data_scene(C);
        int type= RNA_enum_get(op->ptr, "type");
        
        CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) {
@@ -431,8 +435,8 @@ static int parent_clear_exec(bContext *C, wmOperator *op)
        }
        CTX_DATA_END;
        
-       DAG_scene_sort(CTX_data_scene(C));
-       DAG_ids_flush_update(0);
+       DAG_scene_sort(bmain, scene);
+       DAG_ids_flush_update(bmain, 0);
        WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
 
        return OPERATOR_FINISHED;
@@ -517,6 +521,7 @@ void ED_object_parent(Object *ob, Object *par, int type, const char *substr)
 
 static int parent_set_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        Object *par= CTX_data_active_object(C);
        bPoseChannel *pchan= NULL;
@@ -594,15 +599,15 @@ static int parent_set_exec(bContext *C, wmOperator *op)
 
                                                switch (partype) {
                                                case PAR_CURVE: /* curve deform */
-                                                       md= ED_object_modifier_add(op->reports, scene, ob, NULL, eModifierType_Curve);
+                                                       md= ED_object_modifier_add(op->reports, bmain, scene, ob, NULL, eModifierType_Curve);
                                                        ((CurveModifierData *)md)->object= par;
                                                        break;
                                                case PAR_LATTICE: /* lattice deform */
-                                                       md= ED_object_modifier_add(op->reports, scene, ob, NULL, eModifierType_Lattice);
+                                                       md= ED_object_modifier_add(op->reports, bmain, scene, ob, NULL, eModifierType_Lattice);
                                                        ((LatticeModifierData *)md)->object= par;
                                                        break;
                                                default: /* armature deform */
-                                                       md= ED_object_modifier_add(op->reports, scene, ob, NULL, eModifierType_Armature);
+                                                       md= ED_object_modifier_add(op->reports, bmain, scene, ob, NULL, eModifierType_Armature);
                                                        ((ArmatureModifierData *)md)->object= par;
                                                        break;
                                                }
@@ -657,8 +662,8 @@ static int parent_set_exec(bContext *C, wmOperator *op)
        }
        CTX_DATA_END;
        
-       DAG_scene_sort(scene);
-       DAG_ids_flush_update(0);
+       DAG_scene_sort(bmain, scene);
+       DAG_ids_flush_update(bmain, 0);
        WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
        
        return OPERATOR_FINISHED;
@@ -719,6 +724,7 @@ void OBJECT_OT_parent_set(wmOperatorType *ot)
 
 static int parent_noinv_set_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Object *par= CTX_data_active_object(C);
        
        par->recalc |= OB_RECALC_OB;
@@ -745,8 +751,8 @@ static int parent_noinv_set_exec(bContext *C, wmOperator *op)
        }
        CTX_DATA_END;
        
-       DAG_scene_sort(CTX_data_scene(C));
-       DAG_ids_flush_update(0);
+       DAG_scene_sort(bmain, CTX_data_scene(C));
+       DAG_ids_flush_update(bmain, 0);
        WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
        
        return OPERATOR_FINISHED;
@@ -772,6 +778,7 @@ void OBJECT_OT_parent_no_inverse_set(wmOperatorType *ot)
 
 static int object_slow_parent_clear_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
 
        CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) {
@@ -786,7 +793,7 @@ static int object_slow_parent_clear_exec(bContext *C, wmOperator *op)
        }
        CTX_DATA_END;
 
-       DAG_ids_flush_update(0);
+       DAG_ids_flush_update(bmain, 0);
        WM_event_add_notifier(C, NC_SCENE, scene);
        
        return OPERATOR_FINISHED;
@@ -813,6 +820,7 @@ void OBJECT_OT_slow_parent_clear(wmOperatorType *ot)
 
 static int object_slow_parent_set_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
 
        CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) {
@@ -824,7 +832,7 @@ static int object_slow_parent_set_exec(bContext *C, wmOperator *op)
        }
        CTX_DATA_END;
 
-       DAG_ids_flush_update(0);
+       DAG_ids_flush_update(bmain, 0);
        WM_event_add_notifier(C, NC_SCENE, scene);
        
        return OPERATOR_FINISHED;
@@ -858,6 +866,8 @@ static EnumPropertyItem prop_clear_track_types[] = {
 /* note, poll should check for editable scene */
 static int object_track_clear_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
+       Scene *scene= CTX_data_scene(C);
        int type= RNA_enum_get(op->ptr, "type");
 
        if(CTX_data_edit_object(C)) {
@@ -883,8 +893,8 @@ static int object_track_clear_exec(bContext *C, wmOperator *op)
        }
        CTX_DATA_END;
 
-       DAG_ids_flush_update(0);
-       DAG_scene_sort(CTX_data_scene(C));
+       DAG_ids_flush_update(bmain, 0);
+       DAG_scene_sort(bmain, scene);
        WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
 
        return OPERATOR_FINISHED;
@@ -920,6 +930,7 @@ static EnumPropertyItem prop_make_track_types[] = {
 
 static int track_set_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        Object *obact= CTX_data_active_object(C); 
        
@@ -987,8 +998,8 @@ static int track_set_exec(bContext *C, wmOperator *op)
                CTX_DATA_END;
        }
        
-       DAG_scene_sort(scene);
-       DAG_ids_flush_update(0);
+       DAG_scene_sort(bmain, scene);
+       DAG_ids_flush_update(bmain, 0);
        WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
        
        return OPERATOR_FINISHED;
@@ -1057,6 +1068,7 @@ static int move_to_layer_invoke(bContext *C, wmOperator *op, wmEvent *event)
 
 static int move_to_layer_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        View3D *v3d= CTX_wm_view3d(C);
        unsigned int lay, local;
@@ -1097,7 +1109,7 @@ static int move_to_layer_exec(bContext *C, wmOperator *op)
        /* warning, active object may be hidden now */
        
        WM_event_add_notifier(C, NC_SCENE|NC_OBJECT|ND_DRAW, scene); /* is NC_SCENE needed ? */
-       DAG_scene_sort(scene);
+       DAG_scene_sort(bmain, scene);
 
        return OPERATOR_FINISHED;
 }
@@ -1123,10 +1135,10 @@ void OBJECT_OT_move_to_layer(wmOperatorType *ot)
 
 /************************** Link to Scene Operator *****************************/
 
-void link_to_scene(unsigned short nr)
+void link_to_scene(Main *bmain, unsigned short nr)
 {
 #if 0
-       Scene *sce= (Scene*) BLI_findlink(&G.main->scene, G.curscreen->scenenr-1);
+       Scene *sce= (Scene*) BLI_findlink(&bmain->scene, G.curscreen->scenenr-1);
        Base *base, *nbase;
        
        if(sce==0) return;
@@ -1146,6 +1158,7 @@ void link_to_scene(unsigned short nr)
 
 static int make_links_scene_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene_to= BLI_findlink(&CTX_data_main(C)->scene, RNA_enum_get(op->ptr, "scene"));
 
        if(scene_to==NULL) {
@@ -1174,7 +1187,7 @@ static int make_links_scene_exec(bContext *C, wmOperator *op)
        }
        CTX_DATA_END;
 
-       DAG_ids_flush_update(0);
+       DAG_ids_flush_update(bmain, 0);
 
        /* one day multiple scenes will be visible, then we should have some update function for them */
        return OPERATOR_FINISHED;
@@ -1214,6 +1227,7 @@ static int allow_make_links_data(int ev, Object *ob, Object *obt)
 
 static int make_links_data_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        int event = RNA_int_get(op->ptr, "type");
        Object *ob;
        ID *id;
@@ -1266,7 +1280,7 @@ static int make_links_data_exec(bContext *C, wmOperator *op)
        }
        CTX_DATA_END;
 
-       DAG_ids_flush_update(0);
+       DAG_ids_flush_update(bmain, 0);
        WM_event_add_notifier(C, NC_SPACE|ND_SPACE_VIEW3D, CTX_wm_view3d(C));
        return OPERATOR_FINISHED;
 }
@@ -1396,7 +1410,7 @@ void new_id_matar(Material **matar, int totcol)
        }
 }
 
-void single_obdata_users(Scene *scene, int flag)
+void single_obdata_users(Main *bmain, Scene *scene, int flag)
 {
        Object *ob;
        Lamp *la;
@@ -1512,7 +1526,7 @@ void single_obdata_users(Scene *scene, int flag)
                }
        }
        
-       me= G.main->mesh.first;
+       me= bmain->mesh.first;
        while(me) {
                ID_NEW(me->texcomesh);
                me= me->id.next;
@@ -1610,10 +1624,9 @@ void do_single_tex_user(Tex **from)
        }
 }
 
-void single_tex_users_expand()
+void single_tex_users_expand(Main *bmain)
 {
        /* only when 'parent' blocks are LIB_NEW */
-       Main *bmain= G.main;
        Material *ma;
        Lamp *la;
        World *wo;
@@ -1650,10 +1663,9 @@ void single_tex_users_expand()
        }
 }
 
-static void single_mat_users_expand(void)
+static void single_mat_users_expand(Main *bmain)
 {
        /* only when 'parent' blocks are LIB_NEW */
-       Main *bmain= G.main;
        Object *ob;
        Mesh *me;
        Curve *cu;
@@ -1686,14 +1698,14 @@ static void single_mat_users_expand(void)
 }
 
 /* used for copying scenes */
-void ED_object_single_users(Scene *scene, int full)
+void ED_object_single_users(Main *bmain, Scene *scene, int full)
 {
        single_object_users(scene, NULL, 0);
 
        if(full) {
-               single_obdata_users(scene, 0);
-               single_mat_users_expand();
-               single_tex_users_expand();
+               single_obdata_users(bmain, scene, 0);
+               single_mat_users_expand(bmain);
+               single_tex_users_expand(bmain);
        }
 
        clear_id_newpoins();
@@ -1828,6 +1840,7 @@ void OBJECT_OT_make_local(wmOperatorType *ot)
 
 static int make_single_user_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        View3D *v3d= CTX_wm_view3d(C); /* ok if this is NULL */
        int flag= RNA_enum_get(op->ptr, "type"); /* 0==ALL, SELECTED==selected objecs */
@@ -1836,7 +1849,7 @@ static int make_single_user_exec(bContext *C, wmOperator *op)
                single_object_users(scene, v3d, flag);
 
        if(RNA_boolean_get(op->ptr, "obdata"))
-               single_obdata_users(scene, flag);
+               single_obdata_users(bmain, scene, flag);
 
        if(RNA_boolean_get(op->ptr, "material"))
                single_mat_users(scene, flag, FALSE);
@@ -1885,6 +1898,7 @@ void OBJECT_OT_make_single_user(wmOperatorType *ot)
 
 static int drop_named_material_invoke(bContext *C, wmOperator *op, wmEvent *event)
 {
+       Main *bmain= CTX_data_main(C);
        Base *base= ED_view3d_give_base_under_cursor(C, event->mval);
        Material *ma;
        char name[32];
@@ -1896,7 +1910,7 @@ static int drop_named_material_invoke(bContext *C, wmOperator *op, wmEvent *even
        
        assign_material(base->object, ma, 1);
        
-       DAG_ids_flush_update(0);
+       DAG_ids_flush_update(bmain, 0);
        WM_event_add_notifier(C, NC_SPACE|ND_SPACE_VIEW3D, CTX_wm_view3d(C));
        
        return OPERATOR_FINISHED;
index bd23d3a..d7961a8 100644 (file)
@@ -68,6 +68,7 @@
 
 static int object_location_clear_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain = CTX_data_main(C);
        Scene *scene = CTX_data_scene(C);
        KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, "Location");
        
@@ -102,7 +103,7 @@ static int object_location_clear_exec(bContext *C, wmOperator *op)
        CTX_DATA_END;
        
        /* this is needed so children are also updated */
-       DAG_ids_flush_update(0);
+       DAG_ids_flush_update(bmain, 0);
 
        WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
 
@@ -126,6 +127,7 @@ void OBJECT_OT_location_clear(wmOperatorType *ot)
 
 static int object_rotation_clear_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, "Rotation");
        
@@ -244,7 +246,7 @@ static int object_rotation_clear_exec(bContext *C, wmOperator *op)
        CTX_DATA_END;
        
        /* this is needed so children are also updated */
-       DAG_ids_flush_update(0);
+       DAG_ids_flush_update(bmain, 0);
 
        WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
        
@@ -268,6 +270,7 @@ void OBJECT_OT_rotation_clear(wmOperatorType *ot)
 
 static int object_scale_clear_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, "Scaling");
        
@@ -307,7 +310,7 @@ static int object_scale_clear_exec(bContext *C, wmOperator *op)
        CTX_DATA_END;
        
        /* this is needed so children are also updated */
-       DAG_ids_flush_update(0);
+       DAG_ids_flush_update(bmain, 0);
 
        WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
        
@@ -331,6 +334,7 @@ void OBJECT_OT_scale_clear(wmOperatorType *ot)
 
 static int object_origin_clear_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        float *v1, *v3, mat[3][3];
        int armature_clear= 0;
 
@@ -348,7 +352,7 @@ static int object_origin_clear_exec(bContext *C, wmOperator *op)
        CTX_DATA_END;
 
        if(armature_clear==0) /* in this case flush was done */
-               DAG_ids_flush_update(0);
+               DAG_ids_flush_update(bmain, 0);
        
        WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
        
@@ -767,7 +771,7 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
        }
        CTX_DATA_END;
 
-       for (tob= G.main->object.first; tob; tob= tob->id.next) {
+       for (tob= bmain->object.first; tob; tob= tob->id.next) {
                if(tob->data)
                        ((ID *)tob->data)->flag &= ~LIB_DOIT;
        }
@@ -921,14 +925,14 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
        }
        CTX_DATA_END;
 
-       for (tob= G.main->object.first; tob; tob= tob->id.next) {
+       for (tob= bmain->object.first; tob; tob= tob->id.next) {
                if(tob->data && (((ID *)tob->data)->flag & LIB_DOIT)) {
                        tob->recalc= OB_RECALC_OB|OB_RECALC_DATA;
                }
        }
 
        if (tot_change) {
-               DAG_ids_flush_update(0);
+               DAG_ids_flush_update(bmain, 0);
                WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
        }
 
index 37de0d8..a188908 100644 (file)
@@ -35,6 +35,7 @@
 #include "BKE_boids.h"
 #include "BKE_context.h"
 #include "BKE_depsgraph.h"
+#include "BKE_main.h"
 #include "BKE_particle.h"
 
 #include "BLI_listbase.h"
@@ -99,6 +100,7 @@ void BOID_OT_rule_add(wmOperatorType *ot)
 }
 static int rule_del_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain = CTX_data_main(C);
        Scene *scene = CTX_data_scene(C);
        PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem);
        ParticleSystem *psys= ptr.data;
@@ -125,7 +127,7 @@ static int rule_del_exec(bContext *C, wmOperator *op)
        if(rule)
                rule->flag |= BOIDRULE_CURRENT;
 
-       DAG_scene_sort(scene);
+       DAG_scene_sort(bmain, scene);
        DAG_id_flush_update(&psys->part->id, OB_RECALC_DATA|PSYS_RECALC_RESET);
 
        WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob);
@@ -266,6 +268,7 @@ void BOID_OT_state_add(wmOperatorType *ot)
 }
 static int state_del_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain = CTX_data_main(C);
        Scene *scene = CTX_data_scene(C);
        PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem);
        ParticleSystem *psys= ptr.data;
@@ -297,7 +300,7 @@ static int state_del_exec(bContext *C, wmOperator *op)
 
        state->flag |= BOIDSTATE_CURRENT;
 
-       DAG_scene_sort(scene);
+       DAG_scene_sort(bmain, scene);
        DAG_id_flush_update(&psys->part->id, OB_RECALC_DATA|PSYS_RECALC_RESET);
 
        WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob);
index 059805f..ba5d1ee 100644 (file)
@@ -166,7 +166,7 @@ static int new_particle_settings_exec(bContext *C, wmOperator *op)
 
        psys_check_boid_data(psys);
 
-       DAG_scene_sort(scene);
+       DAG_scene_sort(bmain, scene);
        DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
 
        WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, ob);
@@ -193,6 +193,7 @@ void PARTICLE_OT_new(wmOperatorType *ot)
 
 static int new_particle_target_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain = CTX_data_main(C);
        Scene *scene = CTX_data_scene(C);
        PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem);
        ParticleSystem *psys= ptr.data;
@@ -214,7 +215,7 @@ static int new_particle_target_exec(bContext *C, wmOperator *op)
 
        BLI_addtail(&psys->targets, pt);
 
-       DAG_scene_sort(scene);
+       DAG_scene_sort(bmain, scene);
        DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
 
        WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, ob);
@@ -238,6 +239,7 @@ void PARTICLE_OT_new_target(wmOperatorType *ot)
 
 static int remove_particle_target_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain = CTX_data_main(C);
        Scene *scene = CTX_data_scene(C);
        PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem);
        ParticleSystem *psys= ptr.data;
@@ -262,7 +264,7 @@ static int remove_particle_target_exec(bContext *C, wmOperator *op)
        if(pt)
                pt->flag |= PTARGET_CURRENT;
 
-       DAG_scene_sort(scene);
+       DAG_scene_sort(bmain, scene);
        DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
 
        WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, ob);
index 7110c3a..b5392f6 100644 (file)
@@ -403,6 +403,7 @@ static int screen_render_exec(bContext *C, wmOperator *op)
        Render *re= RE_NewRender(scene->id.name);
        Image *ima;
        View3D *v3d= CTX_wm_view3d(C);
+       Main *mainp= G.main; //BKE_undo_get_main(&scene);
        int lay= (v3d)? v3d->lay: scene->lay;
 
        if(re==NULL) {
@@ -418,9 +419,11 @@ static int screen_render_exec(bContext *C, wmOperator *op)
        BKE_image_backup_render(scene, ima);
 
        if(RNA_boolean_get(op->ptr, "animation"))
-               RE_BlenderAnim(re, scene, lay, scene->r.sfra, scene->r.efra, scene->r.frame_step, op->reports);
+               RE_BlenderAnim(re, mainp, scene, lay, scene->r.sfra, scene->r.efra, scene->r.frame_step, op->reports);
        else
-               RE_BlenderFrame(re, scene, NULL, lay, scene->r.cfra);
+               RE_BlenderFrame(re, mainp, scene, NULL, lay, scene->r.cfra);
+
+       //free_main(mainp);
 
        // no redraw needed, we leave state as we entered it
        ED_update_for_newframe(C, 1);
@@ -555,19 +558,18 @@ static void image_rect_update(void *rjv, RenderResult *rr, volatile rcti *renrec
 static void render_startjob(void *rjv, short *stop, short *do_update, float *progress)
 {
        RenderJob *rj= rjv;
-//     Main *mainp= BKE_undo_get_main(&rj->scene);
+       Main *mainp= G.main; //BKE_undo_get_main(&rj->scene);
 
        rj->stop= stop;
        rj->do_update= do_update;
        rj->progress= progress;
 
        if(rj->anim)
-               RE_BlenderAnim(rj->re, rj->scene, rj->lay, rj->scene->r.sfra, rj->scene->r.efra, rj->scene->r.frame_step, rj->reports);
+               RE_BlenderAnim(rj->re, mainp, rj->scene, rj->lay, rj->scene->r.sfra, rj->scene->r.efra, rj->scene->r.frame_step, rj->reports);
        else
-               RE_BlenderFrame(rj->re, rj->scene, rj->srl, rj->lay, rj->scene->r.cfra);
+               RE_BlenderFrame(rj->re, mainp, rj->scene, rj->srl, rj->lay, rj->scene->r.cfra);
 
-//     if(mainp)
-//             free_main(mainp);
+       //free_main(mainp);
 }
 
 static void render_endjob(void *rjv)
index 5881d50..524e36b 100644 (file)
@@ -241,6 +241,7 @@ static int screen_opengl_render_init(bContext *C, wmOperator *op)
 
 static void screen_opengl_render_end(bContext *C, OGLRender *oglrender)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= oglrender->scene;
 
        if(oglrender->mh) {
@@ -250,7 +251,7 @@ static void screen_opengl_render_end(bContext *C, OGLRender *oglrender)
 
        if(oglrender->timer) { /* exec will not have a timer */
                scene->r.cfra= oglrender->cfrao;
-               scene_update_for_newframe(scene, screen_opengl_layers(oglrender));
+               scene_update_for_newframe(bmain, scene, screen_opengl_layers(oglrender));
 
                WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), oglrender->timer);
        }
@@ -297,6 +298,7 @@ static int screen_opengl_render_anim_initialize(bContext *C, wmOperator *op)
 }
 static int screen_opengl_render_anim_step(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        OGLRender *oglrender= op->customdata;
        Scene *scene= oglrender->scene;
        ImBuf *ibuf;
@@ -316,11 +318,11 @@ static int screen_opengl_render_anim_step(bContext *C, wmOperator *op)
                if(lay & 0xFF000000)
                        lay &= 0xFF000000;
 
-               scene_update_for_newframe(scene, lay);
+               scene_update_for_newframe(bmain, scene, lay);
                CFRA++;
        }
 
-       scene_update_for_newframe(scene, screen_opengl_layers(oglrender));
+       scene_update_for_newframe(bmain, scene, screen_opengl_layers(oglrender));
 
        if(view_context) {
                if(oglrender->rv3d->persp==RV3D_CAMOB && oglrender->v3d->camera && oglrender->v3d->scenelock) {
index 4bb1f63..d4c90a7 100644 (file)
@@ -704,7 +704,7 @@ void BIF_view3d_previewrender_clear(ScrArea *sa)
 }
 
 /* afterqueue call */
-void BIF_view3d_previewrender(Scene *scene, ScrArea *sa)
+void BIF_view3d_previewrender(Main *bmain, Scene *scene, ScrArea *sa)
 {
        View3D *v3d= sa->spacedata.first;
        RegionView3D *rv3d= NULL; // XXX
@@ -804,7 +804,7 @@ void BIF_view3d_previewrender(Scene *scene, ScrArea *sa)
                        
                        /* database can have created render-resol data... */
                        if(rstats->convertdone) 
-                               DAG_scene_flush_update(scene, scene->lay, 0);
+                               DAG_scene_flush_update(bmain, scene, scene->lay, 0);
                        
                        //printf("dbase update\n");
                }
index 5082992..78ec4fe 100644 (file)
@@ -1727,6 +1727,7 @@ void ED_screen_animation_timer_update(bScreen *screen, int redraws, int refresh)
 /* results in fully updated anim system */
 void ED_update_for_newframe(const bContext *C, int mute)
 {
+       Main *bmain= CTX_data_main(C);
        bScreen *screen= CTX_wm_screen(C);
        Scene *scene= CTX_data_scene(C);
        
@@ -1750,7 +1751,7 @@ void ED_update_for_newframe(const bContext *C, int mute)
 
        /* this function applies the changes too */
        /* XXX future: do all windows */
-       scene_update_for_newframe(scene, BKE_screen_visible_layers(screen, scene)); /* BKE_scene.h */
+       scene_update_for_newframe(bmain, scene, BKE_screen_visible_layers(screen, scene)); /* BKE_scene.h */
        
        //if ( (CFRA>1) && (!mute) && (scene->r.audio.flag & AUDIO_SCRUB)) 
        //      audiostream_scrub( CFRA );
index c819299..b085c81 100644 (file)
@@ -2838,9 +2838,9 @@ static int scene_new_exec(bContext *C, wmOperator *op)
        
        /* these can't be handled in blenkernel curently, so do them here */
        if(type == SCE_COPY_LINK_DATA)
-               ED_object_single_users(newscene, 0);
+               ED_object_single_users(bmain, newscene, 0);
        else if(type == SCE_COPY_FULL)
-               ED_object_single_users(newscene, 1);
+               ED_object_single_users(bmain, newscene, 1);
        
        WM_event_add_notifier(C, NC_SCENE|ND_SCENEBROWSE, newscene);
        
index bf43392..a6c5712 100644 (file)
@@ -299,16 +299,17 @@ static void graph_panel_key_properties(const bContext *C, Panel *pa)
 
 static void do_graph_region_driver_buttons(bContext *C, void *arg, int event)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        
        switch (event) {
                case B_IPO_DEPCHANGE:
                {
                        /* rebuild depsgraph for the new deps */
-                       DAG_scene_sort(scene);
+                       DAG_scene_sort(bmain, scene);
                        
                        /* force an update of depsgraph */
-                       DAG_ids_flush_update(0);
+                       DAG_ids_flush_update(bmain, 0);
                }
                        break;
        }
index 98422ec..ae2cee6 100644 (file)
@@ -359,6 +359,7 @@ static void old_sca_move_actuator(bContext *C, void *datav, void *move_up)
 
 void do_logic_buts(bContext *C, void *arg, int event)
 {
+       Main *bmain= CTX_data_main(C);
        bSensor *sens;
        bController *cont;
        bActuator *act;
@@ -382,7 +383,7 @@ void do_logic_buts(bContext *C, void *arg, int event)
                break;
        
        case B_ADD_SENS:
-               for(ob=G.main->object.first; ob; ob=ob->id.next) {
+               for(ob=bmain->object.first; ob; ob=ob->id.next) {
                        if(ob->scaflag & OB_ADDSENS) {
                                ob->scaflag &= ~OB_ADDSENS;
                                sens= new_sensor(SENS_ALWAYS);
@@ -396,7 +397,7 @@ void do_logic_buts(bContext *C, void *arg, int event)
                break;
 
        case B_CHANGE_SENS:
-               for(ob=G.main->object.first; ob; ob=ob->id.next) {
+               for(ob=bmain->object.first; ob; ob=ob->id.next) {
                        sens= ob->sensors.first;
                        while(sens) {
                                if(sens->type != sens->otype) {
@@ -410,7 +411,7 @@ void do_logic_buts(bContext *C, void *arg, int event)
                break;
        
        case B_DEL_SENS:
-               for(ob=G.main->object.first; ob; ob=ob->id.next) {
+               for(ob=bmain->object.first; ob; ob=ob->id.next) {
                        sens= ob->sensors.first;
                        while(sens) {
                                if(sens->flag & SENS_DEL) {
@@ -425,7 +426,7 @@ void do_logic_buts(bContext *C, void *arg, int event)
                break;
        
        case B_ADD_CONT:
-               for(ob=G.main->object.first; ob; ob=ob->id.next) {
+               for(ob=bmain->object.first; ob; ob=ob->id.next) {
                        if(ob->scaflag & OB_ADDCONT) {
                                ob->scaflag &= ~OB_ADDCONT;
                                cont= new_controller(CONT_LOGIC_AND);
@@ -450,7 +451,7 @@ void do_logic_buts(bContext *C, void *arg, int event)
                break;
 
        case B_SET_STATE_BIT:
-               for(ob=G.main->object.first; ob; ob=ob->id.next) {
+               for(ob=bmain->object.first; ob; ob=ob->id.next) {
                        if(ob->scaflag & OB_ALLSTATE) {
                                ob->scaflag &= ~OB_ALLSTATE;
                                ob->state = 0x3FFFFFFF;
@@ -459,7 +460,7 @@ void do_logic_buts(bContext *C, void *arg, int event)
                break;
 
        case B_INIT_STATE_BIT:
-               for(ob=G.main->object.first; ob; ob=ob->id.next) {
+               for(ob=bmain->object.first; ob; ob=ob->id.next) {
                        if(ob->scaflag & OB_INITSTBIT) {
                                ob->scaflag &= ~OB_INITSTBIT;
                                ob->state = ob->init_state;
@@ -470,7 +471,7 @@ void do_logic_buts(bContext *C, void *arg, int event)
                break;
 
        case B_CHANGE_CONT:
-               for(ob=G.main->object.first; ob; ob=ob->id.next) {
+               for(ob=bmain->object.first; ob; ob=ob->id.next) {
                        cont= ob->controllers.first;
                        while(cont) {
                                if(cont->type != cont->otype) {
@@ -485,7 +486,7 @@ void do_logic_buts(bContext *C, void *arg, int event)
        
 
        case B_DEL_CONT:
-               for(ob=G.main->object.first; ob; ob=ob->id.next) {
+               for(ob=bmain->object.first; ob; ob=ob->id.next) {
                        cont= ob->controllers.first;
                        while(cont) {
                                if(cont->flag & CONT_DEL) {
@@ -501,7 +502,7 @@ void do_logic_buts(bContext *C, void *arg, int event)
                break;
 
        case B_ADD_ACT:
-               for(ob=G.main->object.first; ob; ob=ob->id.next) {
+               for(ob=bmain->object.first; ob; ob=ob->id.next) {
                        if(ob->scaflag & OB_ADDACT) {
                                ob->scaflag &= ~OB_ADDACT;
                                act= new_actuator(ACT_OBJECT);
@@ -514,7 +515,7 @@ void do_logic_buts(bContext *C, void *arg, int event)
                break;
 
        case B_CHANGE_ACT:
-               for(ob=G.main->object.first; ob; ob=ob->id.next) {
+               for(ob=bmain->object.first; ob; ob=ob->id.next) {
                        act= ob->actuators.first;
                        while(act) {
                                if(act->type != act->otype) {
@@ -528,7 +529,7 @@ void do_logic_buts(bContext *C, void *arg, int event)
                break;
 
        case B_DEL_ACT:
-               for(ob=G.main->object.first; ob; ob=ob->id.next) {
+               for(ob=bmain->object.first; ob; ob=ob->id.next) {
                        act= ob->actuators.first;
                        while(act) {
                                if(act->flag & ACT_DEL) {
@@ -546,7 +547,7 @@ void do_logic_buts(bContext *C, void *arg, int event)
        case B_SOUNDACT_BROWSE:
                /* since we don't know which... */
                didit= 0;
-               for(ob=G.main->object.first; ob; ob=ob->id.next) {
+               for(ob=bmain->object.first; ob; ob=ob->id.next) {
                        act= ob->actuators.first;
                        while(act)
                        {
@@ -555,11 +556,11 @@ void do_logic_buts(bContext *C, void *arg, int event)
                                        bSoundActuator *sa= act->data;
                                        if(sa->sndnr)
                                        {
-                                               bSound *sound= G.main->sound.first;
+                                               bSound *sound= bmain->sound.first;
                                                int nr= 1;
 
                                                if(sa->sndnr == -2) {
-// XXX                                                 activate_databrowse((ID *)G.main->sound.first, ID_SO, 0, B_SOUNDACT_BROWSE,
+// XXX                                                 activate_databrowse((ID *)bmain->sound.first, ID_SO, 0, B_SOUNDACT_BROWSE,
 //                                                                                     &sa->sndnr, do_logic_buts);
                                                        break;
                                                }
@@ -768,6 +769,7 @@ static void set_sca_ob(Object *ob)
 static ID **get_selected_and_linked_obs(bContext *C, short *count, short scavisflag)
 {
        Base *base;
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        Object *ob, *obt, *obact= CTX_data_active_object(C);
        ID **idar;
@@ -784,7 +786,7 @@ static ID **get_selected_and_linked_obs(bContext *C, short *count, short scavisf
        
        if(scene==NULL) return NULL;
        
-       ob= G.main->object.first;
+       ob= bmain->object.first;
        while(ob) {
                ob->scavisflag= 0;
                set_sca_ob(ob);
@@ -818,7 +820,7 @@ static ID **get_selected_and_linked_obs(bContext *C, short *count, short scavisf
                while(doit) {
                        doit= 0;
                        
-                       ob= G.main->object.first;
+                       ob= bmain->object.first;
                        while(ob) {
                        
                                /* 1st case: select sensor when controller selected */
@@ -899,7 +901,7 @@ static ID **get_selected_and_linked_obs(bContext *C, short *count, short scavisf
        } 
        
        /* now we count */
-       ob= G.main->object.first;
+       ob= bmain->object.first;
        while(ob) {
                if( ob->scavisflag ) (*count)++;
                ob= ob->id.next;
@@ -910,7 +912,7 @@ static ID **get_selected_and_linked_obs(bContext *C, short *count, short scavisf
        
        idar= MEM_callocN( (*count)*sizeof(void *), "idar");
        
-       ob= G.main->object.first;
+       ob= bmain->object.first;
        nr= 0;
 
        /* make the active object always the first one of the list */
@@ -1817,7 +1819,7 @@ static void check_armature_actuator(bContext *C, void *arg1_but, void *arg2_act)
 }
 
 
-static short draw_actuatorbuttons(Object *ob, bActuator *act, uiBlock *block, short xco, short yco, short width)
+static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlock *block, short xco, short yco, short width)
 {
        bSoundActuator      *sa      = NULL;
        bObjectActuator     *oa      = NULL;
@@ -2142,8 +2144,8 @@ static short draw_actuatorbuttons(Object *ob, bActuator *act, uiBlock *block, sh
                        glRects(xco, yco-ysize, xco+width, yco);
                        uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1);
                        
-                       if(G.main->sound.first) {
-                               IDnames_to_pupstring(&str, "Sound files", NULL, &(G.main->sound), (ID *)sa->sound, &(sa->sndnr));
+                       if(bmain->sound.first) {
+                               IDnames_to_pupstring(&str, "Sound files", NULL, &(bmain->sound), (ID *)sa->sound, &(sa->sndnr));
                                /* reset this value, it is for handling the event */
                                sa->sndnr = 0;
                                uiDefButS(block, MENU, B_SOUNDACT_BROWSE, str, xco+10,yco-22,20,19, &(sa->sndnr), 0, 0, 0, 0, "");      
@@ -4709,6 +4711,7 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
 
 void logic_buttons(bContext *C, ARegion *ar)
 {
+       Main *bmain= CTX_data_main(C);
        SpaceLogic *slogic= CTX_wm_space_logic(C);
        Object *ob= CTX_data_active_object(C);
        ID **idar;
@@ -5033,7 +5036,7 @@ void logic_buttons(bContext *C, ARegion *ar)
                                                uiButSetFunc(but, make_unique_prop_names_cb, act->name, (void*) 0);
 
                                                ycoo= yco;
-                                               yco= draw_actuatorbuttons(ob, act, block, xco, yco, width);
+                                               yco= draw_actuatorbuttons(bmain, ob, act, block, xco, yco, width);
                                                if(yco-6 < ycoo) ycoo= (yco+ycoo-20)/2;
                                        }
                                        else {
index 082f3f9..01992d2 100644 (file)
@@ -190,6 +190,7 @@ static void node_buts_normal(uiLayout *layout, bContext *C, PointerRNA *ptr)
 #if 0 // not used in 2.5x yet
 static void node_browse_tex_cb(bContext *C, void *ntree_v, void *node_v)
 {
+       Main *bmain= CTX_data_main(C);
        bNodeTree *ntree= ntree_v;
        bNode *node= node_v;
        Tex *tex;
@@ -200,7 +201,7 @@ static void node_browse_tex_cb(bContext *C, void *ntree_v, void *node_v)
                node->id->us--;
                node->id= NULL;
        }
-       tex= BLI_findlink(&G.main->tex, node->menunr-1);
+       tex= BLI_findlink(&bmain->tex, node->menunr-1);
 
        node->id= &tex->id;
        id_us_plus(node->id);
@@ -220,6 +221,7 @@ static void node_browse_tex_cb(bContext *C, void *ntree_v, void *node_v)
 #endif
 static void node_dynamic_update_cb(bContext *C, void *ntree_v, void *node_v)
 {
+       Main *bmain= CTX_data_main(C);
        Material *ma;
        bNode *node= (bNode *)node_v;
        ID *id= node->id;
@@ -229,7 +231,7 @@ static void node_dynamic_update_cb(bContext *C, void *ntree_v, void *node_v)
 
        /* Users only have to press the "update" button in one pynode
         * and we also update all others sharing the same script */
-       for (ma= G.main->mat.first; ma; ma= ma->id.next) {
+       for (ma= bmain->mat.first; ma; ma= ma->id.next) {
                if (ma->nodetree) {
                        bNode *nd;
                        for (nd= ma->nodetree->nodes.first; nd; nd= nd->next) {
@@ -277,6 +279,7 @@ static void node_buts_math(uiLayout *layout, bContext *C, PointerRNA *ptr)
 
 static void node_browse_text_cb(bContext *C, void *ntree_v, void *node_v)
 {
+       Main *bmain= CTX_data_main(C);
        bNodeTree *ntree= ntree_v;
        bNode *node= node_v;
        ID *oldid;
@@ -287,7 +290,7 @@ static void node_browse_text_cb(bContext *C, void *ntree_v, void *node_v)
                node->id->us--;
        }
        oldid= node->id;
-       node->id= BLI_findlink(&G.main->text, node->menunr-1);
+       node->id= BLI_findlink(&bmain->text, node->menunr-1);
        id_us_plus(node->id);
        BLI_strncpy(node->name, node->id->name+2, 21); /* huh? why 21? */
 
@@ -368,6 +371,7 @@ static void node_shader_buts_geometry(uiLayout *layout, bContext *C, PointerRNA
 
 static void node_shader_buts_dynamic(uiLayout *layout, bContext *C, PointerRNA *ptr)
 { 
+       Main *bmain= CTX_data_main(C);
        uiBlock *block= uiLayoutAbsoluteBlock(layout);
        bNode *node= ptr->data;
        bNodeTree *ntree= ptr->id.data;
@@ -380,7 +384,7 @@ static void node_shader_buts_dynamic(uiLayout *layout, bContext *C, PointerRNA *
        /* B_NODE_EXEC is handled in butspace.c do_node_buts */
        if(!node->id) {
                        char *strp;
-                       IDnames_to_pupstring(&strp, NULL, "", &(G.main->text), NULL, NULL);
+                       IDnames_to_pupstring(&strp, NULL, "", &(bmain->text), NULL, NULL);
                        node->menunr= 0;
                        bt= uiDefButS(block, MENU, B_NODE_EXEC/*+node->nr*/, strp, 
                                                        butr->xmin, dy, 19, 19, 
index cea88c3..dcd87b8 100644 (file)
@@ -1852,6 +1852,7 @@ void NODE_OT_links_cut(wmOperatorType *ot)
 /* goes over all scenes, reads render layers */
 static int node_read_renderlayers_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        SpaceNode *snode= CTX_wm_space_node(C);
        Scene *curscene= CTX_data_scene(C), *scene;
        bNode *node;
@@ -1859,7 +1860,7 @@ static int node_read_renderlayers_exec(bContext *C, wmOperator *op)
        ED_preview_kill_jobs(C);
 
        /* first tag scenes unread */
-       for(scene= G.main->scene.first; scene; scene= scene->id.next) 
+       for(scene= bmain->scene.first; scene; scene= scene->id.next) 
                scene->id.flag |= LIB_DOIT;
 
        for(node= snode->edittree->nodes.first; node; node= node->next) {
index 3cdc243..ad04e28 100644 (file)
@@ -3186,7 +3186,7 @@ static void object_delete_cb(bContext *C, Scene *scene, TreeElement *te, TreeSto
                if(scene->obedit==base->object) 
                        ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR|EM_DO_UNDO);
                
-               ED_base_object_free_and_unlink(scene, base);
+               ED_base_object_free_and_unlink(CTX_data_main(C), scene, base);
                te->directdata= NULL;
                tselem->id= NULL;
        }
@@ -3337,7 +3337,7 @@ void outliner_del(bContext *C, Scene *scene, ARegion *ar, SpaceOops *soops)
                ;//             del_seq();
        else {
                outliner_do_object_operation(C, scene, soops, &soops->tree, object_delete_cb);
-               DAG_scene_sort(scene);
+               DAG_scene_sort(CTX_data_main(C), scene);
                ED_undo_push(C, "Delete Objects");
        }
 }
@@ -3356,6 +3356,7 @@ static EnumPropertyItem prop_object_op_types[] = {
 
 static int outliner_object_operation_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        SpaceOops *soops= CTX_wm_space_outliner(C);
        int event;
@@ -3382,7 +3383,7 @@ static int outliner_object_operation_exec(bContext *C, wmOperator *op)
        }
        else if(event==4) {
                outliner_do_object_operation(C, scene, soops, &soops->tree, object_delete_cb);
-               DAG_scene_sort(scene);
+               DAG_scene_sort(bmain, scene);
                str= "Delete Objects";
        }
        else if(event==5) {     /* disabled, see above (ton) */
index 5638cb6..7a3f0ff 100644 (file)
@@ -2359,6 +2359,7 @@ void TEXT_OT_insert(wmOperatorType *ot)
 
 static int find_and_replace(bContext *C, wmOperator *op, short mode)
 {
+       Main *bmain= CTX_data_main(C);
        SpaceText *st= CTX_wm_space_text(C);
        Text *start= NULL, *text= st->text;
        int flags, first= 1;
@@ -2420,7 +2421,7 @@ static int find_and_replace(bContext *C, wmOperator *op, short mode)
                        if(text->id.next)
                                text= st->text= text->id.next;
                        else
-                               text= st->text= G.main->text.first;
+                               text= st->text= bmain->text.first;
                        txt_move_toline(text, 0, 0);
                        text_update_cursor_moved(C);
                        WM_event_add_notifier(C, NC_TEXT|ND_CURSOR, text);
index 19aaff2..f4ae87c 100644 (file)
@@ -53,6 +53,7 @@
 #include "BKE_customdata.h"
 #include "BKE_depsgraph.h"
 #include "BKE_idprop.h"
+#include "BKE_main.h"
 #include "BKE_mesh.h"
 #include "BKE_object.h"
 #include "BKE_global.h"
@@ -997,6 +998,7 @@ static int test_parent_loop(Object *par, Object *ob)
 
 static void do_view3d_region_buttons(bContext *C, void *arg, int event)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
 //     Object *obedit= CTX_data_edit_object(C);
        View3D *v3d= CTX_wm_view3d(C);
@@ -1028,7 +1030,7 @@ static void do_view3d_region_buttons(bContext *C, void *arg, int event)
                        if(ob->id.lib || test_parent_loop(ob->parent, ob) ) 
                                ob->parent= NULL;
                        else {
-                               DAG_scene_sort(scene);
+                               DAG_scene_sort(bmain, scene);
                                DAG_id_flush_update(&ob->id, OB_RECALC_OB);
                        }
                }
index 14b769f..761ef43 100644 (file)
@@ -152,6 +152,7 @@ static void handle_view3d_lock(bContext *C)
 
 static int layers_exec(bContext *C, wmOperator *op)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *scene= CTX_data_scene(C);
        ScrArea *sa= CTX_wm_area(C);
        View3D *v3d= sa->spacedata.first;
@@ -213,7 +214,7 @@ static int layers_exec(bContext *C, wmOperator *op)
        if(v3d->scenelock) handle_view3d_lock(C);
        
        /* new layers might need unflushed events events */
-       DAG_scene_update_flags(scene, v3d->lay);        /* tags all that moves and flushes */
+       DAG_scene_update_flags(bmain, scene, v3d->lay); /* tags all that moves and flushes */
 
        ED_area_tag_redraw(sa);
        
index 9928ba1..b3763d6 100644 (file)
 
 #include "BKE_action.h"
 #include "BKE_anim.h"
-#include "BKE_context.h"
 #include "BKE_armature.h"
+#include "BKE_context.h"
 #include "BKE_curve.h"
 #include "BKE_depsgraph.h"
 #include "BKE_DerivedMesh.h"
 #include "BKE_displist.h"
 #include "BKE_global.h"
 #include "BKE_lattice.h"
+#include "BKE_main.h"
 #include "BKE_mesh.h"
 #include "BKE_modifier.h"
 #include "BKE_object.h"
@@ -420,6 +421,7 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode)
 static int snap_sel_to_grid(bContext *C, wmOperator *op)
 {
        extern float originmat[3][3];   /* XXX object.c */
+       Main *bmain= CTX_data_main(C);
        Object *obedit= CTX_data_edit_object(C);
        Scene *scene= CTX_data_scene(C);
        RegionView3D *rv3d= CTX_wm_region_data(C);
@@ -526,7 +528,7 @@ static int snap_sel_to_grid(bContext *C, wmOperator *op)
                CTX_DATA_END;
        }
 
-       DAG_ids_flush_update(0);
+       DAG_ids_flush_update(bmain, 0);
        WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
        
        return OPERATOR_FINISHED;
@@ -553,6 +555,7 @@ void VIEW3D_OT_snap_selected_to_grid(wmOperatorType *ot)
 static int snap_sel_to_curs(bContext *C, wmOperator *op)
 {
        extern float originmat[3][3];   /* XXX object.c */
+       Main *bmain= CTX_data_main(C);
        Object *obedit= CTX_data_edit_object(C);
        Scene *scene= CTX_data_scene(C);
        View3D *v3d= CTX_wm_view3d(C);
@@ -651,7 +654,7 @@ static int snap_sel_to_curs(bContext *C, wmOperator *op)
                CTX_DATA_END;
        }
 
-       DAG_ids_flush_update(0);
+       DAG_ids_flush_update(bmain, 0);
        WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
        
        return OPERATOR_FINISHED;
index 8ec226e..4de6a27 100644 (file)
@@ -1344,7 +1344,7 @@ short view3d_opengl_select(ViewContext *vc, unsigned int *buffer, unsigned int b
 
 /* ********************** local view operator ******************** */
 
-static unsigned int free_localbit(void)
+static unsigned int free_localbit(Main *bmain)
 {
        unsigned int lay;
        ScrArea *sa;
@@ -1354,7 +1354,7 @@ static unsigned int free_localbit(void)
        
        /* sometimes we loose a localview: when an area is closed */
        /* check all areas: which localviews are in use? */
-       for(sc= G.main->screen.first; sc; sc= sc->id.next) {
+       for(sc= bmain->screen.first; sc; sc= sc->id.next) {
                for(sa= sc->areabase.first; sa; sa= sa->next) {
                        SpaceLink *sl= sa->spacedata.first;
                        for(; sl; sl= sl->next) {
@@ -1416,7 +1416,7 @@ int ED_view3d_scene_layer_set(int lay, const int *values, int *active)
        return lay;
 }
 
-static void initlocalview(Scene *scene, ScrArea *sa)
+static void initlocalview(Main *bmain, Scene *scene, ScrArea *sa)
 {
        View3D *v3d= sa->spacedata.first;
        Base *base;
@@ -1428,7 +1428,7 @@ static void initlocalview(Scene *scene, ScrArea *sa)
 
        INIT_MINMAX(min, max);
 
-       locallay= free_localbit();
+       locallay= free_localbit(bmain);
 
        if(locallay==0) {
                printf("Sorry, no more than 8 localviews\n");   // XXX error 
@@ -1592,7 +1592,7 @@ static int localview_exec(bContext *C, wmOperator *unused)
        if(v3d->localvd)
                endlocalview(CTX_data_scene(C), CTX_wm_area(C));
        else
-               initlocalview(CTX_data_scene(C), CTX_wm_area(C));
+               initlocalview(CTX_data_main(C), CTX_data_scene(C), CTX_wm_area(C));
        
        ED_area_tag_redraw(CTX_wm_area(C));
        
@@ -1806,7 +1806,7 @@ static int game_engine_exec(bContext *C, wmOperator *op)
 
        //XXX restore_all_scene_cfra(scene_cfra_store);
        set_scene_bg(startscene);
-       //XXX scene_update_for_newframe(G.scene, G.scene->lay);
+       //XXX scene_update_for_newframe(bmain, scene, scene->lay);
        
        ED_area_tag_redraw(CTX_wm_area(C));
 
index 2f8da7c..e71b9bd 100644 (file)
@@ -4403,7 +4403,7 @@ static void set_trans_object_base_flags(bContext *C, TransInfo *t)
        }
 
        /* all recalc flags get flushed to all layers, so a layer flip later on works fine */
-       DAG_scene_flush_update(t->scene, -1, 0);
+       DAG_scene_flush_update(G.main, t->scene, -1, 0);
 
        /* and we store them temporal in base (only used for transform code) */
        /* this because after doing updates, the object->recalc is cleared */
@@ -4481,7 +4481,7 @@ static int count_proportional_objects(TransInfo *t)
        
 
        /* all recalc flags get flushed to all layers, so a layer flip later on works fine */
-       DAG_scene_flush_update(t->scene, -1, 0);
+       DAG_scene_flush_update(G.main, t->scene, -1, 0);
 
        /* and we store them temporal in base (only used for transform code) */
        /* this because after doing updates, the object->recalc is cleared */
index fbf2051..cd2b6a7 100644 (file)
@@ -77,13 +77,14 @@ void ED_editors_init(bContext *C)
 /* frees all editmode stuff */
 void ED_editors_exit(bContext *C)
 {
+       Main *bmain= CTX_data_main(C);
        Scene *sce;
        
        /* frees all editmode undos */
        undo_editmode_clear();
        ED_undo_paint_free();
        
-       for(sce=G.main->scene.first; sce; sce= sce->id.next) {
+       for(sce=bmain->scene.first; sce; sce= sce->id.next) {
                if(sce->obedit) {
                        Object *ob= sce->obedit;
                
index 7e52032..c4ed007 100644 (file)
@@ -97,7 +97,7 @@ static void rna_Boids_reset_deps(Main *bmain, Scene *scene, PointerRNA *ptr)
        else
                DAG_id_flush_update(ptr->id.data, OB_RECALC_DATA|PSYS_RECALC_RESET);
 
-       DAG_scene_sort(scene);
+       DAG_scene_sort(bmain, scene);
 
        WM_main_add_notifier(NC_OBJECT|ND_PARTICLE|NA_EDITED, NULL);
 }
index 1c6c35a..05bddfa 100644 (file)
@@ -214,7 +214,7 @@ static void rna_Constraint_update(Main *bmain, Scene *scene, PointerRNA *ptr)
 
 static void rna_Constraint_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
 {
-       ED_object_constraint_dependency_update(scene, ptr->id.data);
+       ED_object_constraint_dependency_update(bmain, scene, ptr->id.data);
 }
 
 static void rna_Constraint_influence_update(Main *bmain, Scene *scene, PointerRNA *ptr)
index d10aed1..335f591 100644 (file)
@@ -254,7 +254,7 @@ static void rna_Curve_update_data(Main *bmain, Scene *scene, PointerRNA *ptr)
 
 static void rna_Curve_update_deps(Main *bmain, Scene *scene, PointerRNA *ptr)
 {
-       DAG_scene_sort(scene);
+       DAG_scene_sort(bmain, scene);
        rna_Curve_update_data(bmain, scene, ptr);
 }
 
index cd58b65..09f531c 100644 (file)
@@ -110,7 +110,7 @@ static void rna_ChannelDriver_update_data(Main *bmain, Scene *scene, PointerRNA
        driver->flag &= ~DRIVER_FLAG_INVALID;
        
        // TODO: this really needs an update guard...
-       DAG_scene_sort(scene);
+       DAG_scene_sort(bmain, scene);
        DAG_id_flush_update(id, OB_RECALC_OB|OB_RECALC_DATA);
        
        WM_main_add_notifier(NC_SCENE|ND_FRAME, scene);
index 18b0f1c..fa5d703 100644 (file)
@@ -214,7 +214,7 @@ static void rna_Modifier_update(Main *bmain, Scene *scene, PointerRNA *ptr)
 static void rna_Modifier_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
 {
        rna_Modifier_update(bmain, scene, ptr);
-       DAG_scene_sort(scene);
+       DAG_scene_sort(bmain, scene);
 }
 
 static void rna_Smoke_set_type(Main *bmain, Scene *scene, PointerRNA *ptr)
index 4576a75..29666c6 100644 (file)
@@ -196,7 +196,7 @@ void rna_Object_active_shape_update(Main *bmain, Scene *scene, PointerRNA *ptr)
 static void rna_Object_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
 {
        DAG_id_flush_update(ptr->id.data, OB_RECALC_OB);
-       DAG_scene_sort(scene);
+       DAG_scene_sort(bmain, scene);
 }
 
 /* when changing the selection flag the scene needs updating */
@@ -214,7 +214,7 @@ static void rna_Base_select_update(Main *bmain, Scene *scene, PointerRNA *ptr)
        ED_base_object_select(base, mode);
 }
 
-static void rna_Object_layer_update__internal(Scene *scene, Base *base, Object *ob)
+static void rna_Object_layer_update__internal(Main *bmain, Scene *scene, Base *base, Object *ob)
 {
        /* try to avoid scene sort */
        if((ob->lay & scene->lay) && (base->lay & scene->lay)) {
@@ -222,7 +222,7 @@ static void rna_Object_layer_update__internal(Scene *scene, Base *base, Object *
        } else if((ob->lay & scene->lay)==0 && (base->lay & scene->lay)==0) {
                /* pass */
        } else {
-               DAG_scene_sort(scene);
+               DAG_scene_sort(bmain, scene);
        }
 }
 
@@ -237,7 +237,7 @@ static void rna_Object_layer_update(Main *bmain, Scene *scene, PointerRNA *ptr)
        
        SWAP(int, base->lay, ob->lay);
 
-       rna_Object_layer_update__internal(scene, base, ob);
+       rna_Object_layer_update__internal(bmain, scene, base, ob);
        ob->lay= base->lay;
 }
 
@@ -246,7 +246,7 @@ static void rna_Base_layer_update(Main *bmain, Scene *scene, PointerRNA *ptr)
        Base *base= (Base*)ptr->data;
        Object *ob= (Object*)base->object;
 
-       rna_Object_layer_update__internal(scene, base, ob);
+       rna_Object_layer_update__internal(bmain, scene, base, ob);
        ob->lay= base->lay;
 }
 
@@ -1031,12 +1031,12 @@ static int rna_Object_constraint_remove(Object *object, int index)
 
 static ModifierData *rna_Object_modifier_new(Object *object, bContext *C, ReportList *reports, char *name, int type)
 {
-       return ED_object_modifier_add(reports, CTX_data_scene(C), object, name, type);
+       return ED_object_modifier_add(reports, CTX_data_main(C), CTX_data_scene(C), object, name, type);
 }
 
 static void rna_Object_modifier_remove(Object *object, bContext *C, ReportList *reports, ModifierData *md)
 {
-       ED_object_modifier_remove(reports, CTX_data_scene(C), object, md);
+       ED_object_modifier_remove(reports, CTX_data_main(C), CTX_data_scene(C), object, md);
 }
 
 static void rna_Object_boundbox_get(PointerRNA *ptr, float *values)
index d253201..a3a1186 100644 (file)
@@ -510,11 +510,11 @@ static void rna_FieldSettings_shape_update(Main *bmain, Scene *scene, PointerRNA
                if(!md) {
                        if(pd && (pd->shape == PFIELD_SHAPE_SURFACE) && ELEM(pd->forcefield,PFIELD_GUIDE,PFIELD_TEXTURE)==0)
                                if(ELEM4(ob->type, OB_MESH, OB_SURF, OB_FONT, OB_CURVE))
-                                       ED_object_modifier_add(NULL, scene, ob, NULL, eModifierType_Surface);
+                                       ED_object_modifier_add(NULL, bmain, scene, ob, NULL, eModifierType_Surface);
                }
                else {
                        if(!pd || pd->shape != PFIELD_SHAPE_SURFACE)
-                               ED_object_modifier_remove(NULL, scene, ob, md);
+                               ED_object_modifier_remove(NULL, bmain, scene, ob, md);
                }
 
                WM_main_add_notifier(NC_OBJECT|ND_DRAW, ob);
@@ -538,7 +538,7 @@ static void rna_FieldSettings_dependency_update(Main *bmain, Scene *scene, Point
 
                rna_FieldSettings_shape_update(bmain, scene, ptr);
 
-               DAG_scene_sort(scene);
+               DAG_scene_sort(bmain, scene);
 
                if(ob->type == OB_CURVE && ob->pd->forcefield == PFIELD_GUIDE)
                        DAG_id_flush_update(&ob->id, OB_RECALC_ALL);
@@ -582,7 +582,7 @@ static void rna_EffectorWeight_update(Main *bmain, Scene *scene, PointerRNA *ptr
 
 static void rna_EffectorWeight_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
 {
-       DAG_scene_sort(scene);
+       DAG_scene_sort(bmain, scene);
 
        DAG_id_flush_update((ID*)ptr->id.data, OB_RECALC_DATA|PSYS_RECALC_RESET);
 
@@ -640,9 +640,9 @@ static void rna_CollisionSettings_dependency_update(Main *bmain, Scene *scene, P
 
        /* add/remove modifier as needed */
        if(ob->pd->deflect && !md)
-               ED_object_modifier_add(NULL, scene, ob, NULL, eModifierType_Collision);
+               ED_object_modifier_add(NULL, bmain, scene, ob, NULL, eModifierType_Collision);
        else if(!ob->pd->deflect && md)
-               ED_object_modifier_remove(NULL, scene, ob, md);
+               ED_object_modifier_remove(NULL, bmain, scene, ob, md);
 
        WM_main_add_notifier(NC_OBJECT|ND_DRAW, ob);
 }
index 74bc564..4baf81a 100644 (file)
@@ -214,7 +214,7 @@ static void rna_Particle_redo(Main *bmain, Scene *scene, PointerRNA *ptr)
 
 static void rna_Particle_redo_dependency(Main *bmain, Scene *scene, PointerRNA *ptr)
 {
-       DAG_scene_sort(scene);
+       DAG_scene_sort(bmain, scene);
        rna_Particle_redo(bmain, scene, ptr);
 }
 
@@ -266,7 +266,7 @@ static void rna_Particle_target_reset(Main *bmain, Scene *scene, PointerRNA *ptr
                psys->recalc = PSYS_RECALC_RESET;
 
                DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
-               DAG_scene_sort(scene);
+               DAG_scene_sort(bmain, scene);
        }
 
        WM_main_add_notifier(NC_OBJECT|ND_PARTICLE|NA_EDITED, NULL);
index 21ece0a..d05a3d3 100644 (file)
@@ -151,7 +151,7 @@ static void rna_Pose_ik_solver_update(Main *bmain, Scene *scene, PointerRNA *ptr
        bPose *pose = ptr->data;
 
        pose->flag |= POSE_RECALC;      // checks & sorts pose channels
-       DAG_scene_sort(scene);
+       DAG_scene_sort(bmain, scene);
        
        update_pose_constraint_flags(pose);
        
index 966e769..027120b 100644 (file)
@@ -203,7 +203,7 @@ static Base *rna_Scene_object_link(Scene *scene, bContext *C, ReportList *report
 
        ob->recalc |= OB_RECALC_ALL;
 
-       DAG_scene_sort(scene);
+       DAG_scene_sort(G.main, scene);
 
        return base;
 }
@@ -229,8 +229,8 @@ static void rna_Scene_object_unlink(Scene *scene, ReportList *reports, Object *o
        ob->id.us--;
 
        /* needed otherwise the depgraph will contain free'd objects which can crash, see [#20958] */
-       DAG_scene_sort(scene);
-       DAG_ids_flush_update(0);
+       DAG_scene_sort(G.main, scene);
+       DAG_ids_flush_update(G.main, 0);
 
        WM_main_add_notifier(NC_SCENE|ND_OB_ACTIVE, scene);
 }
@@ -838,7 +838,7 @@ static void rna_Scene_use_simplify_update(Main *bmain, Scene *scene, PointerRNA
        for(SETLOOPER(scene, base))
                object_simplify_update(base->object);
        
-       DAG_ids_flush_update(0);
+       DAG_ids_flush_update(bmain, 0);
        WM_main_add_notifier(NC_GEOM|ND_DATA, NULL);
 }
 
index eb48fb6..c3b6051 100644 (file)
 #ifdef RNA_RUNTIME
 
 #include "BKE_animsys.h"
-#include "BKE_scene.h"
-#include "BKE_image.h"
 #include "BKE_depsgraph.h"
+#include "BKE_global.h"
+#include "BKE_image.h"
+#include "BKE_scene.h"
 #include "BKE_writeavi.h"
 
 
@@ -50,11 +51,16 @@ static void rna_Scene_set_frame(Scene *scene, int frame)
 {
        scene->r.cfra= frame;
        CLAMP(scene->r.cfra, MINAFRAME, MAXFRAME);
-       scene_update_for_newframe(scene, (1<<20) - 1);
+       scene_update_for_newframe(G.main, scene, (1<<20) - 1);
 
        WM_main_add_notifier(NC_SCENE|ND_FRAME, scene);
 }
 
+static void rna_Scene_update_tagged(Scene *scene)
+{
+       scene_update_tagged(G.main, scene);
+}
+
 static KeyingSet *rna_Scene_add_keying_set(Scene *sce, ReportList *reports, 
                char name[], int absolute, int insertkey_needed, int insertkey_visual)
 {
@@ -102,7 +108,7 @@ void RNA_api_scene(StructRNA *srna)
        parm= RNA_def_int(func, "frame", 0, MINAFRAME, MAXFRAME, "", "Frame number to set.", MINAFRAME, MAXFRAME);
        RNA_def_property_flag(parm, PROP_REQUIRED);
 
-       func= RNA_def_function(srna, "update", "scene_update_tagged");
+       func= RNA_def_function(srna, "update", "rna_Scene_update_tagged");
        RNA_def_function_ui_description(func, "Update data tagged to be updated from previous access to data or operators.");
 
        /* Add Keying Set */
index cd2297c..f921595 100644 (file)
@@ -55,7 +55,7 @@ static void rna_Smoke_update(Main *bmain, Scene *scene, PointerRNA *ptr)
 static void rna_Smoke_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
 {
        rna_Smoke_update(bmain, scene, ptr);
-       DAG_scene_sort(scene);
+       DAG_scene_sort(bmain, scene);
 }
 
 static void rna_Smoke_reset(Main *bmain, Scene *scene, PointerRNA *ptr)
index 802703d..bc25c98 100644 (file)
 
 struct bNodeTree;
 struct Image;
+struct Main;
 struct NodeBlurData;
 struct Object;
-struct ReportList;
 struct RenderData;
 struct RenderEngine;
 struct RenderEngineType;
 struct RenderResult;
 struct ReportList;
+struct ReportList;
 struct Scene;
 struct SceneRenderLayer;
 
@@ -208,8 +209,8 @@ void RE_init_threadcount(Render *re);
 void RE_TileProcessor(struct Render *re);
 
 /* only RE_NewRender() needed, main Blender render calls */
-void RE_BlenderFrame(struct Render *re, struct Scene *scene, struct SceneRenderLayer *srl, unsigned int lay, int frame);
-void RE_BlenderAnim(struct Render *re, struct Scene *scene, unsigned int lay, int sfra, int efra, int tfra, struct ReportList *reports);
+void RE_BlenderFrame(struct Render *re, struct Main *bmain, struct Scene *scene, struct SceneRenderLayer *srl, unsigned int lay, int frame);
+void RE_BlenderAnim(struct Render *re, struct Main *bmain, struct Scene *scene, unsigned int lay, int sfra, int efra, int tfra, struct ReportList *reports);
 
 /* main preview render call */
 void RE_PreviewRender(struct Render *re, struct Scene *scene);
index c75ae59..b124102 100644 (file)
@@ -55,6 +55,7 @@ struct RenderBuckets;
 struct ObjectInstanceRen;
 struct RayObject;
 struct RayFace;
+struct Main;
 
 #define TABLEINITSIZE 1024
 #define LAMPINITSIZE 256
@@ -170,7 +171,8 @@ struct Render
        /* shadow counter, detect shadow-reuse for shaders */
        int shadowsamplenr[BLENDER_MAX_THREADS];
        
-       /* scene, and its full copy of renderdata and world */
+       /* main, scene, and its full copy of renderdata and world */
+       struct Main *main;
        Scene *scene;
        RenderData r;
        World wrld;
index 436b365..fb941d1 100644 (file)
@@ -65,7 +65,7 @@ void do_lamp_tex(LampRen *la, float *lavec, struct ShadeInput *shi, float *colf,
 void do_volume_tex(struct ShadeInput *shi, float *xyz, int mapto_flag, float *col, float *val);
 
 void init_render_textures(Render *re);
-void end_render_textures(void);
+void end_render_textures(Render *re);
 
 void render_realtime_texture(struct ShadeInput *shi, struct Image *ima);
 
index 6564dd0..45ffcc7 100644 (file)
@@ -3855,12 +3855,12 @@ static void set_material_lightgroups(Render *re)
        if(re->scene->r.scemode & R_PREVIEWBUTS)
                return;
        
-       for(group= G.main->group.first; group; group=group->id.next)
+       for(group= re->main->group.first; group; group=group->id.next)
                group->id.flag |= LIB_DOIT;
        
        /* it's a bit too many loops in loops... but will survive */
        /* hola! materials not in use...? */
-       for(ma= G.main->mat.first; ma; ma=ma->id.next) {
+       for(ma= re->main->mat.first; ma; ma=ma->id.next) {
                if(ma->group && (ma->group->id.flag & LIB_DOIT))
                        add_lightgroup(re, ma->group, ma->mode & MA_GROUP_NOLAY);
        }
@@ -4542,8 +4542,8 @@ void RE_Database_Free(Render *re)
 #if 0  /* radio can be redone better */
        end_radio_render();
 #endif
-       end_render_materials();
-       end_render_textures();
+       end_render_materials(re->main);
+       end_render_textures(re);
        
        free_pointdensities(re);
        
@@ -4868,7 +4868,7 @@ static void database_init_objects(Render *re, unsigned int renderlay, int nolamp
 
        /* objects in groups with OB_RENDER_DUPLI set still need to be created,
         * since they may not be part of the scene */
-       for(group= G.main->group.first; group; group=group->id.next)
+       for(group= re->main->group.first; group; group=group->id.next)
                add_group_render_dupli_obs(re, group, nolamps, onlyselected, actob, timeoffset, renderlay, 0);
 
        /* imat objects has to be done again, since groups can mess it up */
@@ -4916,7 +4916,7 @@ void RE_Database_FromScene(Render *re, Scene *scene, unsigned int lay, int use_c
        
        /* applies changes fully */
        if((re->r.scemode & R_PREVIEWBUTS)==0)
-               scene_update_for_newframe(re->scene, lay);
+               scene_update_for_newframe(re->main, re->scene, lay);
        
        /* if no camera, viewmat should have been set! */
        if(use_camera_view && re->scene->camera) {
@@ -4943,7 +4943,7 @@ void RE_Database_FromScene(Render *re, Scene *scene, unsigned int lay, int use_c
        /* still bad... doing all */
        init_render_textures(re);
        VECCOPY(amb, &re->wrld.ambr);
-       init_render_materials(re->r.mode, amb);
+       init_render_materials(re->main, re->r.mode, amb);
        set_node_shader_lamp_loop(shade_material_loop);
 
        /* MAKE RENDER DATA */
@@ -5070,7 +5070,7 @@ static void database_fromscene_vectors(Render *re, Scene *scene, unsigned int la
        
        /* applies changes fully */
        scene->r.cfra += timeoffset;
-       scene_update_for_newframe(re->scene, lay);
+       scene_update_for_newframe(re->main, re->scene, lay);
        
        /* if no camera, viewmat should have been set! */
        if(re->scene->camera) {
@@ -5626,7 +5626,7 @@ void RE_Database_Baking(Render *re, Scene *scene, unsigned int lay, int type, Ob
        init_render_textures(re);
        
        VECCOPY(amb, &re->wrld.ambr);
-       init_render_materials(re->r.mode, amb);
+       init_render_materials(re->main, re->r.mode, amb);
        
        set_node_shader_lamp_loop(shade_material_loop);
        
index 1accb0f..8977bc7 100644 (file)
@@ -46,7 +46,6 @@
 
 #include "BKE_library.h"
 #include "BKE_main.h"
-#include "BKE_global.h"
 #include "BKE_image.h"   // BKE_write_ibuf 
 #include "BKE_texture.h"
 #include "BKE_utildefines.h"
@@ -508,7 +507,7 @@ void make_envmaps(Render *re)
        
        /* 5 = hardcoded max recursion level */
        while(depth<5) {
-               tex= G.main->tex.first;
+               tex= re->main->tex.first;
                while(tex) {
                        if(tex->id.us && tex->type==TEX_ENVMAP) {
                                if(tex->env && tex->env->object) {
index 6493231..0db1bdc 100644 (file)
@@ -2164,7 +2164,7 @@ static void tag_scenes_for_render(Render *re)
        bNode *node;
        Scene *sce;
        
-       for(sce= G.main->scene.first; sce; sce= sce->id.next)
+       for(sce= re->main->scene.first; sce; sce= sce->id.next)
                sce->id.flag &= ~LIB_DOIT;
        
        re->scene->id.flag |= LIB_DOIT;
@@ -2319,7 +2319,7 @@ void RE_MergeFullSample(Render *re, Scene *sce, bNodeTree *ntree)
        /* first call RE_ReadRenderResult on every renderlayer scene. this creates Render structs */
        
        /* tag scenes unread */
-       for(scene= G.main->scene.first; scene; scene= scene->id.next) 
+       for(scene= re->main->scene.first; scene; scene= scene->id.next) 
                scene->id.flag |= LIB_DOIT;
        
        for(node= ntree->nodes.first; node; node= node->next) {
@@ -2394,7 +2394,7 @@ static void do_render_composite_fields_blur_3d(Render *re)
                                R.stats_draw= re->stats_draw;
                                
                                if (update_newframe)
-                                       scene_update_for_newframe(re->scene, re->lay);
+                                       scene_update_for_newframe(re->main, re->scene, re->lay);
                                
                                if(re->r.scemode & R_FULL_SAMPLE) 
                                        do_merge_fullsample(re, ntree);
@@ -2457,7 +2457,7 @@ static void do_render_seq(Render * re)
 
        if(recurs_depth==0) {
                /* otherwise sequencer animation isnt updated */
-               BKE_animsys_evaluate_all_animation(G.main, (float)cfra); // XXX, was BKE_curframe(re->scene)
+               BKE_animsys_evaluate_all_animation(re->main, (float)cfra); // XXX, was BKE_curframe(re->scene)
        }
 
        recurs_depth++;
@@ -2692,7 +2692,7 @@ static void update_physics_cache(Render *re, Scene *scene, int anim_init)
        BKE_ptcache_make_cache(&baker);
 }
 /* evaluating scene options for general Blender render */
-static int render_initialize_from_scene(Render *re, Scene *scene, SceneRenderLayer *srl, unsigned int lay, int anim, int anim_init)
+static int render_initialize_from_main(Render *re, Main *bmain, Scene *scene, SceneRenderLayer *srl, unsigned int lay, int anim, int anim_init)
 {
        int winx, winy;
        rcti disprect;
@@ -2718,6 +2718,7 @@ static int render_initialize_from_scene(Render *re, Scene *scene, SceneRenderLay
                disprect.ymax= winy;
        }
        
+       re->main= bmain;
        re->scene= scene;
        re->lay= lay;
        
@@ -2760,14 +2761,14 @@ static int render_initialize_from_scene(Render *re, Scene *scene, SceneRenderLay
 }
 
 /* general Blender frame render call */
-void RE_BlenderFrame(Render *re, Scene *scene, SceneRenderLayer *srl, unsigned int lay, int frame)
+void RE_BlenderFrame(Render *re, Main *bmain, Scene *scene, SceneRenderLayer *srl, unsigned int lay, int frame)
 {
        /* ugly global still... is to prevent preview events and signal subsurfs etc to make full resol */
        G.rendering= 1;
        
        scene->r.cfra= frame;
        
-       if(render_initialize_from_scene(re, scene, srl, lay, 0, 0)) {
+       if(render_initialize_from_main(re, bmain, scene, srl, lay, 0, 0)) {
                MEM_reset_peak_memory();
                do_render_all_options(re);
        }
@@ -2863,14 +2864,14 @@ static int do_write_image_or_movie(Render *re, Scene *scene, bMovieHandle *mh, R
 }
 
 /* saves images to disk */
-void RE_BlenderAnim(Render *re, Scene *scene, unsigned int lay, int sfra, int efra, int tfra, ReportList *reports)
+void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, unsigned int lay, int sfra, int efra, int tfra, ReportList *reports)
 {
        bMovieHandle *mh= BKE_get_movie_handle(scene->r.imtype);
        int cfrao= scene->r.cfra;
        int nfra;
        
        /* do not fully call for each frame, it initializes & pops output window */
-       if(!render_initialize_from_scene(re, scene, NULL, lay, 0, 1))
+       if(!render_initialize_from_main(re, bmain, scene, NULL, lay, 0, 1))
                return;
        
        /* ugly global still... is to prevent renderwin events and signal subsurfs etc to make full resol */
@@ -2903,7 +2904,7 @@ void RE_BlenderAnim(Render *re, Scene *scene, unsigned int lay, int sfra, int ef
                        char name[FILE_MAX];
                        
                        /* only border now, todo: camera lens. (ton) */
-                       render_initialize_from_scene(re, scene, NULL, lay, 1, 0);
+                       render_initialize_from_main(re, bmain, scene, NULL, lay, 1, 0);
 
                        if(nfra!=scene->r.cfra) {
                                /*
@@ -2918,7 +2919,7 @@ void RE_BlenderAnim(Render *re, Scene *scene, unsigned int lay, int sfra, int ef
                                else
                                        updatelay= re->lay;
 
-                               scene_update_for_newframe(scene, updatelay);
+                               scene_update_for_newframe(bmain, scene, updatelay);
                                continue;
                        }
                        else
index 32ae3ba..a09c16b 100644 (file)
@@ -282,7 +282,7 @@ void make_pointdensities(Render *re)
        re->i.infostr= "Caching Point Densities";
        re->stats_draw(re->sdh, &re->i);
 
-       for (tex= G.main->tex.first; tex; tex= tex->id.next) {
+       for (tex= re->main->tex.first; tex; tex= tex->id.next) {
                if(tex->id.us && tex->type==TEX_POINTDENSITY) {
                        cache_pointdensity(re, tex);
                }
@@ -299,7 +299,7 @@ void free_pointdensities(Render *re)
        if(re->scene->r.scemode & R_PREVIEWBUTS)
                return;
        
-       for (tex= G.main->tex.first; tex; tex= tex->id.next) {
+       for (tex= re->main->tex.first; tex; tex= tex->id.next) {
                if(tex->id.us && tex->type==TEX_POINTDENSITY) {
                        free_pointdensity(re, tex);
                }
index aa28540..e8c95a3 100644 (file)
@@ -56,7 +56,6 @@
 #include "DNA_material_types.h"
 
 #include "BKE_colortools.h"
-#include "BKE_global.h"
 #include "BKE_main.h"
 #include "BKE_material.h"
 #include "BKE_node.h"
@@ -993,7 +992,7 @@ void make_sss_tree(Render *re)
        re->i.infostr= "SSS preprocessing";
        re->stats_draw(re->sdh, &re->i);
        
-       for(mat= G.main->mat.first; mat; mat= mat->id.next)
+       for(mat= re->main->mat.first; mat; mat= mat->id.next)
                if(mat->id.us && (mat->flag & MA_IS_USED) && (mat->sss_flag & MA_DIFF_SSS))
                        sss_create_tree_mat(re, mat);
 }
index 658748b..60565d0 100644 (file)
@@ -131,7 +131,7 @@ void init_render_textures(Render *re)
 {
        Tex *tex;
        
-       tex= G.main->tex.first;
+       tex= re->main->tex.first;
        while(tex) {
                if(tex->id.us) init_render_texture(re, tex);
                tex= tex->id.next;
@@ -144,10 +144,10 @@ void end_render_texture(Tex *tex)
                ntreeEndExecTree(tex->nodetree);
 }
 
-void end_render_textures(void)
+void end_render_textures(Render *re)
 {
        Tex *tex;
-       for(tex= G.main->tex.first; tex; tex= tex->id.next)
+       for(tex= re->main->tex.first; tex; tex= tex->id.next)
                if(tex->id.us)
                        end_render_texture(tex);
 }
index 64ba206..076d635 100644 (file)
@@ -39,7 +39,6 @@
 #include "IMB_imbuf.h"
 #include "IMB_imbuf_types.h"
 
-#include "BKE_global.h"
 #include "BKE_image.h"
 #include "BKE_main.h"
 #include "BKE_modifier.h"
@@ -318,7 +317,7 @@ void make_voxeldata(struct Render *re)
        re->stats_draw(re->sdh, &re->i);
        
        /* XXX: should be doing only textures used in this render */
-       for (tex= G.main->tex.first; tex; tex= tex->id.next) {
+       for (tex= re->main->tex.first; tex; tex= tex->id.next) {
                if(tex->id.us && tex->type==TEX_VOXELDATA) {
                        cache_voxeldata(re, tex);
                }
index 63dcda3..8677009 100644 (file)
@@ -296,7 +296,7 @@ void wm_event_do_notifiers(bContext *C)
                /* XXX make lock in future, or separated derivedmesh users in scene */
                if(!G.rendering)
                        /* depsgraph & animation: update tagged datablocks */
-                       scene_update_tagged(win->screen->scene);
+                       scene_update_tagged(CTX_data_main(C), win->screen->scene);
        }
 
        CTX_wm_window_set(C, NULL);
index 04f5175..e2293f7 100644 (file)
@@ -314,7 +314,7 @@ void WM_read_file(bContext *C, char *name, ReportList *reports)
                CTX_wm_window_set(C, CTX_wm_manager(C)->windows.first);
 
                ED_editors_init(C);
-               DAG_on_load_update();
+               DAG_on_load_update(CTX_data_main(C));
 
 #ifndef DISABLE_PYTHON
                /* run any texts that were loaded in and flagged as modules */
@@ -394,7 +394,7 @@ int WM_read_homefile(bContext *C, wmOperator *op)
        BKE_write_undo(C, "original");  /* save current state */
 
        ED_editors_init(C);
-       DAG_on_load_update();
+       DAG_on_load_update(CTX_data_main(C));
        
        WM_event_add_notifier(C, NC_WM|ND_FILEREAD, NULL);
        CTX_wm_window_set(C, NULL); /* exits queues */
index 9fff731..2ab0a05 100644 (file)
@@ -1629,8 +1629,8 @@ static int wm_link_append_exec(bContext *C, wmOperator *op)
        flag_all_listbases_ids(LIB_PRE_EXISTING, 0);
 
        /* recreate dependency graph to include new objects */
-       DAG_scene_sort(scene);
-       DAG_ids_flush_update(0);
+       DAG_scene_sort(bmain, scene);
+       DAG_ids_flush_update(bmain, 0);
 
        BLO_blendhandle_close(bh);
 
@@ -2954,15 +2954,17 @@ static int redraw_timer_exec(bContext *C, wmOperator *op)
                        redraw_timer_window_swap(C);
                }
                else if (type==4) {
+                       Main *bmain= CTX_data_main(C);
                        Scene *scene= CTX_data_scene(C);
                        
                        if(a & 1) scene->r.cfra--;
                        else scene->r.cfra++;
-                       scene_update_for_newframe(scene, scene->lay);
+                       scene_update_for_newframe(bmain, scene, scene->lay);
                }
                else if (type==5) {
 
                        /* play anim, return on same frame as started with */
+                       Main *bmain= CTX_data_main(C);
                        Scene *scene= CTX_data_scene(C);
                        int tot= (scene->r.efra - scene->r.sfra) + 1;
 
@@ -2972,7 +2974,7 @@ static int redraw_timer_exec(bContext *C, wmOperator *op)
                                if(scene->r.cfra > scene->r.efra)
                                        scene->r.cfra= scene->r.sfra;
 
-                               scene_update_for_newframe(scene, scene->lay);
+                               scene_update_for_newframe(bmain, scene, scene->lay);
                                redraw_timer_window_swap(C);
                        }
                }
index 283511e..132c427 100644 (file)
@@ -678,6 +678,7 @@ static int render_frame(int argc, char **argv, void *data)
 {
        bContext *C = data;
        if (CTX_data_scene(C)) {
+               Main *bmain= CTX_data_main(C);
                Scene *scene= CTX_data_scene(C);
 
                if (argc > 1) {
@@ -701,7 +702,7 @@ static int render_frame(int argc, char **argv, void *data)
 
                        frame = MIN2(MAXFRAME, MAX2(MINAFRAME, frame));
 
-                       RE_BlenderAnim(re, scene, scene->lay, frame, frame, scene->r.frame_step, &reports);
+                       RE_BlenderAnim(re, bmain, scene, scene->lay, frame, frame, scene->r.frame_step, &reports);
                        return 1;
                } else {
                        printf("\nError: frame number must follow '-f / --render-frame'.\n");
@@ -717,11 +718,12 @@ static int render_animation(int argc, char **argv, void *data)
 {
        bContext *C = data;
        if (CTX_data_scene(C)) {
+               Main *bmain= CTX_data_main(C);
                Scene *scene= CTX_data_scene(C);
                Render *re= RE_NewRender(scene->id.name);
                ReportList reports;
                BKE_reports_init(&reports, RPT_PRINT);
-               RE_BlenderAnim(re, scene, scene->lay, scene->r.sfra, scene->r.efra, scene->r.frame_step, &reports);
+               RE_BlenderAnim(re, bmain, scene, scene->lay, scene->r.sfra, scene->r.efra, scene->r.frame_step, &reports);
        } else {
                printf("\nError: no blend loaded. cannot use '-a'.\n");
        }