|
Blender V4.3
|
#include <cerrno>#include <climits>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <fcntl.h>#include <unistd.h>#include "BLI_utildefines.h"#include "CLG_log.h"#include "DNA_collection_types.h"#include "DNA_fileglobal_types.h"#include "DNA_genfile.h"#include "DNA_key_types.h"#include "DNA_sdna_types.h"#include "BLI_bitmap.h"#include "BLI_blenlib.h"#include "BLI_endian_defines.h"#include "BLI_endian_switch.h"#include "BLI_implicit_sharing.hh"#include "BLI_link_utils.h"#include "BLI_linklist.h"#include "BLI_math_base.h"#include "BLI_mempool.h"#include "BLI_set.hh"#include "BLI_threads.h"#include "MEM_guardedalloc.h"#include "BKE_asset.hh"#include "BKE_blender_version.h"#include "BKE_bpath.hh"#include "BKE_global.hh"#include "BKE_idprop.hh"#include "BKE_idtype.hh"#include "BKE_layer.hh"#include "BKE_lib_id.hh"#include "BKE_lib_override.hh"#include "BKE_lib_query.hh"#include "BKE_main.hh"#include "BKE_main_namemap.hh"#include "BKE_node.hh"#include "BKE_packedFile.hh"#include "BKE_preferences.h"#include "BKE_report.hh"#include "BKE_workspace.hh"#include "DRW_engine.hh"#include "BLO_blend_defs.hh"#include "BLO_blend_validate.hh"#include "BLO_read_write.hh"#include "BLO_readfile.hh"#include "BLO_undofile.hh"#include "BLO_writefile.hh"#include "readfile.hh"#include <zstd.h>Go to the source code of this file.
Classes | |
| struct | ZstdFrame |
| class | WriteWrap |
| class | RawWriteWrap |
| class | ZstdWriteWrap |
| struct | ZstdWriteWrap::ZstdWriteBlockTask |
| struct | WriteData |
| struct | BlendWriter |
| struct | RenderInfo |
| struct | BLO_Write_IDBuffer |
Macros | |
| #define | DNA_DEPRECATED_ALLOW |
| #define | U (*((const UserDef *)&U)) |
| #define | MEM_BUFFER_SIZE MEM_SIZE_OPTIMAL(1 << 17) /* 128kb */ |
| #define | MEM_CHUNK_SIZE MEM_SIZE_OPTIMAL(1 << 15) /* ~32kb */ |
| #define | ZSTD_BUFFER_SIZE (1 << 21) /* 2mb */ |
| #define | ZSTD_CHUNK_SIZE (1 << 20) /* 1mb */ |
| #define | ZSTD_COMPRESSION_LEVEL 3 |
Functions | |
Write Data Type & Functions | |
| static WriteData * | writedata_new (WriteWrap *ww) |
| static void | writedata_do_write (WriteData *wd, const void *mem, size_t memlen) |
| static void | writedata_free (WriteData *wd) |
Local Writing API 'mywrite' | |
| static void | mywrite_flush (WriteData *wd) |
| static void | mywrite (WriteData *wd, const void *adr, size_t len) |
| static WriteData * | mywrite_begin (WriteWrap *ww, MemFile *compare, MemFile *current) |
| static bool | mywrite_end (WriteData *wd) |
| static void | mywrite_id_begin (WriteData *wd, ID *id) |
| static void | mywrite_id_end (WriteData *wd, ID *) |
Typed DNA File Writing | |
These functions are used by blender's .blend system for file saving/loading. | |
| static void | current_screen_compat (Main *mainvar, bool use_active_win, bScreen **r_screen, Scene **r_scene, ViewLayer **r_view_layer) |
| static void | write_renderinfo (WriteData *wd, Main *mainvar) |
| static void | write_keymapitem (BlendWriter *writer, const wmKeyMapItem *kmi) |
| static void | write_userdef (BlendWriter *writer, const UserDef *userdef) |
| static void | write_libraries (WriteData *wd, Main *main) |
| static void | write_global (WriteData *wd, int fileflags, Main *mainvar) |
| static void | write_thumb (WriteData *wd, const BlendThumbnail *thumb) |
File Writing (Public) | |
| bool | BLO_write_file (Main *mainvar, const char *filepath, const int write_flags, const BlendFileWriteParams *params, ReportList *reports) |
| bool | BLO_write_file_mem (Main *mainvar, MemFile *compare, MemFile *current, int write_flags) |
| BLO_Write_IDBuffer * | BLO_write_allocate_id_buffer () |
| void | BLO_write_init_id_buffer_from_id (BLO_Write_IDBuffer *id_buffer, ID *id, const bool is_undo) |
| ID * | BLO_write_get_id_buffer_temp_id (BLO_Write_IDBuffer *id_buffer) |
| void | BLO_write_destroy_id_buffer (BLO_Write_IDBuffer **id_buffer) |
| void | BLO_write_raw (BlendWriter *writer, size_t size_in_bytes, const void *data_ptr) |
| void | BLO_write_struct_by_name (BlendWriter *writer, const char *struct_name, const void *data_ptr) |
| void | BLO_write_struct_array_by_name (BlendWriter *writer, const char *struct_name, int array_size, const void *data_ptr) |
| void | BLO_write_struct_by_id (BlendWriter *writer, int struct_id, const void *data_ptr) |
| void | BLO_write_struct_at_address_by_id (BlendWriter *writer, int struct_id, const void *address, const void *data_ptr) |
| void | BLO_write_struct_at_address_by_id_with_filecode (BlendWriter *writer, int filecode, int struct_id, const void *address, const void *data_ptr) |
| void | BLO_write_struct_array_by_id (BlendWriter *writer, int struct_id, int array_size, const void *data_ptr) |
| void | BLO_write_struct_array_at_address_by_id (BlendWriter *writer, int struct_id, int array_size, const void *address, const void *data_ptr) |
| void | BLO_write_struct_list_by_id (BlendWriter *writer, int struct_id, const ListBase *list) |
| void | BLO_write_struct_list_by_name (BlendWriter *writer, const char *struct_name, ListBase *list) |
| void | blo_write_id_struct (BlendWriter *writer, int struct_id, const void *id_address, const ID *id) |
| int | BLO_get_struct_id_by_name (const BlendWriter *writer, const char *struct_name) |
| void | BLO_write_char_array (BlendWriter *writer, uint num, const char *data_ptr) |
| void | BLO_write_int8_array (BlendWriter *writer, uint num, const int8_t *data_ptr) |
| void | BLO_write_uint8_array (BlendWriter *writer, uint num, const uint8_t *data_ptr) |
| void | BLO_write_int32_array (BlendWriter *writer, uint num, const int32_t *data_ptr) |
| void | BLO_write_uint32_array (BlendWriter *writer, uint num, const uint32_t *data_ptr) |
| void | BLO_write_float_array (BlendWriter *writer, uint num, const float *data_ptr) |
| void | BLO_write_double_array (BlendWriter *writer, uint num, const double *data_ptr) |
| void | BLO_write_pointer_array (BlendWriter *writer, uint num, const void *data_ptr) |
| void | BLO_write_float3_array (BlendWriter *writer, uint num, const float *data_ptr) |
| void | BLO_write_string (BlendWriter *writer, const char *data_ptr) |
| void | BLO_write_shared (BlendWriter *writer, const void *data, const size_t approximate_size_in_bytes, const blender::ImplicitSharingInfo *sharing_info, const blender::FunctionRef< void()> write_fn) |
| bool | BLO_write_is_undo (BlendWriter *writer) |
Variables | |
| static CLG_LogRef | LOG = {"blo.writefile"} |
Generic DNA File Writing | |
| #define | writestruct_at_address(wd, filecode, struct_id, nr, adr, data) writestruct_at_address_nr(wd, filecode, SDNA_TYPE_FROM_STRUCT(struct_id), nr, adr, data) |
| #define | writestruct(wd, filecode, struct_id, nr, adr) writestruct_nr(wd, filecode, SDNA_TYPE_FROM_STRUCT(struct_id), nr, adr) |
| static bool | write_at_address_validate (WriteData *wd, int filecode, const void *address) |
| static void | writestruct_at_address_nr (WriteData *wd, int filecode, const int struct_nr, int nr, const void *adr, const void *data) |
| static void | writestruct_nr (WriteData *wd, int filecode, const int struct_nr, int nr, const void *adr) |
| static void | writedata (WriteData *wd, int filecode, size_t len, const void *adr) |
| static void | writelist_nr (WriteData *wd, int filecode, const int struct_nr, const ListBase *lb) |
File Writing (Private) | |
| #define | ID_BUFFER_STATIC_SIZE 8192 |
| static void | id_buffer_init_for_id_type (BLO_Write_IDBuffer *id_buffer, const IDTypeInfo *id_type) |
| static void | id_buffer_init_from_id (BLO_Write_IDBuffer *id_buffer, ID *id, const bool is_undo) |
| static int | write_id_direct_linked_data_process_cb (LibraryIDLinkCallbackData *cb_data) |
| static bool | write_file_handle (Main *mainvar, WriteWrap *ww, MemFile *compare, MemFile *current, int write_flags, bool use_userdef, const BlendThumbnail *thumb) |
| static bool | do_history (const char *filepath, ReportList *reports) |
| static void | write_file_main_validate_pre (Main *bmain, ReportList *reports) |
| static void | write_file_main_validate_post (Main *bmain, ReportList *reports) |
| static bool | BLO_write_file_impl (Main *mainvar, const char *filepath, const int write_flags, const BlendFileWriteParams *params, ReportList *reports, WriteWrap &ww) |
| #define DNA_DEPRECATED_ALLOW |
IFF-style structure (but not IFF compatible!)
Start file:
`BLENDER_V100` `12` bytes (version 1.00 is just an example).
`V` = big endian, `v` = little endian.
`_` = 4 byte pointer, `-` = 8 byte pointer.
data-blocks: (also see struct BHead).
`bh.code` `char[4]` see `BLO_blend_defs.hh` for a list of known types. `bh.len` `int32` length data after BHead in bytes. `bh.old` `void *` old pointer (the address at the time of writing the file). `bh.SDNAnr` `int32` struct index of structs stored in #DNA1 data. `bh.nr` `int32` in case of array: number of structs. data ... ...
Almost all data in Blender are structures. Each struct saved gets a BHead header. With BHead the struct can be linked again and compared with #StructDNA.
Preferred writing order: (not really a must, but why would you do it random?) Any case: direct data is ALWAYS after the lib block.
(Local file data)
~/.config/blender/X.X/config/startup.blend).~/.config/blender/X.X/config/userpref.blend). Definition at line 82 of file writefile.cc.
| #define ID_BUFFER_STATIC_SIZE 8192 |
Definition at line 1178 of file writefile.cc.
Referenced by id_buffer_init_for_id_type().
| #define MEM_BUFFER_SIZE MEM_SIZE_OPTIMAL(1 << 17) /* 128kb */ |
Definition at line 141 of file writefile.cc.
Referenced by writedata_new().
| #define MEM_CHUNK_SIZE MEM_SIZE_OPTIMAL(1 << 15) /* ~32kb */ |
Definition at line 142 of file writefile.cc.
Referenced by writedata_new().
| #define writestruct | ( | wd, | |
| filecode, | |||
| struct_id, | |||
| nr, | |||
| adr ) writestruct_nr(wd, filecode, SDNA_TYPE_FROM_STRUCT(struct_id), nr, adr) |
Definition at line 830 of file writefile.cc.
Referenced by BKE_modifier_blend_write(), write_global(), write_libraries(), and write_userdef().
| #define writestruct_at_address | ( | wd, | |
| filecode, | |||
| struct_id, | |||
| nr, | |||
| adr, | |||
| data ) writestruct_at_address_nr(wd, filecode, SDNA_TYPE_FROM_STRUCT(struct_id), nr, adr, data) |
Definition at line 827 of file writefile.cc.
| #define ZSTD_BUFFER_SIZE (1 << 21) /* 2mb */ |
Definition at line 144 of file writefile.cc.
Referenced by writedata_new().
| #define ZSTD_CHUNK_SIZE (1 << 20) /* 1mb */ |
Definition at line 145 of file writefile.cc.
Referenced by writedata_new().
| #define ZSTD_COMPRESSION_LEVEL 3 |
Definition at line 147 of file writefile.cc.
| int BLO_get_struct_id_by_name | ( | const BlendWriter * | writer, |
| const char * | struct_name ) |
Mapping between names and ids.
Definition at line 1900 of file writefile.cc.
References DNA_struct_find_with_alias(), WriteData::sdna, and BlendWriter::wd.
Referenced by BLO_write_struct_array_by_name(), and BLO_write_struct_list_by_name().
| BLO_Write_IDBuffer * BLO_write_allocate_id_buffer | ( | ) |
Definition at line 1794 of file writefile.cc.
Referenced by light_blend_write(), linestyle_blend_write(), material_blend_write(), scene_blend_write(), texture_blend_write(), world_blend_write(), and write_file_handle().
| void BLO_write_char_array | ( | BlendWriter * | writer, |
| uint | num, | ||
| const char * | data_ptr ) |
Slightly 'safer' code to write arrays of basic types data.
Definition at line 1906 of file writefile.cc.
References BLO_write_raw().
Referenced by console_space_blend_write(), IDP_WriteString(), and object_blend_write().
| void BLO_write_destroy_id_buffer | ( | BLO_Write_IDBuffer ** | id_buffer | ) |
Definition at line 1811 of file writefile.cc.
References MEM_SAFE_FREE.
Referenced by light_blend_write(), linestyle_blend_write(), material_blend_write(), scene_blend_write(), texture_blend_write(), world_blend_write(), and write_file_handle().
| void BLO_write_double_array | ( | BlendWriter * | writer, |
| uint | num, | ||
| const double * | data_ptr ) |
Definition at line 1936 of file writefile.cc.
References BLO_write_raw().
Referenced by IDP_WriteArray(), and write_ui_data().
| bool BLO_write_file | ( | Main * | mainvar, |
| const char * | filepath, | ||
| int | write_flags, | ||
| const BlendFileWriteParams * | params, | ||
| ReportList * | reports ) |
Definition at line 1764 of file writefile.cc.
References BLO_write_file_impl(), G_FILE_COMPRESS, and params.
Referenced by blender::bke::asset_write_in_library(), BKE_blendfile_userdef_write(), BKE_memfile_undo_encode(), WM_autosave_write(), WM_exit_ex(), wm_file_write(), wm_homefile_write_exec(), blender::bke::blendfile::PartialWriteContext::write(), and write_crash_blend().
|
static |
Definition at line 1595 of file writefile.cc.
References BKE_bpath_absolute_convert(), BKE_BPATH_FOREACH_PATH_SKIP_LINKED, BKE_BPATH_FOREACH_PATH_SKIP_MULTIFILE, BKE_bpath_list_backup(), BKE_bpath_list_free(), BKE_bpath_list_restore(), BKE_bpath_relative_convert(), BKE_bpath_relative_rebase(), BKE_report(), BKE_reportf(), BLI_assert, BLI_assert_unreachable, BLI_path_cmp, BLI_path_is_abs_from_cwd(), BLI_path_is_rel(), BLI_path_normalize(), BLI_path_split_dir_part(), BLI_rename_overwrite(), BLO_WRITE_PATH_REMAP_ABSOLUTE, BLO_WRITE_PATH_REMAP_NONE, BLO_WRITE_PATH_REMAP_RELATIVE, BLO_WRITE_PATH_REMAP_RELATIVE_ALL, WriteWrap::close(), do_history(), FILE_MAX, Main::filepath, G_FILE_ASSET_EDIT_FILE, Main::is_asset_edit_file, WriteWrap::open(), params, RPT_ERROR, SNPRINTF, STRNCPY, UNLIKELY, write_file_handle(), write_file_main_validate_post(), and write_file_main_validate_pre().
Referenced by BLO_write_file().
Definition at line 1780 of file writefile.cc.
References write_file_handle().
Referenced by BKE_memfile_undo_encode().
| void BLO_write_float3_array | ( | BlendWriter * | writer, |
| uint | num, | ||
| const float * | data_ptr ) |
Definition at line 1946 of file writefile.cc.
References BLO_write_raw().
Referenced by blend_write(), blend_write(), blend_write(), blend_write(), lightprobe_grid_cache_frame_blend_write(), and write_mdisps().
| void BLO_write_float_array | ( | BlendWriter * | writer, |
| uint | num, | ||
| const float * | data_ptr ) |
Definition at line 1931 of file writefile.cc.
References BLO_write_raw().
Referenced by BKE_constraint_blend_write(), BKE_fmodifiers_blend_write(), BKE_ptcache_blend_write(), blend_write(), blend_write_layer_data(), curve_blend_write(), IDP_WriteArray(), lightprobe_grid_cache_frame_blend_write(), mask_blend_write(), and write_grid_paint_mask().
| ID * BLO_write_get_id_buffer_temp_id | ( | BLO_Write_IDBuffer * | id_buffer | ) |
Definition at line 1806 of file writefile.cc.
References BLO_Write_IDBuffer::temp_id.
Referenced by light_blend_write(), linestyle_blend_write(), material_blend_write(), scene_blend_write(), texture_blend_write(), and world_blend_write().
| void blo_write_id_struct | ( | BlendWriter * | writer, |
| int | struct_id, | ||
| const void * | id_address, | ||
| const ID * | id ) |
Write id struct.
Definition at line 1895 of file writefile.cc.
References GS, BlendWriter::wd, and writestruct_at_address_nr().
| void BLO_write_init_id_buffer_from_id | ( | BLO_Write_IDBuffer * | id_buffer, |
| ID * | id, | ||
| const bool | is_undo ) |
Definition at line 1799 of file writefile.cc.
References BKE_idtype_get_info_from_id(), id_buffer_init_for_id_type(), and id_buffer_init_from_id().
Referenced by light_blend_write(), linestyle_blend_write(), material_blend_write(), scene_blend_write(), texture_blend_write(), and world_blend_write().
| void BLO_write_int32_array | ( | BlendWriter * | writer, |
| uint | num, | ||
| const int32_t * | data_ptr ) |
Definition at line 1921 of file writefile.cc.
References BLO_write_raw().
Referenced by blend_write(), blend_write(), IDP_WriteArray(), write_layer(), and write_ui_data().
| void BLO_write_int8_array | ( | BlendWriter * | writer, |
| uint | num, | ||
| const int8_t * | data_ptr ) |
Definition at line 1911 of file writefile.cc.
References BLO_write_raw().
Referenced by IDP_WriteArray(), lightprobe_grid_cache_frame_blend_write(), write_mdisps(), and write_ui_data().
| bool BLO_write_is_undo | ( | BlendWriter * | writer | ) |
Sometimes different data is written depending on whether the file is saved to disk or used for undo. This function returns true when the current file-writing is done for undo.
Definition at line 1991 of file writefile.cc.
References WriteData::use_memfile, and BlendWriter::wd.
Referenced by blender::bke::action_blend_write(), blend_write(), blend_write(), blend_write(), blend_write(), blender::blend_write(), blend_write_layer_data(), BLO_write_shared(), camera_blend_write(), CustomData_blend_write(), image_blend_write(), light_blend_write(), linestyle_blend_write(), material_blend_write(), mesh_blend_write(), blender::bke::node_tree_blend_write(), blender::bke::ntree_blend_write(), object_blend_write(), scene_blend_write(), shapekey_blend_write(), sound_blend_write(), texture_blend_write(), vfont_blend_write(), volume_blend_write(), and world_blend_write().
| void BLO_write_pointer_array | ( | BlendWriter * | writer, |
| uint | num, | ||
| const void * | data_ptr ) |
Definition at line 1941 of file writefile.cc.
References BLO_write_raw().
Referenced by curve_blend_write(), curves_blend_write(), grease_pencil_blend_write(), greasepencil_blend_write(), IDP_WriteArray(), blender::bke::node_interface::item_types::item_write_data(), mesh_blend_write(), metaball_blend_write(), object_blend_write(), pointcloud_blend_write(), volume_blend_write(), write_drawing_array(), and write_moviePlaneTracks().
| void BLO_write_raw | ( | BlendWriter * | writer, |
| size_t | size_in_bytes, | ||
| const void * | data_ptr ) |
Write raw data.
Definition at line 1823 of file writefile.cc.
References BLO_CODE_DATA, BlendWriter::wd, and writedata().
Referenced by BLO_write_char_array(), BLO_write_double_array(), BLO_write_float3_array(), BLO_write_float_array(), BLO_write_int32_array(), BLO_write_int8_array(), BLO_write_pointer_array(), BLO_write_string(), BLO_write_uint32_array(), BLO_write_uint8_array(), and shapekey_blend_write().
| void BLO_write_shared | ( | BlendWriter * | writer, |
| const void * | data, | ||
| size_t | approximate_size_in_bytes, | ||
| const blender::ImplicitSharingInfo * | sharing_info, | ||
| blender::FunctionRef< void()> | write_fn ) |
Check if the data can be written more efficiently by making use of implicit-sharing. If yes, the user count of the sharing-info is increased making the data immutable. The provided callback should serialize the potentially shared data. It is only called when necessary.
| approximate_size_in_bytes | Used to be able to approximate how large the undo step is in total. |
| write_fn | Use the #BlendWrite to serialize the potentially shared data. |
Definition at line 1958 of file writefile.cc.
References blender::Map< Key, Value, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::add(), blender::Set< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::add(), blender::ImplicitSharingInfo::add_user(), BLO_write_is_undo(), MemFileSharedStorage::map, WriteData::mem, WriteData::per_id_written_shared_addresses, MemFile::shared_storage, MemFile::size, blender::ImplicitSharingInfo::strong_users(), BlendWriter::wd, and MemFileWriteData::written_memfile.
Referenced by BKE_packedfile_blend_write(), blender::bke::CurvesGeometry::blend_write(), CustomData_blend_write(), and mesh_blend_write().
| void BLO_write_string | ( | BlendWriter * | writer, |
| const char * | data_ptr ) |
Write a null terminated string.
Definition at line 1951 of file writefile.cc.
References BLO_write_raw().
Referenced by BKE_animdata_blend_write(), BKE_asset_catalog_path_list_blend_write(), BKE_asset_metadata_write(), BKE_asset_weak_reference_write(), BKE_fcurve_blend_write_data(), BKE_id_blend_write(), BKE_keyingsets_blend_write(), BKE_paint_blend_write(), BKE_preferences_extension_repo_write_data(), BKE_viewer_path_blend_write(), blender::blend_write(), blender::nodes::BakeItemsAccessor::blend_write(), blender::nodes::CaptureAttributeItemsAccessor::blend_write(), blender::nodes::ForeachGeometryElementGenerationItemsAccessor::blend_write(), blender::nodes::ForeachGeometryElementInputItemsAccessor::blend_write(), blender::nodes::ForeachGeometryElementMainItemsAccessor::blend_write(), blender::nodes::MenuSwitchItemsAccessor::blend_write(), blender::nodes::RepeatItemsAccessor::blend_write(), blender::nodes::SimulationItemsAccessor::blend_write(), curve_blend_write(), curves_blend_write(), blender::bke::node_interface::item_types::item_write_data(), mesh_blend_write(), blender::bke::node_tree_blend_write(), blender::ed::asset::shelf::settings_blend_write(), blender::ed::spreadsheet::spreadsheet_blend_write(), text_blend_write(), write_layer(), write_layer_tree_group(), blender::bke::forward_compat::write_node_socket_interface(), write_panel_list(), and write_ui_data().
| void BLO_write_struct_array_at_address_by_id | ( | BlendWriter * | writer, |
| int | struct_id, | ||
| int | array_size, | ||
| const void * | address, | ||
| const void * | data_ptr ) |
Write struct array at address.
Definition at line 1874 of file writefile.cc.
References BLO_CODE_DATA, BlendWriter::wd, and writestruct_at_address_nr().
| void BLO_write_struct_array_by_id | ( | BlendWriter * | writer, |
| int | struct_id, | ||
| int | array_size, | ||
| const void * | data_ptr ) |
Definition at line 1866 of file writefile.cc.
References BLO_CODE_DATA, BlendWriter::wd, and writestruct_nr().
Referenced by BLO_write_struct_array_by_name().
| void BLO_write_struct_array_by_name | ( | BlendWriter * | writer, |
| const char * | struct_name, | ||
| int | array_size, | ||
| const void * | data_ptr ) |
Write struct array.
Definition at line 1833 of file writefile.cc.
References BLO_get_struct_id_by_name(), BLO_write_struct_array_by_id(), CLOG_ERROR, LOG, and UNLIKELY.
Referenced by blend_write_layer_data(), and BLO_write_struct_by_name().
| void BLO_write_struct_at_address_by_id | ( | BlendWriter * | writer, |
| int | struct_id, | ||
| const void * | address, | ||
| const void * | data_ptr ) |
Write single struct at address.
Definition at line 1851 of file writefile.cc.
References BLO_CODE_DATA, and BLO_write_struct_at_address_by_id_with_filecode().
| void BLO_write_struct_at_address_by_id_with_filecode | ( | BlendWriter * | writer, |
| int | filecode, | ||
| int | struct_id, | ||
| const void * | address, | ||
| const void * | data_ptr ) |
Write single struct at address and specify a file-code.
Definition at line 1860 of file writefile.cc.
References BlendWriter::wd, and writestruct_at_address_nr().
Referenced by BLO_write_struct_at_address_by_id().
| void BLO_write_struct_by_id | ( | BlendWriter * | writer, |
| int | struct_id, | ||
| const void * | data_ptr ) |
Definition at line 1846 of file writefile.cc.
References BLO_CODE_DATA, BlendWriter::wd, and writestruct_nr().
Referenced by write_linestyle_alpha_modifiers(), write_linestyle_color_modifiers(), write_linestyle_geometry_modifiers(), and write_linestyle_thickness_modifiers().
| void BLO_write_struct_by_name | ( | BlendWriter * | writer, |
| const char * | struct_name, | ||
| const void * | data_ptr ) |
Write single struct.
Definition at line 1828 of file writefile.cc.
References BLO_write_struct_array_by_name().
Referenced by BKE_constraint_blend_write(), BKE_fmodifiers_blend_write(), BKE_gpencil_modifier_blend_write(), BKE_modifier_blend_write(), BKE_pose_blend_write(), BKE_shaderfx_blend_write(), blender::bke::node_tree_blend_write(), and SEQ_modifier_blend_write().
| void BLO_write_struct_list_by_id | ( | BlendWriter * | writer, |
| int | struct_id, | ||
| const ListBase * | list ) |
Definition at line 1880 of file writefile.cc.
References BLO_CODE_DATA, BlendWriter::wd, and writelist_nr().
Referenced by BLO_write_struct_list_by_name().
| void BLO_write_struct_list_by_name | ( | BlendWriter * | writer, |
| const char * | struct_name, | ||
| ListBase * | list ) |
Write struct list.
Definition at line 1885 of file writefile.cc.
References BLO_get_struct_id_by_name(), BLO_write_struct_list_by_id(), CLOG_ERROR, LOG, and UNLIKELY.
| void BLO_write_uint32_array | ( | BlendWriter * | writer, |
| uint | num, | ||
| const uint32_t * | data_ptr ) |
Definition at line 1926 of file writefile.cc.
References BLO_write_raw().
Referenced by BKE_previewimg_blend_write(), BKE_ptcache_blend_write(), and blend_write().
| void BLO_write_uint8_array | ( | BlendWriter * | writer, |
| uint | num, | ||
| const uint8_t * | data_ptr ) |
Definition at line 1916 of file writefile.cc.
References BLO_write_raw().
Referenced by blend_write_layer_data().
|
static |
Take care using 'use_active_win', since we won't want the currently active window to change which scene renders (currently only used for undo).
Definition at line 845 of file writefile.cc.
References wmWindow::active, BKE_view_layer_find(), BKE_workspace_active_screen_get(), ListBase::first, wmWindow::next, wmWindow::scene, wmWindow::view_layer_name, wmWindowManager::windows, Main::wm, and wmWindow::workspace_hook.
Referenced by write_global(), and write_renderinfo().
|
static |
Do reverse file history: .blend1 -> .blend2, .blend -> .blend1 ... etc.
Definition at line 1517 of file writefile.cc.
References BKE_report(), BLI_exists(), BLI_rename_overwrite(), FILE_MAX, min_ii(), RPT_ERROR, and SNPRINTF.
Referenced by BLO_write_file_impl(), uv_select_similar_face_exec(), uv_select_similar_island_exec(), uvedit_edge_select_enable(), uvedit_edge_select_set(), uvedit_edge_select_set_with_sticky(), uvedit_edge_select_shared_vert(), uvedit_face_select_enable(), uvedit_face_select_set(), uvedit_face_select_set_with_sticky(), uvedit_face_select_shared_vert(), uvedit_uv_select_enable(), uvedit_uv_select_set(), uvedit_uv_select_set_with_sticky(), and uvedit_uv_select_shared_vert().
|
static |
Definition at line 1186 of file writefile.cc.
References CLOG_ERROR, BLO_Write_IDBuffer::id_buffer_static, ID_BUFFER_STATIC_SIZE, BLO_Write_IDBuffer::id_type, LOG, MEM_mallocN, MEM_SAFE_FREE, IDTypeInfo::name, IDTypeInfo::struct_size, and BLO_Write_IDBuffer::temp_id.
Referenced by BLO_write_init_id_buffer_from_id(), and write_file_handle().
|
static |
Definition at line 1209 of file writefile.cc.
References BKE_idtype_get_info_from_id(), BLI_assert, BLI_listbase_clear(), DRW_drawdatalist_from_id(), ID::icon_id, ID_TAG_KEEP_ON_UNDO, BLO_Write_IDBuffer::id_type, ID::newid, ID::next, ID::orig_id, ID::prev, ID::py_instance, IDTypeInfo::struct_size, ID::tag, BLO_Write_IDBuffer::temp_id, and ID::us.
Referenced by BLO_write_init_id_buffer_from_id(), and write_file_handle().
|
static |
Low level WRITE(2) wrapper that buffers data
| adr | Pointer to new chunk of data |
| len | Length of new chunk of data |
Definition at line 542 of file writefile.cc.
References BLI_assert, WriteData::buf, WriteData::buffer, WriteData::chunk_size, WriteData::critical_error, len, WriteData::max_size, UNLIKELY, WriteData::used_len, WriteData::validation_data, and writedata_do_write().
Referenced by write_file_handle(), writedata(), and writestruct_at_address_nr().
BeGiN initializer for mywrite
| ww | File write wrapper. |
| compare | Previous memory file (can be nullptr). |
| current | The current memory file (can be nullptr). |
Definition at line 598 of file writefile.cc.
References BLO_memfile_write_init(), WriteData::mem, WriteData::use_memfile, and writedata_new().
Referenced by write_file_handle().
|
static |
END the mywrite wrapper
Definition at line 616 of file writefile.cc.
References BLO_memfile_write_finalize(), WriteData::buf, WriteData::buffer, WriteData::critical_error, WriteData::mem, WriteData::use_memfile, WriteData::used_len, WriteData::validation_data, writedata_do_write(), and writedata_free().
Referenced by write_file_handle().
|
static |
Flush helps the de-duplicating memory for undo-save by logically segmenting data, so differences in one part of memory won't cause unrelated data to be duplicated.
Definition at line 529 of file writefile.cc.
References WriteData::buf, WriteData::buffer, WriteData::used_len, and writedata_do_write().
Referenced by mywrite_id_end(), write_file_handle(), and write_libraries().
Start writing of data related to a single ID.
Only does something when storing an undo step.
Definition at line 638 of file writefile.cc.
References BLI_assert, MemFileWriteData::current_id_session_uid, MemFileChunk::id_session_uid, MemFileWriteData::id_session_uid_mapping, blender::Set< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::is_empty(), WriteData::is_writing_id, blender::Map< Key, Value, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::lookup_default(), WriteData::mem, WriteData::per_id_addresses_set, MemFileChunk::prev, MemFileWriteData::reference_current_chunk, WriteData::use_memfile, and WriteData::validation_data.
Referenced by write_file_handle().
Start writing of data related to a single ID.
Only does something when storing an undo step.
Definition at line 675 of file writefile.cc.
References BLI_assert, blender::Set< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::clear(), MemFileWriteData::current_id_session_uid, WriteData::is_writing_id, MAIN_ID_SESSION_UID_UNSET, WriteData::mem, mywrite_flush(), WriteData::per_id_addresses_set, WriteData::per_id_written_shared_addresses, WriteData::use_memfile, and WriteData::validation_data.
Referenced by write_file_handle().
Return false if the given 'old' address is not valid in current context. The block should not be written in that case.
Definition at line 704 of file writefile.cc.
References blender::Set< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::add(), BLO_CODE_DATA, CLOG_ERROR, WriteData::is_writing_id, LOG, WriteData::per_id_addresses_set, WriteData::use_memfile, and WriteData::validation_data.
Referenced by writedata(), and writestruct_at_address_nr().
|
static |
When MemFile arguments are non-null, this is a file-safe to memory.
| compare | Previous memory file (can be nullptr). |
| current | The current memory file (can be nullptr). |
Definition at line 1297 of file writefile.cc.
References B_ENDIAN, BKE_idtype_get_info_from_id(), BKE_idtype_idcode_is_linkable(), BKE_lib_override_library_operations_store_end(), BKE_lib_override_library_operations_store_finalize(), BKE_lib_override_library_operations_store_init(), BKE_lib_override_library_operations_store_start(), BKE_library_foreach_ID_link(), BKE_main_id_refcount_recompute(), IDTypeInfo::blend_write, BLENDER_FILE_VERSION, BLI_assert, BLO_CODE_DNA1, BLO_CODE_ENDB, blo_join_main(), blo_split_main(), BLO_write_allocate_id_buffer(), BLO_write_destroy_id_buffer(), BHead::code, SDNA::data, SDNA::data_size, ELEM, ENDIAN_ORDER, ListBase::first, IDTypeInfo::flags, FOREACH_MAIN_ID_BEGIN, FOREACH_MAIN_ID_END, Key::from, GS, id_buffer_init_for_id_type(), id_buffer_init_from_id(), ID_IS_LINKED, ID_IS_OVERRIDE_LIBRARY_REAL, ID_KE, ID_LI, id_lib_extern(), ID_SCE, ID_TAG_INDIRECT, ID_TAG_NO_MAIN, ID_TAG_NO_USER_REFCOUNT, ID_TAG_NOT_ALLOCATED, ID_TAG_RUNTIME, IDTYPE_FLAGS_NEVER_UNUSED, IDWALK_INCLUDE_UI, IDWALK_READONLY, INDEX_ID_MAX, mywrite(), mywrite_begin(), mywrite_end(), mywrite_flush(), mywrite_id_begin(), mywrite_id_end(), ID::name, Main::next, WriteData::sdna, set_listbasepointers(), SNPRINTF, ID::tag, BLO_Write_IDBuffer::temp_id, ID::us, WriteData::use_memfile, USER_EXPERIMENTAL_TEST, write_global(), write_id_direct_linked_data_process_cb(), write_libraries(), write_renderinfo(), write_thumb(), write_userdef(), and writedata().
Referenced by BLO_write_file_impl(), and BLO_write_file_mem().
|
static |
Definition at line 1582 of file writefile.cc.
References BKE_report(), BLO_main_validate_libraries(), G, G_DEBUG_IO, Main::lock, and RPT_DEBUG.
Referenced by BLO_write_file_impl().
|
static |
Definition at line 1558 of file writefile.cc.
References BKE_main_namemap_validate_and_fix(), BKE_report(), BLO_main_validate_libraries(), BLO_main_validate_shapekeys(), G, G_DEBUG_IO, Main::lock, RPT_DEBUG, and RPT_ERROR.
Referenced by BLO_write_file_impl().
Context is usually defined by WM, two cases where no WM is available:
curscreen has to be savedcurscene needs to be saved. Definition at line 1110 of file writefile.cc.
References FileGlobal::_pad, FileGlobal::_pad1, BLENDER_FILE_MIN_SUBVERSION, BLENDER_FILE_MIN_VERSION, BLENDER_FILE_SUBVERSION, BLO_CODE_GLOB, build_commit_timestamp, FileGlobal::build_commit_timestamp, build_hash, FileGlobal::build_hash, FileGlobal::cur_view_layer, current_screen_compat(), FileGlobal::curscene, FileGlobal::curscreen, FileGlobal::fileflags, FileGlobal::filepath, Main::filepath, G, G_FILE_COMPRESS, G_FILE_RECOVER_WRITE, FileGlobal::globalf, FileGlobal::minsubversion, FileGlobal::minversion, scene, SNPRINTF, STRNCPY, FileGlobal::subversion, FileGlobal::subvstr, WriteData::use_memfile, and writestruct.
Referenced by write_file_handle().
|
static |
Definition at line 1257 of file writefile.cc.
References BKE_idtype_idcode_is_linkable(), BLI_assert, LibraryIDLinkCallbackData::cb_flag, GS, ID_IS_LINKED, id_lib_extern(), id_lib_indirect_weak_link(), LibraryIDLinkCallbackData::id_pointer, ID_TAG_RUNTIME, IDWALK_CB_DIRECT_WEAK_LINK, IDWALK_CB_INDIRECT_USAGE, IDWALK_RET_NOP, LibraryIDLinkCallbackData::self_id, and ID::tag.
Referenced by write_file_handle().
|
static |
Definition at line 918 of file writefile.cc.
References BLO_write_struct, IDP_BlendWrite(), and wmKeyMapItem::properties.
Referenced by write_userdef().
Keep it last of write_*_data functions.
Definition at line 1019 of file writefile.cc.
References BKE_id_blend_write(), BKE_idtype_idcode_is_linkable(), BKE_packedfile_blend_write(), CLOG_ERROR, CLOG_INFO, GS, ID_FLAG_INDIRECT_WEAK_LINK, ID_LI, ID_LINK_PLACEHOLDER, ID_TAG_EXTERN, ID_TAG_INDIRECT, INDEX_ID_MAX, LOG, main(), mywrite_flush(), set_listbasepointers(), WriteData::use_memfile, and writestruct.
Referenced by write_file_handle().
This was originally added for the historic render-daemon feature, now write because it can be easily extracted without reading the whole blend file.
See: scripts/modules/blend_render_info.py
Definition at line 895 of file writefile.cc.
References BLO_CODE_REND, current_screen_compat(), data, ID_IS_LINKED, LISTBASE_FOREACH, R_BG_RENDER, Main::scenes, RenderInfo::sfra, STRNCPY, and writedata().
Referenced by write_file_handle().
|
static |
Preview image, first 2 values are width and height second are an RGBA image (uchar).
Definition at line 1165 of file writefile.cc.
References BLEN_THUMB_MEMSIZE_FILE, BLO_CODE_TEST, BlendThumbnail::height, BlendThumbnail::width, and writedata().
Referenced by write_file_handle().
|
static |
Definition at line 926 of file writefile.cc.
References UserDef::addons, UserDef::asset_libraries, UserDef::asset_shelves_settings, UserDef::autoexec_paths, BKE_asset_catalog_path_list_blend_write(), BKE_preferences_extension_repo_write_data(), BLO_CODE_USER, BLO_write_struct, UserDef::extension_repos, IDP_BlendWrite(), LISTBASE_FOREACH, bUserMenuItem_Op::prop, UserDef::script_directories, UserDef::themes, UserDef::uistyles, UserDef::user_keyconfig_prefs, UserDef::user_keymaps, USER_MENU_TYPE_MENU, USER_MENU_TYPE_OPERATOR, USER_MENU_TYPE_PROP, UserDef::user_menus, BlendWriter::wd, write_keymapitem(), and writestruct.
Referenced by write_file_handle().
Definition at line 762 of file writefile.cc.
References BLI_assert_msg, BLI_STATIC_ASSERT, BHead::code, int, BHead::len, len, mywrite(), BHead::nr, BHead::old, SDNA_RAW_DATA_STRUCT_INDEX, BHead::SDNAnr, and write_at_address_validate().
Referenced by BLO_write_raw(), write_file_handle(), write_renderinfo(), and write_thumb().
|
static |
Definition at line 485 of file writefile.cc.
References BLI_assert_msg, BLO_memfile_chunk_add(), WriteData::critical_error, WriteData::mem, UNLIKELY, WriteData::use_memfile, WriteData::validation_data, WriteWrap::write(), and WriteData::ww.
Referenced by mywrite(), mywrite_end(), and mywrite_flush().
|
static |
Definition at line 511 of file writefile.cc.
References WriteData::buf, WriteData::buffer, and MEM_freeN().
Referenced by mywrite_end().
Definition at line 462 of file writefile.cc.
References WriteData::buf, WriteData::buffer, WriteData::chunk_size, DNA_sdna_current_get(), WriteData::max_size, MEM_BUFFER_SIZE, MEM_CHUNK_SIZE, MEM_mallocN, WriteData::sdna, WriteWrap::use_buf, WriteData::ww, ZSTD_BUFFER_SIZE, and ZSTD_CHUNK_SIZE.
Referenced by mywrite_begin().
|
static |
Use this to force writing of lists in same order as reading (using link_list).
Definition at line 797 of file writefile.cc.
References ListBase::first, Link::next, and writestruct_nr().
Referenced by BLO_write_struct_list_by_id().
|
static |
Definition at line 722 of file writefile.cc.
References BLI_assert, BHead::code, DNA_struct_size(), BHead::len, mywrite(), BHead::nr, BHead::old, WriteData::sdna, BHead::SDNAnr, and write_at_address_validate().
Referenced by blo_write_id_struct(), BLO_write_struct_array_at_address_by_id(), BLO_write_struct_at_address_by_id_with_filecode(), and writestruct_nr().
|
static |
Definition at line 753 of file writefile.cc.
References writestruct_at_address_nr().
Referenced by BLO_write_struct_array_by_id(), BLO_write_struct_by_id(), and writelist_nr().
|
static |
Definition at line 149 of file writefile.cc.
Referenced by BLO_write_struct_array_by_name(), BLO_write_struct_list_by_name(), id_buffer_init_for_id_type(), write_at_address_validate(), and write_libraries().