2.5: blenloader/ cleaning:
- removed context usage, should not be in this module - remove G.main usage, now is passed along - still some globals in use here, goal is to get rid of those too, so that it's possible to load/save blendfiles without having to think about some global state.
This commit is contained in:
parent
62a03ea1b6
commit
92b1d3f946
@ -486,7 +486,7 @@ int BKE_read_file_from_memfile(bContext *C, MemFile *memfile)
|
||||
|
||||
BKE_reports_init(&reports, RPT_STORE);
|
||||
|
||||
bfd= BLO_read_from_memfile(G.sce, memfile, &reports);
|
||||
bfd= BLO_read_from_memfile(CTX_data_main(C), G.sce, memfile, &reports);
|
||||
if (bfd) {
|
||||
setup_app_data(C, bfd, "<memory1>");
|
||||
} else {
|
||||
@ -594,7 +594,7 @@ void BKE_write_undo(bContext *C, char *name)
|
||||
BLI_make_file_string("/", tstr, btempdir, numstr);
|
||||
|
||||
BKE_reports_init(&reports, 0);
|
||||
success= BLO_write_file(C, tstr, G.fileflags, &reports);
|
||||
success= BLO_write_file(CTX_data_main(C), tstr, G.fileflags, &reports);
|
||||
BKE_reports_clear(&reports);
|
||||
|
||||
strcpy(curundo->str, tstr);
|
||||
@ -607,7 +607,7 @@ void BKE_write_undo(bContext *C, char *name)
|
||||
|
||||
memused= MEM_get_memory_in_use();
|
||||
BKE_reports_init(&reports, 0);
|
||||
success= BLO_write_file_mem(C, prevfile, &curundo->memfile, G.fileflags, &reports);
|
||||
success= BLO_write_file_mem(CTX_data_main(C), prevfile, &curundo->memfile, G.fileflags, &reports);
|
||||
BKE_reports_clear(&reports);
|
||||
curundo->undosize= MEM_get_memory_in_use() - memused;
|
||||
}
|
||||
|
@ -95,9 +95,10 @@ BlendFileData* BLO_read_from_file (char *file, struct ReportList *reports);
|
||||
BlendFileData* BLO_read_from_memory(void *mem, int memsize, struct ReportList *reports);
|
||||
|
||||
/**
|
||||
* oldmain is old main, from which we will keep libraries, images, ..
|
||||
* file name is current file, only for retrieving library data */
|
||||
|
||||
BlendFileData *BLO_read_from_memfile(const char *filename, struct MemFile *memfile, struct ReportList *reports);
|
||||
BlendFileData *BLO_read_from_memfile(struct Main *oldmain, const char *filename, struct MemFile *memfile, struct ReportList *reports);
|
||||
|
||||
/**
|
||||
* Free's a BlendFileData structure and _all_ the
|
||||
@ -199,10 +200,10 @@ BLO_blendhandle_close(
|
||||
char *BLO_gethome(void);
|
||||
int BLO_has_bfile_extension(char *str);
|
||||
|
||||
void BLO_library_append(struct SpaceFile *sfile, char *dir, int idcode, struct Scene *scene);
|
||||
void BLO_library_append(struct SpaceFile *sfile, char *dir, int idcode, struct Main *mainvar, struct Scene *scene);
|
||||
void BLO_library_append_(BlendHandle **libfiledata, struct direntry* filelist, int totfile,
|
||||
char *dir, char* file, short flag, int idcode, struct Scene *scene);
|
||||
void BLO_script_library_append(BlendHandle **bh, char *dir, char *name, int idcode, short flag, struct Scene *scene);
|
||||
char *dir, char* file, short flag, int idcode, struct Main *mainvar, struct Scene *scene);
|
||||
void BLO_script_library_append(BlendHandle **bh, char *dir, char *name, int idcode, short flag, struct Main *mainvar, struct Scene *scene);
|
||||
|
||||
BlendFileData* blo_read_blendafterruntime(int file, char *name, int actualsize, struct ReportList *reports);
|
||||
|
||||
|
@ -32,13 +32,13 @@
|
||||
#define BLO_WRITEFILE_H
|
||||
|
||||
struct MemFile;
|
||||
struct bContext;
|
||||
struct Main;
|
||||
struct ReportList;
|
||||
|
||||
extern int BLO_write_file(struct bContext *C, char *dir, int write_flags, struct ReportList *reports);
|
||||
extern int BLO_write_file_mem(struct bContext *C, struct MemFile *compare, struct MemFile *current,
|
||||
extern int BLO_write_file(struct Main *mainvar, char *dir, int write_flags, struct ReportList *reports);
|
||||
extern int BLO_write_file_mem(struct Main *mainvar, struct MemFile *compare, struct MemFile *current,
|
||||
int write_flags, struct ReportList *reports);
|
||||
extern int BLO_write_runtime(struct bContext *C, char *file, char *exename, struct ReportList *reports);
|
||||
extern int BLO_write_runtime(struct Main *mainvar, char *file, char *exename, struct ReportList *reports);
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -53,7 +53,6 @@
|
||||
#include "BKE_utildefines.h" // for ENDB
|
||||
|
||||
#include "BKE_main.h"
|
||||
#include "BKE_global.h"
|
||||
#include "BKE_library.h" // for free_main
|
||||
#include "BKE_report.h"
|
||||
|
||||
@ -360,7 +359,7 @@ BlendFileData *BLO_read_from_memory(void *mem, int memsize, ReportList *reports)
|
||||
return bfd;
|
||||
}
|
||||
|
||||
BlendFileData *BLO_read_from_memfile(const char *filename, MemFile *memfile, ReportList *reports)
|
||||
BlendFileData *BLO_read_from_memfile(Main *oldmain, const char *filename, MemFile *memfile, ReportList *reports)
|
||||
{
|
||||
BlendFileData *bfd = NULL;
|
||||
FileData *fd;
|
||||
@ -370,16 +369,16 @@ BlendFileData *BLO_read_from_memfile(const char *filename, MemFile *memfile, Rep
|
||||
if (fd) {
|
||||
strcpy(fd->filename, filename);
|
||||
|
||||
/* clear ob->proxy_from pointers in G.main */
|
||||
blo_clear_proxy_pointers_from_lib(fd);
|
||||
/* clear ob->proxy_from pointers in old main */
|
||||
blo_clear_proxy_pointers_from_lib(fd, oldmain);
|
||||
|
||||
/* separate libraries from G.main */
|
||||
blo_split_main(&mainlist, G.main);
|
||||
/* separate libraries from old main */
|
||||
blo_split_main(&mainlist, oldmain);
|
||||
/* add the library pointers in oldmap lookup */
|
||||
blo_add_library_pointer_map(&mainlist, fd);
|
||||
|
||||
/* makes lookup of existing images in G.main */
|
||||
blo_make_image_pointer_map(fd);
|
||||
/* makes lookup of existing images in old main */
|
||||
blo_make_image_pointer_map(fd, oldmain);
|
||||
|
||||
bfd= blo_read_file_internal(fd, reports);
|
||||
if (bfd) {
|
||||
@ -388,17 +387,17 @@ BlendFileData *BLO_read_from_memfile(const char *filename, MemFile *memfile, Rep
|
||||
}
|
||||
|
||||
/* ensures relinked images are not freed */
|
||||
blo_end_image_pointer_map(fd);
|
||||
blo_end_image_pointer_map(fd, oldmain);
|
||||
|
||||
/* move libraries from G.main to new main */
|
||||
/* move libraries from old main to new main */
|
||||
if(bfd && mainlist.first!=mainlist.last) {
|
||||
|
||||
/* Library structs themselves */
|
||||
bfd->main->library= G.main->library;
|
||||
G.main->library.first= G.main->library.last= NULL;
|
||||
bfd->main->library= oldmain->library;
|
||||
oldmain->library.first= oldmain->library.last= NULL;
|
||||
|
||||
/* add the Library mainlist to the new main */
|
||||
BLI_remlink(&mainlist, G.main);
|
||||
BLI_remlink(&mainlist, oldmain);
|
||||
BLI_addhead(&mainlist, bfd->main);
|
||||
}
|
||||
blo_join_main(&mainlist);
|
||||
|
@ -1123,20 +1123,19 @@ static void change_idid_adr(ListBase *mainlist, FileData *basefd, void *old, voi
|
||||
* to clear that pointer before reading the undo memfile since
|
||||
* the object might be removed, it is set again in reading
|
||||
* if the local object still exists */
|
||||
void blo_clear_proxy_pointers_from_lib(FileData *fd)
|
||||
void blo_clear_proxy_pointers_from_lib(FileData *fd, Main *oldmain)
|
||||
{
|
||||
Object *ob= G.main->object.first;
|
||||
Object *ob= oldmain->object.first;
|
||||
|
||||
for(;ob; ob= ob->id.next)
|
||||
if(ob->id.lib)
|
||||
ob->proxy_from= NULL;
|
||||
}
|
||||
|
||||
/* assumed; G.main still exists */
|
||||
void blo_make_image_pointer_map(FileData *fd)
|
||||
void blo_make_image_pointer_map(FileData *fd, Main *oldmain)
|
||||
{
|
||||
Image *ima= G.main->image.first;
|
||||
Scene *sce= G.main->scene.first;
|
||||
Image *ima= oldmain->image.first;
|
||||
Scene *sce= oldmain->scene.first;
|
||||
|
||||
fd->imamap= oldnewmap_new();
|
||||
|
||||
@ -1156,13 +1155,13 @@ void blo_make_image_pointer_map(FileData *fd)
|
||||
}
|
||||
}
|
||||
|
||||
/* set G.main image ibufs to zero if it has been restored */
|
||||
/* this works because freeing G.main only happens after this call */
|
||||
void blo_end_image_pointer_map(FileData *fd)
|
||||
/* set old main image ibufs to zero if it has been restored */
|
||||
/* this works because freeing old main only happens after this call */
|
||||
void blo_end_image_pointer_map(FileData *fd, Main *oldmain)
|
||||
{
|
||||
OldNew *entry= fd->imamap->entries;
|
||||
Image *ima= G.main->image.first;
|
||||
Scene *sce= G.main->scene.first;
|
||||
Image *ima= oldmain->image.first;
|
||||
Scene *sce= oldmain->scene.first;
|
||||
int i;
|
||||
|
||||
/* used entries were restored, so we put them to zero */
|
||||
@ -9246,24 +9245,24 @@ static void expand_main(FileData *fd, Main *mainvar)
|
||||
}
|
||||
}
|
||||
|
||||
static int object_in_any_scene(Object *ob)
|
||||
static int object_in_any_scene(Main *mainvar, Object *ob)
|
||||
{
|
||||
Scene *sce;
|
||||
|
||||
for(sce= G.main->scene.first; sce; sce= sce->id.next)
|
||||
for(sce= mainvar->scene.first; sce; sce= sce->id.next)
|
||||
if(object_in_scene(ob, sce))
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* when *lib set, it also does objects that were in the appended group */
|
||||
static void give_base_to_objects(Scene *sce, ListBase *lb, Library *lib, int is_group_append)
|
||||
static void give_base_to_objects(Main *mainvar, Scene *sce, Library *lib, int is_group_append)
|
||||
{
|
||||
Object *ob;
|
||||
Base *base;
|
||||
|
||||
/* give all objects which are LIB_INDIRECT a base, or for a group when *lib has been set */
|
||||
for(ob= lb->first; ob; ob= ob->id.next) {
|
||||
for(ob= mainvar->object.first; ob; ob= ob->id.next) {
|
||||
|
||||
if( ob->id.flag & LIB_INDIRECT ) {
|
||||
|
||||
@ -9279,7 +9278,7 @@ static void give_base_to_objects(Scene *sce, ListBase *lb, Library *lib, int is_
|
||||
if(ob->id.us==0)
|
||||
do_it= 1;
|
||||
else if(ob->id.us==1 && lib)
|
||||
if(ob->id.lib==lib && (ob->flag & OB_FROMGROUP) && object_in_any_scene(ob)==0)
|
||||
if(ob->id.lib==lib && (ob->flag & OB_FROMGROUP) && object_in_any_scene(mainvar, ob)==0)
|
||||
do_it= 1;
|
||||
|
||||
if(do_it) {
|
||||
@ -9380,14 +9379,14 @@ static void append_id_part(FileData *fd, Main *mainvar, ID *id, ID **id_r)
|
||||
|
||||
/* common routine to append/link something from a library */
|
||||
|
||||
static Library* library_append(Scene *scene, char* file, char *dir, int idcode,
|
||||
static Library* library_append(Main *mainvar, Scene *scene, char* file, char *dir, int idcode,
|
||||
int totsel, FileData **fd, struct direntry* filelist, int totfile, short flag)
|
||||
{
|
||||
Main *mainl;
|
||||
Library *curlib;
|
||||
|
||||
/* make mains */
|
||||
blo_split_main(&(*fd)->mainlist, G.main);
|
||||
blo_split_main(&(*fd)->mainlist, mainvar);
|
||||
|
||||
/* which one do we need? */
|
||||
mainl = blo_find_main(*fd, &(*fd)->mainlist, dir, G.sce);
|
||||
@ -9424,21 +9423,21 @@ static Library* library_append(Scene *scene, char* file, char *dir, int idcode,
|
||||
}
|
||||
|
||||
blo_join_main(&(*fd)->mainlist);
|
||||
G.main= (*fd)->mainlist.first;
|
||||
mainvar= (*fd)->mainlist.first;
|
||||
|
||||
lib_link_all(*fd, G.main);
|
||||
lib_verify_nodetree(G.main, 0);
|
||||
fix_relpaths_library(G.sce, G.main); /* make all relative paths, relative to the open blend file */
|
||||
lib_link_all(*fd, mainvar);
|
||||
lib_verify_nodetree(mainvar, 0);
|
||||
fix_relpaths_library(G.sce, mainvar); /* make all relative paths, relative to the open blend file */
|
||||
|
||||
/* give a base to loose objects. If group append, do it for objects too */
|
||||
if(idcode==ID_GR) {
|
||||
if (flag & FILE_LINK) {
|
||||
give_base_to_objects(scene, &(G.main->object), NULL, 0);
|
||||
give_base_to_objects(mainvar, scene, NULL, 0);
|
||||
} else {
|
||||
give_base_to_objects(scene, &(G.main->object), curlib, 1);
|
||||
give_base_to_objects(mainvar, scene, curlib, 1);
|
||||
}
|
||||
} else {
|
||||
give_base_to_objects(scene, &(G.main->object), NULL, 0);
|
||||
give_base_to_objects(mainvar, scene, NULL, 0);
|
||||
}
|
||||
/* has been removed... erm, why? s..ton) */
|
||||
/* 20040907: looks like they are give base already in append_named_part(); -Nathan L */
|
||||
@ -9459,10 +9458,10 @@ static Library* library_append(Scene *scene, char* file, char *dir, int idcode,
|
||||
/* this should probably be moved into the Python code anyway */
|
||||
|
||||
void BLO_script_library_append(BlendHandle **bh, char *dir, char *name,
|
||||
int idcode, short flag, Scene *scene )
|
||||
int idcode, short flag, Main *mainvar, Scene *scene)
|
||||
{
|
||||
/* try to append the requested object */
|
||||
library_append(scene, name, dir, idcode, 0, (FileData **)bh, NULL, 0, flag );
|
||||
library_append(mainvar, scene, name, dir, idcode, 0, (FileData **)bh, NULL, 0, flag );
|
||||
|
||||
/* do we need to do this? */
|
||||
DAG_scene_sort(scene);
|
||||
@ -9470,14 +9469,14 @@ void BLO_script_library_append(BlendHandle **bh, char *dir, char *name,
|
||||
|
||||
/* append to scene */
|
||||
/* dir is a full path */
|
||||
void BLO_library_append(SpaceFile *sfile, char *dir, int idcode, Scene *scene)
|
||||
void BLO_library_append(SpaceFile *sfile, char *dir, int idcode, Main *mainvar, Scene *scene)
|
||||
{
|
||||
BLO_library_append_(&sfile->libfiledata, sfile->filelist, sfile->totfile,
|
||||
dir, sfile->file, sfile->flag, idcode, scene);
|
||||
dir, sfile->file, sfile->flag, idcode, mainvar, scene);
|
||||
}
|
||||
|
||||
void BLO_library_append_(BlendHandle** libfiledata, struct direntry* filelist, int totfile,
|
||||
char *dir, char* file, short flag, int idcode, Scene *scene)
|
||||
char *dir, char* file, short flag, int idcode, Main *mainvar, Scene *scene)
|
||||
{
|
||||
Library *curlib;
|
||||
Base *centerbase;
|
||||
@ -9511,7 +9510,7 @@ void BLO_library_append_(BlendHandle** libfiledata, struct direntry* filelist, i
|
||||
|
||||
if(flag & FILE_AUTOSELECT) scene_deselect_all(scene);
|
||||
|
||||
curlib = library_append(scene, file, dir, idcode, totsel, (FileData**) libfiledata, filelist, totfile,flag );
|
||||
curlib = library_append(mainvar, scene, file, dir, idcode, totsel, (FileData**) libfiledata, filelist, totfile,flag );
|
||||
|
||||
/* when not linking (appending)... */
|
||||
if((flag & FILE_LINK)==0) {
|
||||
|
@ -113,9 +113,9 @@ FileData *blo_openblenderfile( char *name, struct ReportList *reports);
|
||||
FileData *blo_openblendermemory( void *buffer, int buffersize, struct ReportList *reports);
|
||||
FileData *blo_openblendermemfile(struct MemFile *memfile, struct ReportList *reports);
|
||||
|
||||
void blo_clear_proxy_pointers_from_lib(FileData *fd);
|
||||
void blo_make_image_pointer_map(FileData *fd);
|
||||
void blo_end_image_pointer_map(FileData *fd);
|
||||
void blo_clear_proxy_pointers_from_lib(FileData *fd, Main *oldmain);
|
||||
void blo_make_image_pointer_map(FileData *fd, Main *oldmain);
|
||||
void blo_end_image_pointer_map(FileData *fd, Main *oldmain);
|
||||
void blo_add_library_pointer_map(ListBase *mainlist, FileData *fd);
|
||||
|
||||
void blo_freefiledata( FileData *fd);
|
||||
|
@ -145,14 +145,13 @@ Any case: direct data is ALWAYS after the lib block
|
||||
|
||||
#include "BKE_action.h"
|
||||
#include "BKE_blender.h"
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_cloth.h"
|
||||
#include "BKE_curve.h"
|
||||
#include "BKE_customdata.h"
|
||||
#include "BKE_constraint.h"
|
||||
#include "BKE_global.h" // for G
|
||||
#include "BKE_library.h" // for set_listbasepointers
|
||||
#include "BKE_main.h" // G.main
|
||||
#include "BKE_main.h"
|
||||
#include "BKE_node.h"
|
||||
#include "BKE_packedFile.h" // for packAll
|
||||
#include "BKE_report.h"
|
||||
@ -480,14 +479,29 @@ static void write_scriptlink(WriteData *wd, ScriptLink *slink)
|
||||
writedata(wd, DATA, sizeof(short)*slink->totscript, slink->flag);
|
||||
}
|
||||
|
||||
static void write_renderinfo(bContext *C, WriteData *wd) /* for renderdeamon */
|
||||
static void current_screen_compat(Main *mainvar, bScreen **screen)
|
||||
{
|
||||
wmWindowManager *wm;
|
||||
wmWindow *window;
|
||||
|
||||
/* find a global current screen in the first open window, to have
|
||||
* a reasonable default for reading in older versions */
|
||||
wm= mainvar->wm.first;
|
||||
window= (wm)? wm->windows.first: NULL;
|
||||
*screen= (window)? window->screen: NULL;
|
||||
}
|
||||
|
||||
static void write_renderinfo(WriteData *wd, Main *mainvar) /* for renderdeamon */
|
||||
{
|
||||
bScreen *curscreen;
|
||||
Scene *sce;
|
||||
int data[8];
|
||||
|
||||
sce= CTX_data_main(C)->scene.first;
|
||||
current_screen_compat(mainvar, &curscreen);
|
||||
|
||||
sce= mainvar->scene.first;
|
||||
while(sce) {
|
||||
if(sce->id.lib==0 && ( sce==CTX_data_scene(C) || (sce->r.scemode & R_BG_RENDER)) ) {
|
||||
if(sce->id.lib==0 && ( sce==G.scene || (sce->r.scemode & R_BG_RENDER)) ) {
|
||||
data[0]= sce->r.sfra;
|
||||
data[1]= sce->r.efra;
|
||||
|
||||
@ -2018,14 +2032,17 @@ static void write_scripts(WriteData *wd, ListBase *idbase)
|
||||
/* context is usually defined by WM, two cases where no WM is available:
|
||||
* - for forward compatibility, curscreen has to be saved
|
||||
* - for undofile, curscene needs to be saved */
|
||||
/* XXX still remap G */
|
||||
static void write_global(bContext *C, WriteData *wd)
|
||||
static void write_global(WriteData *wd, Main *mainvar)
|
||||
{
|
||||
FileGlobal fg;
|
||||
bScreen *screen;
|
||||
char subvstr[8];
|
||||
|
||||
fg.curscreen= CTX_wm_screen(C);
|
||||
fg.curscene= CTX_data_scene(C);
|
||||
current_screen_compat(mainvar, &screen);
|
||||
|
||||
/* XXX still remap G */
|
||||
fg.curscreen= screen;
|
||||
fg.curscene= G.scene;
|
||||
fg.displaymode= G.displaymode;
|
||||
fg.winpos= G.winpos;
|
||||
fg.fileflags= (G.fileflags & ~G_FILE_NO_UI); // prevent to save this, is not good convention, and feature with concerns...
|
||||
@ -2042,7 +2059,7 @@ static void write_global(bContext *C, WriteData *wd)
|
||||
}
|
||||
|
||||
/* if MemFile * there's filesave to memory */
|
||||
static int write_file_handle(bContext *C, int handle, MemFile *compare, MemFile *current,
|
||||
static int write_file_handle(Main *mainvar, int handle, MemFile *compare, MemFile *current,
|
||||
int write_user_block, int write_flags)
|
||||
{
|
||||
BHead bhead;
|
||||
@ -2050,47 +2067,47 @@ static int write_file_handle(bContext *C, int handle, MemFile *compare, MemFile
|
||||
char buf[16];
|
||||
WriteData *wd;
|
||||
|
||||
blo_split_main(&mainlist, G.main);
|
||||
blo_split_main(&mainlist, mainvar);
|
||||
|
||||
wd= bgnwrite(handle, compare, current, write_flags);
|
||||
|
||||
sprintf(buf, "BLENDER%c%c%.3d", (sizeof(void*)==8)?'-':'_', (G.order==B_ENDIAN)?'V':'v', G.version);
|
||||
mywrite(wd, buf, 12);
|
||||
|
||||
write_renderinfo(C, wd);
|
||||
write_global(C, wd);
|
||||
write_renderinfo(wd, mainvar);
|
||||
write_global(wd, mainvar);
|
||||
|
||||
/* no UI save in undo */
|
||||
if(current==NULL) {
|
||||
write_windowmanagers(wd, &G.main->wm);
|
||||
write_screens (wd, &G.main->screen);
|
||||
write_windowmanagers(wd, &mainvar->wm);
|
||||
write_screens (wd, &mainvar->screen);
|
||||
}
|
||||
write_scenes (wd, &G.main->scene);
|
||||
write_curves (wd, &G.main->curve);
|
||||
write_mballs (wd, &G.main->mball);
|
||||
write_images (wd, &G.main->image);
|
||||
write_cameras (wd, &G.main->camera);
|
||||
write_lamps (wd, &G.main->lamp);
|
||||
write_lattices (wd, &G.main->latt);
|
||||
write_vfonts (wd, &G.main->vfont);
|
||||
write_ipos (wd, &G.main->ipo);
|
||||
write_keys (wd, &G.main->key);
|
||||
write_worlds (wd, &G.main->world);
|
||||
write_texts (wd, &G.main->text);
|
||||
write_sounds (wd, &G.main->sound);
|
||||
write_groups (wd, &G.main->group);
|
||||
write_armatures(wd, &G.main->armature);
|
||||
write_actions (wd, &G.main->action);
|
||||
write_objects (wd, &G.main->object);
|
||||
write_materials(wd, &G.main->mat);
|
||||
write_textures (wd, &G.main->tex);
|
||||
write_meshs (wd, &G.main->mesh);
|
||||
write_particlesettings(wd, &G.main->particle);
|
||||
write_nodetrees(wd, &G.main->nodetree);
|
||||
write_brushes (wd, &G.main->brush);
|
||||
write_scripts (wd, &G.main->script);
|
||||
write_scenes (wd, &mainvar->scene);
|
||||
write_curves (wd, &mainvar->curve);
|
||||
write_mballs (wd, &mainvar->mball);
|
||||
write_images (wd, &mainvar->image);
|
||||
write_cameras (wd, &mainvar->camera);
|
||||
write_lamps (wd, &mainvar->lamp);
|
||||
write_lattices (wd, &mainvar->latt);
|
||||
write_vfonts (wd, &mainvar->vfont);
|
||||
write_ipos (wd, &mainvar->ipo);
|
||||
write_keys (wd, &mainvar->key);
|
||||
write_worlds (wd, &mainvar->world);
|
||||
write_texts (wd, &mainvar->text);
|
||||
write_sounds (wd, &mainvar->sound);
|
||||
write_groups (wd, &mainvar->group);
|
||||
write_armatures(wd, &mainvar->armature);
|
||||
write_actions (wd, &mainvar->action);
|
||||
write_objects (wd, &mainvar->object);
|
||||
write_materials(wd, &mainvar->mat);
|
||||
write_textures (wd, &mainvar->tex);
|
||||
write_meshs (wd, &mainvar->mesh);
|
||||
write_particlesettings(wd, &mainvar->particle);
|
||||
write_nodetrees(wd, &mainvar->nodetree);
|
||||
write_brushes (wd, &mainvar->brush);
|
||||
write_scripts (wd, &mainvar->script);
|
||||
if(current==NULL)
|
||||
write_libraries(wd, G.main->next); /* no library save in undo */
|
||||
write_libraries(wd, mainvar->next); /* no library save in undo */
|
||||
|
||||
if (write_user_block) {
|
||||
write_userdef(wd);
|
||||
@ -2105,13 +2122,12 @@ static int write_file_handle(bContext *C, int handle, MemFile *compare, MemFile
|
||||
mywrite(wd, &bhead, sizeof(BHead));
|
||||
|
||||
blo_join_main(&mainlist);
|
||||
G.main= mainlist.first;
|
||||
|
||||
return endwrite(wd);
|
||||
}
|
||||
|
||||
/* return: success (1) */
|
||||
int BLO_write_file(bContext *C, char *dir, int write_flags, ReportList *reports)
|
||||
int BLO_write_file(Main *mainvar, char *dir, int write_flags, ReportList *reports)
|
||||
{
|
||||
char userfilename[FILE_MAXDIR+FILE_MAXFILE];
|
||||
char tempname[FILE_MAXDIR+FILE_MAXFILE];
|
||||
@ -2129,7 +2145,7 @@ int BLO_write_file(bContext *C, char *dir, int write_flags, ReportList *reports)
|
||||
|
||||
write_user_block= BLI_streq(dir, userfilename);
|
||||
|
||||
err= write_file_handle(C, file, NULL,NULL, write_user_block, write_flags);
|
||||
err= write_file_handle(mainvar, file, NULL,NULL, write_user_block, write_flags);
|
||||
close(file);
|
||||
|
||||
if(!err) {
|
||||
@ -2166,11 +2182,11 @@ int BLO_write_file(bContext *C, char *dir, int write_flags, ReportList *reports)
|
||||
}
|
||||
|
||||
/* return: success (1) */
|
||||
int BLO_write_file_mem(bContext *C, MemFile *compare, MemFile *current, int write_flags, ReportList *reports)
|
||||
int BLO_write_file_mem(Main *mainvar, MemFile *compare, MemFile *current, int write_flags, ReportList *reports)
|
||||
{
|
||||
int err;
|
||||
|
||||
err= write_file_handle(C, 0, compare, current, 0, write_flags);
|
||||
err= write_file_handle(mainvar, 0, compare, current, 0, write_flags);
|
||||
|
||||
if(err==0) return 1;
|
||||
return 0;
|
||||
@ -2264,7 +2280,7 @@ cleanup:
|
||||
return !(reports->flag & RPT_HAS_ERROR);
|
||||
}
|
||||
|
||||
int BLO_write_runtime(bContext *C, char *file, char *exename, ReportList *reports)
|
||||
int BLO_write_runtime(Main *mainvar, char *file, char *exename, ReportList *reports)
|
||||
{
|
||||
char gamename[FILE_MAXDIR+FILE_MAXFILE];
|
||||
int outfd = -1;
|
||||
@ -2282,7 +2298,7 @@ int BLO_write_runtime(bContext *C, char *file, char *exename, ReportList *report
|
||||
outfd= open(gamename, O_BINARY|O_WRONLY|O_CREAT|O_TRUNC, 0777);
|
||||
if (outfd != -1) {
|
||||
|
||||
write_file_handle(C, outfd, NULL,NULL, 0, G.fileflags);
|
||||
write_file_handle(mainvar, outfd, NULL,NULL, 0, G.fileflags);
|
||||
|
||||
if (write(outfd, " ", 1) != 1) {
|
||||
BKE_report(reports, RPT_ERROR, "Unable to write to output file.");
|
||||
@ -2346,7 +2362,7 @@ static int handle_write_msb_int(int handle, int i)
|
||||
return (write(handle, buf, 4)==4);
|
||||
}
|
||||
|
||||
int BLO_write_runtime(bContext *C, char *file, char *exename, ReportList *reports)
|
||||
int BLO_write_runtime(Main *mainvar, char *file, char *exename, ReportList *reports)
|
||||
{
|
||||
int outfd= open(file, O_BINARY|O_WRONLY|O_CREAT|O_TRUNC, 0777);
|
||||
int datastart;
|
||||
@ -2360,7 +2376,7 @@ int BLO_write_runtime(bContext *C, char *file, char *exename, ReportList *report
|
||||
|
||||
datastart= lseek(outfd, 0, SEEK_CUR);
|
||||
|
||||
write_file_handle(C, outfd, NULL,NULL, 0, G.fileflags);
|
||||
write_file_handle(mainvar, outfd, NULL,NULL, 0, G.fileflags);
|
||||
|
||||
if (!handle_write_msb_int(outfd, datastart) || (write(outfd, "BRUNTIME", 8)!=8)) {
|
||||
BKE_report(reports, RPT_ERROR, "Unable to write to output file.");
|
||||
|
@ -905,9 +905,9 @@ void filelist_from_library(struct FileList* filelist)
|
||||
filelist_filter(filelist);
|
||||
}
|
||||
|
||||
void filelist_append_library(struct FileList *filelist, char *dir, char *file, short flag, int idcode, struct Scene* scene)
|
||||
void filelist_append_library(struct FileList *filelist, char *dir, char *file, short flag, int idcode, struct Main *mainvar, struct Scene* scene)
|
||||
{
|
||||
BLO_library_append_(&filelist->libfiledata, filelist->filelist, filelist->numfiles, dir, file, flag, idcode, scene);
|
||||
BLO_library_append_(&filelist->libfiledata, filelist->filelist, filelist->numfiles, dir, file, flag, idcode, mainvar, scene);
|
||||
}
|
||||
|
||||
void filelist_from_main(struct FileList *filelist)
|
||||
|
@ -70,7 +70,7 @@ void filelist_setfiletypes(struct FileList* filelist, short has_quicktime);
|
||||
int filelist_islibrary (struct FileList* filelist, char* dir, char* group);
|
||||
void filelist_from_main(struct FileList* filelist);
|
||||
void filelist_from_library(struct FileList* filelist);
|
||||
void filelist_append_library(struct FileList* filelist, char *dir, char* file, short flag, int idcode, struct Scene* scene);
|
||||
void filelist_append_library(struct FileList* filelist, char *dir, char* file, short flag, int idcode, struct Main *mainvar, struct Scene* scene);
|
||||
void filelist_settype(struct FileList* filelist, int type);
|
||||
short filelist_gettype(struct FileList* filelist);
|
||||
void filelist_setipotype(struct FileList* filelist, short ipotype);
|
||||
|
@ -847,7 +847,7 @@ void WM_write_file(bContext *C, char *target)
|
||||
|
||||
BKE_reports_init(&reports, RPT_STORE);
|
||||
|
||||
if (BLO_write_file(C, di, writeflags, &reports)) {
|
||||
if (BLO_write_file(CTX_data_main(C), di, writeflags, &reports)) {
|
||||
strcpy(G.sce, di);
|
||||
G.relbase_valid = 1;
|
||||
strcpy(G.main->name, di); /* is guaranteed current file */
|
||||
@ -880,7 +880,7 @@ int WM_write_homefile(bContext *C, wmOperator *op)
|
||||
|
||||
// XXX error reporting to the user
|
||||
BKE_reports_init(&reports, RPT_PRINT);
|
||||
BLO_write_file(C, tstr, write_flags, &reports);
|
||||
BLO_write_file(CTX_data_main(C), tstr, write_flags, &reports);
|
||||
BKE_reports_clear(&reports);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
@ -898,7 +898,7 @@ void WM_write_autosave(bContext *C)
|
||||
write_flags = G.fileflags & ~(G_FILE_COMPRESS | G_FILE_LOCK | G_FILE_SIGN);
|
||||
|
||||
BKE_reports_init(&reports, RPT_PRINT);
|
||||
BLO_write_file(C, tstr, write_flags, &reports);
|
||||
BLO_write_file(CTX_data_main(C), tstr, write_flags, &reports);
|
||||
BKE_reports_clear(&reports);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user