Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenloader/intern/writefile.c
| Show First 20 Lines • Show All 1,080 Lines • ▼ Show 20 Lines | |||||
| } | } | ||||
| /** | /** | ||||
| * Take care using 'use_active_win', since we wont want the currently active window | * Take care using 'use_active_win', since we wont want the currently active window | ||||
| * to change which scene renders (currently only used for undo). | * to change which scene renders (currently only used for undo). | ||||
| */ | */ | ||||
| static void current_screen_compat( | static void current_screen_compat( | ||||
| Main *mainvar, bool use_active_win, | Main *mainvar, bool use_active_win, | ||||
| bScreen **r_screen, Scene **r_scene, SceneLayer **r_render_layer) | bScreen **r_screen, Scene **r_scene, ViewLayer **r_render_layer) | ||||
| { | { | ||||
| wmWindowManager *wm; | wmWindowManager *wm; | ||||
| wmWindow *window = NULL; | wmWindow *window = NULL; | ||||
| WorkSpace *workspace; | WorkSpace *workspace; | ||||
| /* find a global current screen in the first open window, to have | /* find a global current screen in the first open window, to have | ||||
| * a reasonable default for reading in older versions */ | * a reasonable default for reading in older versions */ | ||||
| wm = mainvar->wm.first; | wm = mainvar->wm.first; | ||||
| Show All 15 Lines | if (wm) { | ||||
| else { | else { | ||||
| window = wm->windows.first; | window = wm->windows.first; | ||||
| } | } | ||||
| } | } | ||||
| workspace = (window) ? BKE_workspace_active_get(window->workspace_hook) : NULL; | workspace = (window) ? BKE_workspace_active_get(window->workspace_hook) : NULL; | ||||
| *r_screen = (window) ? BKE_workspace_active_screen_get(window->workspace_hook) : NULL; | *r_screen = (window) ? BKE_workspace_active_screen_get(window->workspace_hook) : NULL; | ||||
| *r_scene = (window) ? window->scene : NULL; | *r_scene = (window) ? window->scene : NULL; | ||||
| *r_render_layer = (window) ? BKE_workspace_render_layer_get(workspace) : NULL; | *r_render_layer = (window) ? BKE_workspace_view_layer_get(workspace) : NULL; | ||||
| } | } | ||||
| typedef struct RenderInfo { | typedef struct RenderInfo { | ||||
| int sfra; | int sfra; | ||||
| int efra; | int efra; | ||||
| char scene_name[MAX_ID_NAME - 2]; | char scene_name[MAX_ID_NAME - 2]; | ||||
| } RenderInfo; | } RenderInfo; | ||||
| /* was for historic render-deamon feature, | /* was for historic render-deamon feature, | ||||
| * now write because it can be easily extracted without | * now write because it can be easily extracted without | ||||
| * reading the whole blend file */ | * reading the whole blend file */ | ||||
| static void write_renderinfo(WriteData *wd, Main *mainvar) | static void write_renderinfo(WriteData *wd, Main *mainvar) | ||||
| { | { | ||||
| bScreen *curscreen; | bScreen *curscreen; | ||||
| Scene *sce, *curscene = NULL; | Scene *sce, *curscene = NULL; | ||||
| SceneLayer *render_layer; | ViewLayer *render_layer; | ||||
| RenderInfo data; | RenderInfo data; | ||||
| /* XXX in future, handle multiple windows with multiple screens? */ | /* XXX in future, handle multiple windows with multiple screens? */ | ||||
| current_screen_compat(mainvar, false, &curscreen, &curscene, &render_layer); | current_screen_compat(mainvar, false, &curscreen, &curscene, &render_layer); | ||||
| for (sce = mainvar->scene.first; sce; sce = sce->id.next) { | for (sce = mainvar->scene.first; sce; sce = sce->id.next) { | ||||
| if (sce->id.lib == NULL && (sce == curscene || (sce->r.scemode & R_BG_RENDER))) { | if (sce->id.lib == NULL && (sce == curscene || (sce->r.scemode & R_BG_RENDER))) { | ||||
| data.sfra = sce->r.sfra; | data.sfra = sce->r.sfra; | ||||
| ▲ Show 20 Lines • Show All 1,620 Lines • ▼ Show 20 Lines | if (sce->rigidbody_world) { | ||||
| writestruct(wd, DATA, EffectorWeights, 1, sce->rigidbody_world->effector_weights); | writestruct(wd, DATA, EffectorWeights, 1, sce->rigidbody_world->effector_weights); | ||||
| write_pointcaches(wd, &(sce->rigidbody_world->ptcaches)); | write_pointcaches(wd, &(sce->rigidbody_world->ptcaches)); | ||||
| } | } | ||||
| write_previews(wd, sce->preview); | write_previews(wd, sce->preview); | ||||
| write_curvemapping_curves(wd, &sce->r.mblur_shutter_curve); | write_curvemapping_curves(wd, &sce->r.mblur_shutter_curve); | ||||
| write_scene_collection(wd, sce->collection); | write_scene_collection(wd, sce->collection); | ||||
| for (SceneLayer *scene_layer = sce->render_layers.first; scene_layer; scene_layer = scene_layer->next) { | for (ViewLayer *view_layer = sce->view_layers.first; view_layer; view_layer = view_layer->next) { | ||||
| writestruct(wd, DATA, SceneLayer, 1, scene_layer); | writestruct(wd, DATA, ViewLayer, 1, view_layer); | ||||
| writelist(wd, DATA, Base, &scene_layer->object_bases); | writelist(wd, DATA, Base, &view_layer->object_bases); | ||||
| if (scene_layer->properties) { | if (view_layer->properties) { | ||||
| IDP_WriteProperty(scene_layer->properties, wd); | IDP_WriteProperty(view_layer->properties, wd); | ||||
| } | } | ||||
| if (scene_layer->id_properties) { | if (view_layer->id_properties) { | ||||
| IDP_WriteProperty(scene_layer->id_properties, wd); | IDP_WriteProperty(view_layer->id_properties, wd); | ||||
| } | } | ||||
| for (FreestyleModuleConfig *fmc = scene_layer->freestyle_config.modules.first; fmc; fmc = fmc->next) { | for (FreestyleModuleConfig *fmc = view_layer->freestyle_config.modules.first; fmc; fmc = fmc->next) { | ||||
| writestruct(wd, DATA, FreestyleModuleConfig, 1, fmc); | writestruct(wd, DATA, FreestyleModuleConfig, 1, fmc); | ||||
| } | } | ||||
| for (FreestyleLineSet *fls = scene_layer->freestyle_config.linesets.first; fls; fls = fls->next) { | for (FreestyleLineSet *fls = view_layer->freestyle_config.linesets.first; fls; fls = fls->next) { | ||||
| writestruct(wd, DATA, FreestyleLineSet, 1, fls); | writestruct(wd, DATA, FreestyleLineSet, 1, fls); | ||||
| } | } | ||||
| write_layer_collections(wd, &scene_layer->layer_collections); | write_layer_collections(wd, &view_layer->layer_collections); | ||||
| } | } | ||||
| if (sce->layer_properties) { | if (sce->layer_properties) { | ||||
| IDP_WriteProperty(sce->layer_properties, wd); | IDP_WriteProperty(sce->layer_properties, wd); | ||||
| } | } | ||||
| if (sce->collection_properties) { | if (sce->collection_properties) { | ||||
| IDP_WriteProperty(sce->collection_properties, wd); | IDP_WriteProperty(sce->collection_properties, wd); | ||||
| ▲ Show 20 Lines • Show All 1,020 Lines • ▼ Show 20 Lines | |||||
| * - for forward compatibility, curscreen has to be saved | * - for forward compatibility, curscreen has to be saved | ||||
| * - for undofile, curscene needs to be saved */ | * - for undofile, curscene needs to be saved */ | ||||
| static void write_global(WriteData *wd, int fileflags, Main *mainvar) | static void write_global(WriteData *wd, int fileflags, Main *mainvar) | ||||
| { | { | ||||
| const bool is_undo = (wd->current != NULL); | const bool is_undo = (wd->current != NULL); | ||||
| FileGlobal fg; | FileGlobal fg; | ||||
| bScreen *screen; | bScreen *screen; | ||||
| Scene *scene; | Scene *scene; | ||||
| SceneLayer *render_layer; | ViewLayer *render_layer; | ||||
| char subvstr[8]; | char subvstr[8]; | ||||
| /* prevent mem checkers from complaining */ | /* prevent mem checkers from complaining */ | ||||
| memset(fg.pad, 0, sizeof(fg.pad)); | memset(fg.pad, 0, sizeof(fg.pad)); | ||||
| memset(fg.filename, 0, sizeof(fg.filename)); | memset(fg.filename, 0, sizeof(fg.filename)); | ||||
| memset(fg.build_hash, 0, sizeof(fg.build_hash)); | memset(fg.build_hash, 0, sizeof(fg.build_hash)); | ||||
| current_screen_compat(mainvar, is_undo, &screen, &scene, &render_layer); | current_screen_compat(mainvar, is_undo, &screen, &scene, &render_layer); | ||||
| /* XXX still remap G */ | /* XXX still remap G */ | ||||
| fg.curscreen = screen; | fg.curscreen = screen; | ||||
| fg.curscene = scene; | fg.curscene = scene; | ||||
| fg.cur_render_layer = render_layer; | fg.cur_view_layer = render_layer; | ||||
| /* prevent to save this, is not good convention, and feature with concerns... */ | /* prevent to save this, is not good convention, and feature with concerns... */ | ||||
| fg.fileflags = (fileflags & ~G_FILE_FLAGS_RUNTIME); | fg.fileflags = (fileflags & ~G_FILE_FLAGS_RUNTIME); | ||||
| fg.globalf = G.f; | fg.globalf = G.f; | ||||
| BLI_strncpy(fg.filename, mainvar->name, sizeof(fg.filename)); | BLI_strncpy(fg.filename, mainvar->name, sizeof(fg.filename)); | ||||
| sprintf(subvstr, "%4d", BLENDER_SUBVERSION); | sprintf(subvstr, "%4d", BLENDER_SUBVERSION); | ||||
| memcpy(fg.subvstr, subvstr, 4); | memcpy(fg.subvstr, subvstr, 4); | ||||
| ▲ Show 20 Lines • Show All 398 Lines • Show Last 20 Lines | |||||