Cleanup: comments (long lines) in blenloader

This commit is contained in:
Campbell Barton 2019-04-22 01:10:29 +10:00
parent cda4cd0705
commit faabf92a7e
12 changed files with 210 additions and 118 deletions

View File

@ -22,7 +22,8 @@
/** \file
* \ingroup blenloader
* \brief Utils ensuring .blend file (i.e. Main) is in valid state during write and/or read process.
* \brief Utils ensuring .blend file (i.e. Main)
* is in valid state during write and/or read process.
*/
struct Main;

View File

@ -17,7 +17,8 @@
/** \file
* \ingroup blenloader
*
* Utils to check/validate a Main is in sane state, only checks relations between datablocks and libraries for now.
* Utils to check/validate a Main is in sane state,
* only checks relations between datablocks and libraries for now.
*
* \note Does not *fix* anything, only reports found errors.
*/
@ -45,7 +46,10 @@
#include "readfile.h"
/** Check (but do *not* fix) that all linked data-blocks are still valid (i.e. pointing to the right library). */
/**
* Check (but do *not* fix) that all linked data-blocks are still valid
* (i.e. pointing to the right library).
*/
bool BLO_main_validate_libraries(Main *bmain, ReportList *reports)
{
ListBase mainlist;

View File

@ -128,7 +128,8 @@ void BLO_blendhandle_print_sizes(BlendHandle *bh, void *fp)
}
/**
* Gets the names of all the datablocks in a file of a certain type (e.g. all the scene names in a file).
* Gets the names of all the datablocks in a file of a certain type
* (e.g. all the scene names in a file).
*
* \param bh: The blendhandle to access.
* \param ofblocktype: The type of names to get.
@ -158,7 +159,8 @@ LinkNode *BLO_blendhandle_get_datablock_names(BlendHandle *bh, int ofblocktype,
}
/**
* Gets the previews of all the datablocks in a file of a certain type (e.g. all the scene previews in a file).
* Gets the previews of all the datablocks in a file of a certain type
* (e.g. all the scene previews in a file).
*
* \param bh: The blendhandle to access.
* \param ofblocktype: The type of names to get.
@ -247,7 +249,8 @@ LinkNode *BLO_blendhandle_get_previews(BlendHandle *bh, int ofblocktype, int *to
}
/**
* Gets the names of all the linkable datablock types available in a file. (e.g. "Scene", "Mesh", "Light", etc.).
* Gets the names of all the linkable datablock types available in a file.
* (e.g. "Scene", "Mesh", "Light", etc.).
*
* \param bh: The blendhandle to access.
* \return A BLI_linklist of strings. The string links should be freed with malloc.
@ -348,9 +351,11 @@ BlendFileData *BLO_read_from_memory(const void *mem,
}
/**
* Used for undo/redo, skips part of libraries reading (assuming their data are already loaded & valid).
* Used for undo/redo, skips part of libraries reading
* (assuming their data are already loaded & valid).
*
* \param oldmain: old main, from which we will keep libraries and other datablocks that should not have changed.
* \param oldmain: old main,
* from which we will keep libraries and other datablocks that should not have changed.
* \param filename: current file, only for retrieving library data.
*/
BlendFileData *BLO_read_from_memfile(Main *oldmain,
@ -410,17 +415,18 @@ BlendFileData *BLO_read_from_memfile(Main *oldmain,
BLI_assert(old_mainlist.first == oldmain);
if (bfd && old_mainlist.first != old_mainlist.last) {
/* Even though directly used libs have been already moved to new main, indirect ones have not.
* This is a bit annoying, but we have no choice but to keep them all for now - means some now unused
* data may remain in memory, but think we'll have to live with it. */
/* Even though directly used libs have been already moved to new main,
* indirect ones have not.
* This is a bit annoying, but we have no choice but to keep them all for now -
* means some now unused data may remain in memory, but think we'll have to live with it. */
Main *libmain, *libmain_next;
Main *newmain = bfd->main;
ListBase new_mainlist = {newmain, newmain};
for (libmain = oldmain->next; libmain; libmain = libmain_next) {
libmain_next = libmain->next;
/* Note that LIB_INDIRECT does not work with libraries themselves, so we use non-NULL parent
* to detect indirect-linked ones... */
/* Note that LIB_INDIRECT does not work with libraries themselves, so we use non-NULL
* parent to detect indirect-linked ones. */
if (libmain->curlib && (libmain->curlib->parent != NULL)) {
BLI_remlink(&old_mainlist, libmain);
BLI_addtail(&new_mainlist, libmain);
@ -438,7 +444,9 @@ BlendFileData *BLO_read_from_memfile(Main *oldmain,
blo_join_main(&new_mainlist);
}
/* printf("Remaining mains/libs in oldmain: %d\n", BLI_listbase_count(&fd->old_mainlist) - 1); */
#if 0
printf("Remaining mains/libs in oldmain: %d\n", BLI_listbase_count(&fd->old_mainlist) - 1);
#endif
/* That way, libs (aka mains) we did not reuse in new undone/redone state
* will be cleared together with oldmain... */
@ -451,7 +459,8 @@ BlendFileData *BLO_read_from_memfile(Main *oldmain,
}
/**
* Frees a BlendFileData structure and *all* the data associated with it (the userdef data, and the main libblock data).
* Frees a BlendFileData structure and *all* the data associated with it
* (the userdef data, and the main libblock data).
*
* \param bfd: The structure to free.
*/

View File

@ -571,7 +571,8 @@ void blo_split_main(ListBase *mainlist, Main *main)
while (i--) {
ID *id = lbarray[i]->first;
if (id == NULL || GS(id->name) == ID_LI) {
continue; /* no ID_LI datablock should ever be linked anyway, but just in case, better be explicit. */
/* No ID_LI datablock should ever be linked anyway, but just in case, better be explicit. */
continue;
}
split_libdata(lbarray[i], lib_main_array, lib_main_array_len);
}
@ -1379,8 +1380,8 @@ FileData *blo_filedata_from_file(const char *filepath, ReportList *reports)
}
/**
* Same as blo_filedata_from_file(), but does not reads DNA data, only header. Use it for light access
* (e.g. thumbnail reading).
* Same as blo_filedata_from_file(), but does not reads DNA data, only header.
* Use it for light access (e.g. thumbnail reading).
*/
static FileData *blo_filedata_from_file_minimal(const char *filepath)
{
@ -1582,7 +1583,8 @@ bool BLO_has_bfile_extension(const char *str)
*/
bool BLO_library_path_explode(const char *path, char *r_dir, char **r_group, char **r_name)
{
/* We might get some data names with slashes, so we have to go up in path until we find blend file itself,
/* We might get some data names with slashes,
* so we have to go up in path until we find blend file itself,
* then we now next path item is group, and everything else is data name. */
char *slash = NULL, *prev_slash = NULL, c = '\0';
@ -1644,7 +1646,8 @@ bool BLO_library_path_explode(const char *path, char *r_dir, char **r_group, cha
*
* \param filepath: The path of the file to extract thumbnail from.
* \return The raw thumbnail
* (MEM-allocated, as stored in file, use #BKE_main_thumbnail_to_imbuf() to convert it to ImBuf image).
* (MEM-allocated, as stored in file, use #BKE_main_thumbnail_to_imbuf()
* to convert it to ImBuf image).
*/
BlendThumbnail *BLO_thumbnail_from_file(const char *filepath)
{
@ -2034,7 +2037,8 @@ void blo_end_sound_pointer_map(FileData *fd, Main *oldmain)
}
}
/* XXX disabled this feature - packed files also belong in temp saves and quit.blend, to make restore work */
/* XXX disabled this feature - packed files also belong in temp saves and quit.blend,
* to make restore work. */
static void insert_packedmap(FileData *fd, PackedFile *pf)
{
@ -2584,7 +2588,8 @@ static void direct_link_id(FileData *fd, ID *id)
}
id->py_instance = NULL;
/* That way datablock reading not going through main read_libblock() function are still in a clear tag state.
/* That way datablock reading not going through main read_libblock()
* function are still in a clear tag state.
* (glowering at certain nodetree fake datablock here...). */
id->tag = 0;
@ -2955,7 +2960,8 @@ static void direct_link_fcurves(FileData *fd, ListBase *list)
ChannelDriver *driver = fcu->driver;
DriverVar *dvar;
/* compiled expression data will need to be regenerated (old pointer may still be set here) */
/* Compiled expression data will need to be regenerated
* (old pointer may still be set here). */
driver->expr_comp = NULL;
driver->expr_simple = NULL;
@ -5900,7 +5906,8 @@ static void direct_link_object(FileData *fd, Object *ob)
{
PartEff *paf;
/* XXX This should not be needed - but seems like it can happen in some cases, so for now play safe... */
/* XXX This should not be needed - but seems like it can happen in some cases,
* so for now play safe. */
ob->proxy_from = NULL;
/* loading saved files with editmode enabled works, but for undo we like
@ -6847,7 +6854,8 @@ static void direct_link_scene(FileData *fd, Scene *sce)
}
SEQ_END;
/* link metastack, slight abuse of structs here, have to restore pointer to internal part in struct */
/* link metastack, slight abuse of structs here,
* have to restore pointer to internal part in struct */
{
Sequence temp;
void *poin;
@ -7647,7 +7655,8 @@ static void direct_link_windowmanager(FileData *fd, wmWindowManager *wm)
WorkSpaceInstanceHook *hook = win->workspace_hook;
win->workspace_hook = newdataadr(fd, hook);
/* we need to restore a pointer to this later when reading workspaces, so store in global oldnew-map */
/* we need to restore a pointer to this later when reading workspaces,
* so store in global oldnew-map. */
oldnewmap_insert(fd->globmap, hook, win->workspace_hook, 0);
direct_link_area_map(fd, &win->global_areas);
@ -7877,7 +7886,8 @@ static void lib_link_window_scene_data_restore(wmWindow *win, Scene *scene, View
v3d->localvd->camera = scene->camera;
/* Localview can become invalid during undo/redo steps, so we exit it when no could be found. */
/* Localview can become invalid during undo/redo steps,
* so we exit it when no could be found. */
for (base = view_layer->object_bases.first; base; base = base->next) {
if (base->local_view_bits & v3d->local_view_uuid) {
break;
@ -8248,8 +8258,9 @@ static void direct_link_library(FileData *fd, Library *lib, Main *main)
BLI_remlink(&main->libraries, lib);
MEM_freeN(lib);
/* Now, since Blender always expect **latest** Main pointer from fd->mainlist to be the active library
* Main pointer, where to add all non-library data-blocks found in file next, we have to switch that
/* Now, since Blender always expect **latest** Main pointer from fd->mainlist
* to be the active library Main pointer,
* where to add all non-library data-blocks found in file next, we have to switch that
* 'dupli' found Main to latest position in the list!
* Otherwise, you get weird disappearing linked data on a rather inconsistent basis.
* See also T53977 for reproducible case. */
@ -8286,7 +8297,8 @@ static void lib_link_library(FileData *UNUSED(fd), Main *main)
}
}
/* Always call this once you have loaded new library data to set the relative paths correctly in relation to the blend file */
/* Always call this once you have loaded new library data to set the relative paths correctly
* in relation to the blend file. */
static void fix_relpaths_library(const char *basepath, Main *main)
{
Library *lib;
@ -8306,7 +8318,8 @@ static void fix_relpaths_library(const char *basepath, Main *main)
else {
for (lib = main->libraries.first; lib; lib = lib->id.next) {
/* Libraries store both relative and abs paths, recreate relative paths,
* relative to the blend file since indirectly linked libs will be relative to their direct linked library */
* relative to the blend file since indirectly linked libs will be
* relative to their direct linked library. */
if (BLI_path_is_rel(lib->name)) { /* if this is relative to begin with? */
BLI_strncpy(lib->name, lib->filepath, sizeof(lib->name));
BLI_path_rel(lib->name, basepath);
@ -9031,11 +9044,14 @@ static BHead *read_libblock(FileData *fd, Main *main, BHead *bhead, const int ta
const char *allocname;
bool wrong_id = false;
/* In undo case, most libs and linked data should be kept as is from previous state (see BLO_read_from_memfile).
* However, some needed by the snapshot being read may have been removed in previous one, and would go missing.
/* In undo case, most libs and linked data should be kept as is from previous state
* (see BLO_read_from_memfile).
* However, some needed by the snapshot being read may have been removed in previous one,
* and would go missing.
* This leads e.g. to disappearing objects in some undo/redo case, see T34446.
* That means we have to carefully check whether current lib or libdata already exits in old main, if it does
* we merely copy it over into new main area, otherwise we have to do a full read of that bhead... */
* That means we have to carefully check whether current lib or
* libdata already exits in old main, if it does we merely copy it over into new main area,
* otherwise we have to do a full read of that bhead... */
if (fd->memfile && ELEM(bhead->code, ID_LI, ID_LINK_PLACEHOLDER)) {
const char *idname = blo_bhead_id_name(fd, bhead);
@ -9049,9 +9065,11 @@ static BHead *read_libblock(FileData *fd, Main *main, BHead *bhead, const int ta
if (libmain->curlib && STREQ(idname, libmain->curlib->id.name)) {
Main *oldmain = fd->old_mainlist->first;
DEBUG_PRINTF("FOUND!\n");
/* In case of a library, we need to re-add its main to fd->mainlist, because if we have later
* a missing ID_LINK_PLACEHOLDER, we need to get the correct lib it is linked to!
* Order is crucial, we cannot bulk-add it in BLO_read_from_memfile() like it used to be... */
/* In case of a library, we need to re-add its main to fd->mainlist,
* because if we have later a missing ID_LINK_PLACEHOLDER,
* we need to get the correct lib it is linked to!
* Order is crucial, we cannot bulk-add it in BLO_read_from_memfile()
* like it used to be. */
BLI_remlink(fd->old_mainlist, libmain);
BLI_remlink_safe(&oldmain->libraries, libmain->curlib);
BLI_addtail(fd->mainlist, libmain);
@ -9071,12 +9089,14 @@ static BHead *read_libblock(FileData *fd, Main *main, BHead *bhead, const int ta
main->curlib ? main->curlib->name : "<NULL>");
if ((id = BKE_libblock_find_name(main, GS(idname), idname + 2))) {
DEBUG_PRINTF("FOUND!\n");
/* Even though we found our linked ID, there is no guarantee its address is still the same... */
/* Even though we found our linked ID,
* there is no guarantee its address is still the same. */
if (id != bhead->old) {
oldnewmap_insert(fd->libmap, bhead->old, id, GS(id->name));
}
/* No need to do anything else for ID_LINK_PLACEHOLDER, it's assumed already present in its lib's main... */
/* No need to do anything else for ID_LINK_PLACEHOLDER,
* it's assumed already present in its lib's main. */
if (r_id) {
*r_id = NULL; /* Just in case... */
}
@ -9283,7 +9303,8 @@ static BHead *read_global(BlendFileData *bfd, FileData *fd, BHead *bhead)
bfd->globalf = fg->globalf;
BLI_strncpy(bfd->filename, fg->filename, sizeof(bfd->filename));
/* error in 2.65 and older: main->name was not set if you save from startup (not after loading file) */
/* Error in 2.65 and older: main->name was not set if you save from startup
* (not after loading file). */
if (bfd->filename[0] == 0) {
if (fd->fileversion < 265 || (fd->fileversion == 265 && fg->subversion < 1))
if ((G.fileflags & G_FILE_RECOVER) == 0)
@ -9341,7 +9362,8 @@ static void do_versions_userdef(FileData *fd, BlendFileData *bfd)
if (MAIN_VERSION_OLDER(bmain, 266, 4)) {
bTheme *btheme;
/* themes for Node and Sequence editor were not using grid color, but back. we copy this over then */
/* Themes for Node and Sequence editor were not using grid color,
* but back. we copy this over then. */
for (btheme = user->themes.first; btheme; btheme = btheme->next) {
copy_v4_v4_char(btheme->space_node.grid, btheme->space_node.back);
copy_v4_v4_char(btheme->space_sequencer.grid, btheme->space_sequencer.back);
@ -9426,7 +9448,8 @@ static void lib_link_all(FileData *fd, Main *main)
if (fd->memfile == NULL) {
lib_link_windowmanager(fd, main);
}
/* DO NOT skip screens here, 3Dview may contains pointers to other ID data (like bgpic)! See T41411. */
/* DO NOT skip screens here,
* 3D viewport may contains pointers to other ID data (like bgpic)! See T41411. */
lib_link_screen(fd, main);
lib_link_scene(fd, main);
lib_link_object(fd, main);
@ -9916,8 +9939,12 @@ static void expand_doit_library(void *fdhandle, Main *mainvar, void *old)
* read yet at that point. */
change_link_placeholder_to_real_ID_pointer_fd(fd, bhead->old, id);
// commented because this can print way too much
// if (G.debug & G_DEBUG) printf("expand_doit: already linked: %s lib: %s\n", id->name, lib->name);
/* Commented because this can print way too much. */
#if 0
if (G.debug & G_DEBUG) {
printf("expand_doit: already linked: %s lib: %s\n", id->name, lib->name);
}
#endif
}
MEM_freeN(lib);
@ -9934,8 +9961,9 @@ static void expand_doit_library(void *fdhandle, Main *mainvar, void *old)
read_libblock(fd, mainvar, bhead, LIB_TAG_NEED_EXPAND | LIB_TAG_INDIRECT, NULL);
}
else {
/* this is actually only needed on UI call? when ID was already read before, and another append
* happens which invokes same ID... in that case the lookup table needs this entry */
/* this is actually only needed on UI call? when ID was already read before,
* and another append happens which invokes same ID...
* in that case the lookup table needs this entry */
oldnewmap_insert(fd->libmap, bhead->old, id, bhead->code);
// commented because this can print way too much
// if (G.debug & G_DEBUG) printf("expand: already read %s\n", id->name);
@ -10944,7 +10972,8 @@ static void add_loose_objects_to_scene(Main *mainvar,
BLI_assert(scene);
/* Give all objects which are LIB_TAG_INDIRECT a base, or for a collection when *lib has been set. */
/* Give all objects which are LIB_TAG_INDIRECT a base,
* or for a collection when *lib has been set. */
for (Object *ob = mainvar->objects.first; ob; ob = ob->id.next) {
bool do_it = (ob->id.tag & LIB_TAG_DOIT) != 0;
if (do_it || ((ob->id.tag & LIB_TAG_INDIRECT) && (ob->id.tag & LIB_TAG_PRE_EXISTING) == 0)) {
@ -10953,7 +10982,8 @@ static void add_loose_objects_to_scene(Main *mainvar,
do_it = true;
}
else if ((ob->id.lib == lib) && (object_in_any_scene(bmain, ob) == 0)) {
/* When appending, make sure any indirectly loaded objects get a base, else they cant be accessed at all
/* When appending, make sure any indirectly loaded objects get a base,
* else they cant be accessed at all
* (see T27437). */
do_it = true;
}
@ -10983,7 +11013,8 @@ static void add_loose_objects_to_scene(Main *mainvar,
if (flag & FILE_AUTOSELECT) {
base->flag |= BASE_SELECTED;
/* Do NOT make base active here! screws up GUI stuff, if you want it do it on src/ level. */
/* Do NOT make base active here! screws up GUI stuff,
* if you want it do it on src/ level. */
}
BKE_scene_object_base_flag_sync_from_base(base);
@ -11046,14 +11077,16 @@ static void add_collections_to_scene(Main *mainvar,
/* We do not want to force instantiation of indirectly linked collections...
* Except when we are appending (since in that case, we'll end up instantiating all objects,
* it's better to do it via their own collections if possible).
* Reports showing that desired difference in behaviors between link and append: T62570, T61796. */
* Reports showing that desired difference in behaviors between link and append:
* See T62570, T61796. */
else if (do_append || (collection->id.tag & LIB_TAG_INDIRECT) == 0) {
bool do_add_collection = (collection->id.tag & LIB_TAG_DOIT) != 0;
if (!do_add_collection) {
/* We need to check that objects in that collections are already instantiated in a scene.
* Otherwise, it's better to add the collection to the scene's active collection, than to
* instantiate its objects in active scene's collection directly. See T61141.
* Note that we only check object directly into that collection, not recursively into its children.
* Note that we only check object directly into that collection,
* not recursively into its children.
*/
for (CollectionObject *coll_ob = collection->gobject.first; coll_ob != NULL;
coll_ob = coll_ob->next) {
@ -11245,8 +11278,10 @@ ID *BLO_library_link_named_part(Main *mainl,
* \param idcode: The kind of data-block to link.
* \param name: The name of the data-block (without the 2 char ID prefix).
* \param flag: Options for linking, used for instantiating.
* \param scene: The scene in which to instantiate objects/collections (if NULL, no instantiation is done).
* \param v3d: The active View3D (only to define active layers for instantiated objects & collections, can be NULL).
* \param scene: The scene in which to instantiate objects/collections
* (if NULL, no instantiation is done).
* \param v3d: The active 3D viewport.
* (only to define active layers for instantiated objects & collections, can be NULL).
* \return the linked ID when found.
*/
ID *BLO_library_link_named_part_ex(
@ -11287,10 +11322,11 @@ static Main *library_link_begin(Main *mainvar, FileData **fd, const char *filepa
/**
* Initialize the BlendHandle for linking library data.
*
* \param mainvar: The current main database, e.g. G_MAIN or CTX_data_main(C).
* \param bh: A blender file handle as returned by \a BLO_blendhandle_from_file or \a BLO_blendhandle_from_memory.
* \param mainvar: The current main database, e.g. #G_MAIN or #CTX_data_main(C).
* \param bh: A blender file handle as returned by
* #BLO_blendhandle_from_file or #BLO_blendhandle_from_memory.
* \param filepath: Used for relative linking, copied to the \a lib->name.
* \return the library Main, to be passed to \a BLO_library_append_named_part as \a mainl.
* \return the library Main, to be passed to #BLO_library_append_named_part as \a mainl.
*/
Main *BLO_library_link_begin(Main *mainvar, BlendHandle **bh, const char *filepath)
{
@ -11368,7 +11404,8 @@ static void library_link_end(Main *mainl,
Main *main_newid = BKE_main_new();
for (mainvar = ((Main *)(*fd)->mainlist->first)->next; mainvar; mainvar = mainvar->next) {
BLI_assert(mainvar->versionfile != 0);
/* We need to split out IDs already existing, or they will go again through do_versions - bad, very bad! */
/* We need to split out IDs already existing,
* or they will go again through do_versions - bad, very bad! */
split_main_newid(mainvar, main_newid);
do_versions_after_linking(main_newid);
@ -11387,7 +11424,8 @@ static void library_link_end(Main *mainl,
mainvar); /* make all relative paths, relative to the open blend file */
/* Give a base to loose objects and collections.
* Only directly linked objects & collections are instantiated by `BLO_library_link_named_part_ex()` & co,
* Only directly linked objects & collections are instantiated by
* `BLO_library_link_named_part_ex()` & co,
* here we handle indirect ones and other possible edge-cases. */
if (scene) {
add_collections_to_scene(mainvar, bmain, scene, view_layer, v3d, curlib, flag);
@ -11417,9 +11455,12 @@ static void library_link_end(Main *mainl,
* \param bh: The blender file handle (WARNING! may be freed by this function!).
* \param flag: Options for linking, used for instantiating.
* \param bmain: The main database in which to instantiate objects/collections
* \param scene: The scene in which to instantiate objects/collections (if NULL, no instantiation is done).
* \param view_layer: The scene layer in which to instantiate objects/collections (if NULL, no instantiation is done).
* \param v3d: The active View3D (only to define local-view for instantiated objects & groups, can be NULL).
* \param scene: The scene in which to instantiate objects/collections
* (if NULL, no instantiation is done).
* \param view_layer: The scene layer in which to instantiate objects/collections
* (if NULL, no instantiation is done).
* \param v3d: The active 3D viewport
* (only to define local-view for instantiated objects & groups, can be NULL).
*/
void BLO_library_link_end(Main *mainl,
BlendHandle **bh,
@ -11656,7 +11697,11 @@ static void read_libraries(FileData *basefd, ListBase *mainlist)
for (Main *mainptr = mainl->next; mainptr; mainptr = mainptr->next) {
/* Does this library have any more linked datablocks we need to read? */
if (has_linked_ids_to_read(mainptr)) {
// printf("Reading linked datablocks from %s (%s)\n", mainptr->curlib->id.name, mainptr->curlib->name);
#if 0
printf("Reading linked datablocks from %s (%s)\n",
mainptr->curlib->id.name,
mainptr->curlib->name);
#endif
/* Open file if it has not been done yet. */
FileData *fd = read_library_file_data(basefd, mainlist, mainl, mainptr);

View File

@ -149,8 +149,10 @@ bool BLO_memfile_write_file(struct MemFile *memfile, const char *filename)
MemFileChunk *chunk;
int file, oflags;
/* note: This is currently used for autosave and 'quit.blend', where _not_ following symlinks is OK,
* however if this is ever executed explicitly by the user, we may want to allow writing to symlinks.
/* note: This is currently used for autosave and 'quit.blend',
* where _not_ following symlinks is OK,
* however if this is ever executed explicitly by the user,
* we may want to allow writing to symlinks.
*/
oflags = O_BINARY | O_WRONLY | O_CREAT | O_TRUNC;

View File

@ -310,7 +310,8 @@ static void area_add_window_regions(ScrArea *sa, SpaceLink *sl, ListBase *lb)
case SPACE_ACTION: {
SpaceAction *saction = (SpaceAction *)sl;
/* we totally reinit the view for the Action Editor, as some old instances had some weird cruft set */
/* We totally reinit the view for the Action Editor,
* as some old instances had some weird cruft set. */
ar->v2d.tot.xmin = -20.0f;
ar->v2d.tot.ymin = (float)(-sa->winy) / 3.0f;
ar->v2d.tot.xmax = (float)((sa->winx > 120) ? (sa->winx) : 120);
@ -577,9 +578,10 @@ static bNodeSocket *do_versions_node_group_add_socket_2_56_2(bNodeTree *ngroup,
}
/* Create default_value structs for node sockets from the internal bNodeStack value.
* These structs were used from 2.59.2 on, but are replaced in the subsequent do_versions for custom nodes
* by generic ID property values. This conversion happened _after_ do_versions originally due to messy type initialization
* for node sockets. Now created here intermediately for convenience and to keep do_versions consistent.
* These structs were used from 2.59.2 on, but are replaced in the subsequent do_versions for
* custom nodes by generic ID property values. This conversion happened _after_ do_versions
* originally due to messy type initialization for node sockets.
* Now created here intermediately for convenience and to keep do_versions consistent.
*
* Node compatibility code is gross ...
*/
@ -848,7 +850,8 @@ void blo_do_versions_250(FileData *fd, Library *lib, Main *bmain)
if (fluidmd)
fluidmd->fss->fmd = fluidmd;
/* rotation modes were added, but old objects would now default to being 'quaternion based' */
/* rotation modes were added,
* but old objects would now default to being 'quaternion based' */
ob->rotmode = ROT_MODE_EUL;
}
@ -874,7 +877,8 @@ void blo_do_versions_250(FileData *fd, Library *lib, Main *bmain)
}
}
/* Assign proper global gravity weights for dynamics (only z-coordinate is taken into account) */
/* Assign proper global gravity weights for dynamics
* (only z-coordinate is taken into account) */
if (do_gravity) {
for (part = bmain->particles.first; part; part = part->id.next)
part->effector_weights->global_gravity = part->acc[2] / -9.81f;
@ -914,7 +918,8 @@ void blo_do_versions_250(FileData *fd, Library *lib, Main *bmain)
if (bmain->versionfile < 250 || (bmain->versionfile == 250 && bmain->subversionfile < 6)) {
Object *ob;
/* New variables for axis-angle rotations and/or quaternion rotations were added, and need proper initialization */
/* New variables for axis-angle rotations and/or quaternion rotations were added,
* and need proper initialization */
for (ob = bmain->objects.first; ob; ob = ob->id.next) {
/* new variables for all objects */
ob->quat[0] = 1.0f;
@ -1898,7 +1903,8 @@ void blo_do_versions_250(FileData *fd, Library *lib, Main *bmain)
copy_v4_v4(gsock->ns.vec, sock->ns.vec);
/* XXX nodeAddLink does not work with incomplete (node==NULL) links any longer,
* have to create these directly here. These links are updated again in subsequent do_version!
* have to create these directly here.
* These links are updated again in subsequent do_version!
*/
link = MEM_callocN(sizeof(bNodeLink), "link");
BLI_addtail(&ntree->links, link);
@ -1920,7 +1926,8 @@ void blo_do_versions_250(FileData *fd, Library *lib, Main *bmain)
copy_v4_v4(gsock->ns.vec, sock->ns.vec);
/* XXX nodeAddLink does not work with incomplete (node==NULL) links any longer,
* have to create these directly here. These links are updated again in subsequent do_version!
* have to create these directly here.
* These links are updated again in subsequent do_version!
*/
link = MEM_callocN(sizeof(bNodeLink), "link");
BLI_addtail(&ntree->links, link);
@ -1954,7 +1961,8 @@ void blo_do_versions_250(FileData *fd, Library *lib, Main *bmain)
for (sc = bmain->screens.first; sc; sc = sc->id.next) {
if (sc->redraws_flag == 0) {
/* just initialize to default? */
/* XXX: we could also have iterated through areas, and taken them from the first timeline available... */
/* XXX: we could also have iterated through areas,
* and taken them from the first timeline available... */
sc->redraws_flag = TIME_ALL_3D_WIN | TIME_ALL_ANIM_WIN;
}
}
@ -2007,9 +2015,10 @@ void blo_do_versions_250(FileData *fd, Library *lib, Main *bmain)
}
if (bmain->versionfile < 258 || (bmain->versionfile == 258 && bmain->subversionfile < 1)) {
/* screen view2d settings were not properly initialized [#27164]
* v2d->scroll caused the bug but best reset other values too which are in old blend files only.
* need to make less ugly - possibly an iterator? */
/* screen view2d settings were not properly initialized T27164.
* v2d->scroll caused the bug but best reset other values too
* which are in old blend files only.
* Need to make less ugly - possibly an iterator? */
bScreen *screen;
for (screen = bmain->screens.first; screen; screen = screen->id.next) {

View File

@ -106,7 +106,8 @@ static void do_versions_nodetree_convert_angle(bNodeTree *ntree)
else if (node->type == CMP_NODE_DEFOCUS) {
/* Convert degrees to radians. */
NodeDefocus *nqd = node->storage;
/* XXX DNA char to float conversion seems to map the char value into the [0.0f, 1.0f] range... */
/* XXX DNA char to float conversion seems to map the char value
* into the [0.0f, 1.0f] range. */
nqd->rotation = DEG2RADF(nqd->rotation * 255.0f);
}
else if (node->type == CMP_NODE_CHROMA_MATTE) {
@ -118,7 +119,8 @@ static void do_versions_nodetree_convert_angle(bNodeTree *ntree)
else if (node->type == CMP_NODE_GLARE) {
/* Convert degrees to radians. */
NodeGlare *ndg = node->storage;
/* XXX DNA char to float conversion seems to map the char value into the [0.0f, 1.0f] range... */
/* XXX DNA char to float conversion seems to map the char value
* into the [0.0f, 1.0f] range. */
ndg->angle_ofs = DEG2RADF(ndg->angle_ofs * 255.0f);
}
/* XXX TexMapping struct is used by other nodes too (at least node_composite_mapValue),
@ -233,7 +235,8 @@ static void do_versions_nodetree_multi_file_output_format_2_62_1(Scene *sce, bNo
bNodeSocket *sock;
char filename[FILE_MAXFILE];
/* ugly, need to remove the old inputs list to avoid bad pointer checks when adding new sockets.
/* ugly, need to remove the old inputs list to avoid bad pointer
* checks when adding new sockets.
* sock->storage is expected to contain path info in ntreeCompositOutputFileAddSocket.
*/
BLI_listbase_clear(&node->inputs);
@ -457,7 +460,8 @@ static const char *node_get_static_idname(int type, int treetype)
case ID: \
return #Category #StructName;
/* XXX hack, group types share a single static integer identifier, but are registered as separate types */
/* XXX hack, group types share a single static integer identifier,
* but are registered as separate types */
if (type == NODE_GROUP) {
switch (treetype) {
case NTREE_COMPOSIT:
@ -1450,13 +1454,12 @@ void blo_do_versions_260(FileData *fd, Library *UNUSED(lib), Main *bmain)
ima->flag |= IMA_VIEW_AS_RENDER;
}
else if (colormanagement_disabled) {
/* if colormanagement not used, set image's color space to raw, so no sRGB->linear conversion
* would happen on display and render
* there's no clear way to check whether color management is enabled or not in render engine
* so set all images to raw if there's at least one scene with color management disabled
* this would still behave incorrect in cases when color management was used for only some
* of scenes, but such a setup is crazy anyway and think it's fair enough to break compatibility
* in that cases
/* if color-management not used, set image's color space to raw, so no sRGB->linear
* conversion would happen on display and render there's no clear way to check whether
* color management is enabled or not in render engine so set all images to raw if there's
* at least one scene with color management disabled this would still behave incorrect in
* cases when color management was used for only some of scenes, but such a setup is
* crazy anyway and think it's fair enough to break compatibility in that cases.
*/
BLI_strncpy(ima->colorspace_settings.name, "Raw", sizeof(ima->colorspace_settings.name));
@ -1877,7 +1880,8 @@ void blo_do_versions_260(FileData *fd, Library *UNUSED(lib), Main *bmain)
}
}
/* Set flag for delayed do_versions in lib_verify_nodetree. It needs valid typeinfo pointers ... */
/* Set flag for delayed do_versions in lib_verify_nodetree.
* It needs valid typeinfo pointers ... */
{
FOREACH_NODETREE_BEGIN (bmain, ntree, id) {
/* XXX This should be kept without version check for now!

View File

@ -508,7 +508,8 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *bmain)
}
if (!MAIN_VERSION_ATLEAST(bmain, 270, 4)) {
/* ui_previews were not handled correctly when copying areas, leading to corrupted files (see T39847).
/* ui_previews were not handled correctly when copying areas,
* leading to corrupted files (see T39847).
* This will always reset situation to a valid state.
*/
bScreen *sc;
@ -1153,7 +1154,8 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *bmain)
if (scene->gpd) {
bGPdata *gpd = scene->gpd;
/* Copy over the settings stored in the GP datablock linked to the scene, for minimal disruption */
/* Copy over the settings stored in the GP data-block linked to the scene,
* for minimal disruption. */
ts->gpencil_v3d_align = 0;
if (gpd->flag & GP_DATA_VIEWALIGN)
@ -1201,8 +1203,8 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *bmain)
ListBase *lbarray[MAX_LIBARRAY];
int a;
/* Important to clear all non-persistent flags from older versions here, otherwise they could collide
* with any new persistent flag we may add in the future. */
/* Important to clear all non-persistent flags from older versions here,
* otherwise they could collide with any new persistent flag we may add in the future. */
a = set_listbasepointers(bmain, lbarray);
while (a--) {
for (ID *id = lbarray[a]->first; id; id = id->next) {

View File

@ -98,7 +98,8 @@
static bScreen *screen_parent_find(const bScreen *screen)
{
/* can avoid lookup if screen state isn't maximized/full (parent and child store the same state) */
/* Can avoid lookup if screen state isn't maximized/full
* (parent and child store the same state). */
if (ELEM(screen->state, SCREENMAXIMIZED, SCREENFULL)) {
for (const ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
if (sa->full && sa->full != screen) {
@ -173,7 +174,8 @@ static void do_version_area_change_space_to_space_action(ScrArea *area, const Sc
* - Active scene isn't stored in screen anymore, but in window.
* - Create workspace instance hook for each window.
*
* \note Some of the created workspaces might be deleted again in case of reading the default startup.blend.
* \note Some of the created workspaces might be deleted again
* in case of reading the default `startup.blend`.
*/
static void do_version_workspaces_after_lib_link(Main *bmain)
{
@ -187,7 +189,8 @@ static void do_version_workspaces_after_lib_link(Main *bmain)
bScreen *screen = screen_parent ? screen_parent : win->screen;
if (screen->temp) {
/* We do not generate a new workspace for those screens... still need to set some data in win. */
/* We do not generate a new workspace for those screens...
* still need to set some data in win. */
win->workspace_hook = BKE_workspace_instance_hook_create(bmain);
win->scene = screen->scene;
/* Deprecated from now on! */
@ -509,7 +512,8 @@ static void do_version_layers_to_collections(Main *bmain, Scene *scene)
if (have_override || need_default_renderlayer) {
ViewLayer *view_layer = BKE_view_layer_add(scene, "Viewport");
/* If we ported all the original render layers, we don't need to make the viewport layer renderable. */
/* If we ported all the original render layers,
* we don't need to make the viewport layer renderable. */
if (!BLI_listbase_is_single(&scene->view_layers)) {
view_layer->flag &= ~VIEW_LAYER_RENDER;
}
@ -665,9 +669,11 @@ void do_versions_after_linking_280(Main *bmain)
}
}
/* We need to assign lib pointer to generated hidden collections *after* all have been created, otherwise we'll
* end up with several datablocks sharing same name/library, which is FORBIDDEN!
* Note: we need this to be recursive, since a child collection may be sorted before its parent in bmain... */
/* We need to assign lib pointer to generated hidden collections *after* all have been created,
* otherwise we'll end up with several datablocks sharing same name/library,
* which is FORBIDDEN!
* Note: we need this to be recursive,
* since a child collection may be sorted before its parent in bmain. */
for (Collection *collection = bmain->collections.first; collection != NULL;
collection = collection->id.next) {
do_version_collection_propagate_lib_to_children(collection);
@ -758,8 +764,9 @@ void do_versions_after_linking_280(Main *bmain)
}
if (!MAIN_VERSION_ATLEAST(bmain, 280, 3)) {
/* Due to several changes to particle RNA and draw code particles from older files may no longer
* be visible. Here we correct this by setting a default draw size for those files. */
/* Due to several changes to particle RNA and draw code particles from older files may
* no longer be visible.
* Here we correct this by setting a default draw size for those files. */
for (Object *object = bmain->objects.first; object; object = object->id.next) {
for (ParticleSystem *psys = object->particlesystem.first; psys; psys = psys->next) {
if (psys->part->draw_size == 0.0f) {
@ -983,8 +990,10 @@ void do_versions_after_linking_280(Main *bmain)
}
}
/* NOTE: this version patch is intended for versions < 2.52.2, but was initially introduced in 2.27 already.
* But in 2.79 another case generating non-unique names was discovered (see T55668, involving Meta strips)... */
/* NOTE: This version patch is intended for versions < 2.52.2,
* but was initially introduced in 2.27 already.
* But in 2.79 another case generating non-unique names was discovered
* (see T55668, involving Meta strips). */
static void do_versions_seq_unique_name_all_strips(Scene *sce, ListBase *seqbasep)
{
for (Sequence *seq = seqbasep->first; seq != NULL; seq = seq->next) {
@ -1811,7 +1820,8 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) {
if (sl->spacetype == SPACE_ACTION) {
SpaceAction *saction = (SpaceAction *)sl;
/* "Dopesheet" should be default here, unless it looks like the Action Editor was active instead */
/* "Dopesheet" should be default here,
* unless it looks like the Action Editor was active instead. */
if ((saction->mode_prev == 0) && (saction->action == NULL)) {
saction->mode_prev = SACTCONT_DOPESHEET;
}

View File

@ -92,7 +92,8 @@ void BLO_update_defaults_userpref_blend(void)
/* Leave temp directory empty, will then get appropriate value per OS. */
U.tempdir[0] = '\0';
/* Only enable tooltips translation by default, without actually enabling translation itself, for now. */
/* Only enable tooltips translation by default,
* without actually enabling translation itself, for now. */
U.transopts = USER_TR_TOOLTIPS;
U.memcachelimit = 4096;
@ -147,7 +148,8 @@ void BLO_update_defaults_startup_blend(Main *bmain, const char *app_template)
for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
for (ARegion *ar = sa->regionbase.first; ar; ar = ar->next) {
/* Remove all stored panels, we want to use defaults (order, open/closed) as defined by UI code here! */
/* Remove all stored panels, we want to use defaults
* (order, open/closed) as defined by UI code here! */
BKE_area_region_panels_free(&ar->panels);
/* some toolbars have been saved as initialized,

View File

@ -456,7 +456,8 @@ PartEff *blo_do_version_give_parteff_245(Object *ob)
return NULL;
}
/* NOTE: this version patch is intended for versions < 2.52.2, but was initially introduced in 2.27 already */
/* NOTE: this version patch is intended for versions < 2.52.2,
* but was initially introduced in 2.27 already. */
void blo_do_version_old_trackto_to_constraints(Object *ob)
{
/* create new trackto constraint from the relationship */

View File

@ -2175,10 +2175,10 @@ static void write_mesh(WriteData *wd, Mesh *mesh)
/**
* Those calls:
* - Reduce mesh->xdata.totlayer to number of layers to write.
* - Fill xlayers with those layers to be written.
* Note that mesh->xdata is from now on invalid for Blender, but this is why the whole mesh is
* a temp local copy!
* - Reduce mesh->xdata.totlayer to number of layers to write.
* - Fill xlayers with those layers to be written.
* Note that mesh->xdata is from now on invalid for Blender,
* but this is why the whole mesh is a temp local copy!
*/
CustomData_file_write_prepare(
&mesh->vdata, &vlayers, vlayers_buff, ARRAY_SIZE(vlayers_buff));
@ -3740,9 +3740,10 @@ static void write_libraries(WriteData *wd, Main *main)
}
}
/* to be able to restore quit.blend and temp saves, the packed blend has to be in undo buffers... */
/* XXX needs rethink, just like save UI in undo files now - would be nice to append things only for the]
* quit.blend and temp saves */
/* To be able to restore 'quit.blend' and temp saves,
* the packed blend has to be in undo buffers... */
/* XXX needs rethink, just like save UI in undo files now -
* would be nice to append things only for the 'quit.blend' and temp saves. */
if (found_one) {
/* Not overridable. */
@ -3893,7 +3894,8 @@ static bool write_file_handle(Main *mainvar,
NULL :
BKE_override_static_operations_store_initialize();
/* This outer loop allows to save first datablocks from real mainvar, then the temp ones from override process,
/* This outer loop allows to save first datablocks from real mainvar,
* then the temp ones from override process,
* if needed, without duplicating whole code. */
Main *bmain = mainvar;
do {
@ -3907,7 +3909,8 @@ static bool write_file_handle(Main *mainvar,
}
for (; id; id = id->next) {
/* We should never attempt to write non-regular IDs (i.e. all kind of temp/runtime ones). */
/* We should never attempt to write non-regular IDs
* (i.e. all kind of temp/runtime ones). */
BLI_assert(
(id->tag & (LIB_TAG_NO_MAIN | LIB_TAG_NO_USER_REFCOUNT | LIB_TAG_NOT_ALLOCATED)) == 0);