forked from bartvdbraak/blender
2.5: code changes to reduce the usage of G.main and pass it along
or get it from the context instead.
This commit is contained in:
parent
c34f831757
commit
5fa7d1c1b4
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
|
@ -70,15 +70,16 @@
|
||||
#define PTCACHE_READ_OLD 3
|
||||
|
||||
/* Structs */
|
||||
struct Object;
|
||||
struct Scene;
|
||||
struct SoftBody;
|
||||
struct ParticleSystem;
|
||||
struct ParticleKey;
|
||||
struct ClothModifierData;
|
||||
struct SmokeModifierData;
|
||||
struct PointCache;
|
||||
struct ListBase;
|
||||
struct Main;
|
||||
struct Object;
|
||||
struct ParticleKey;
|
||||
struct ParticleSystem;
|
||||
struct PointCache;
|
||||
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);
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
@ -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 */
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
|
@ -28,24 +28,25 @@
|
||||
#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);
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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 */
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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 */
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
/* ********************************************** */
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
@ -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) {
|
||||
|
@ -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");
|
||||
}
|
||||
|
@ -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 );
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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 {
|
||||
|
@ -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,
|
||||
|
@ -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) {
|
||||
|
@ -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) */
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
|
@ -45,14 +45,15 @@
|
||||
|
||||
#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;
|
||||
|
@ -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));
|
||||
|
||||
|
@ -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 */
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -39,9 +39,10 @@
|
||||
#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 */
|
||||
|
@ -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)
|
||||
|
@ -37,14 +37,15 @@
|
||||
|
||||
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);
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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 */
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user