69 if (
G.log.file !=
nullptr) {
70 fclose(
static_cast<FILE *
>(
G.log.file));
103 const char *version_cycle =
"";
104 const char *version_cycle_compact =
"";
106 version_cycle =
" Alpha";
107 version_cycle_compact =
" a";
110 version_cycle =
" Beta";
111 version_cycle_compact =
" b";
114 version_cycle =
" Release Candidate";
115 version_cycle_compact =
" RC";
119 version_cycle_compact =
"";
140 version_cycle_compact);
154 const size_t str_buff_maxncpy,
155 const short file_version,
156 const short file_subversion)
158 const short file_version_major = file_version / 100;
159 const short file_version_minor = file_version % 100;
160 if (file_subversion >= 0) {
169 BLI_snprintf(str_buff, str_buff_maxncpy,
"%d.%d", file_version_major, file_version_minor);
200 STRNCPY(
G.filepath_last_image,
"//");
201 G.filepath_last_blend[0] =
'\0';
203#ifndef WITH_PYTHON_SECURITY
211 G.profile_gpu =
false;
270 MEM_delete(kmi->
ptr);
276 blender::dna::shallow_swap(*userdef_a, *userdef_b);
298 if (kmdi->add_item) {
302 if (kmdi->remove_item) {
327 kpt_next = kpt->next;
350 addon_next = addon->next;
358#define U BLI_STATIC_ASSERT(false, "Global 'U' not allowed, only use arguments passed in!")
411#define VALUE_SWAP(id) \
413 std::swap(userdef_a->id, userdef_b->id); \
416#define DATA_SWAP(id) \
418 UserDef userdef_tmp; \
419 memcpy(&(userdef_tmp.id), &(userdef_a->id), sizeof(userdef_tmp.id)); \
420 memcpy(&(userdef_a->id), &(userdef_b->id), sizeof(userdef_tmp.id)); \
421 memcpy(&(userdef_b->id), &(userdef_tmp.id), sizeof(userdef_tmp.id)); \
425#define FLAG_SWAP(id, ty, flags) \
427 CHECK_TYPE(&(userdef_a->id), ty *); \
428 const ty f = flags; \
429 const ty a = userdef_a->id; \
430 const ty b = userdef_b->id; \
431 userdef_a->id = (userdef_a->id & ~f) | (b & f); \
432 userdef_b->id = (userdef_b->id & ~f) | (a & f); \
void BKE_addon_free(struct bAddon *addon)
const char * BKE_tempdir_base() ATTR_WARN_UNUSED_RESULT ATTR_RETURNS_NONNULL
void BKE_asset_catalog_path_list_free(ListBase &catalog_path_list)
#define BLENDER_VERSION_PATCH
#define BLENDER_VERSION_CYCLE
#define BLENDER_VERSION_SUFFIX
void BKE_brush_system_exit()
void BKE_callback_global_finalize()
void IDP_FreeProperty(IDProperty *prop)
void BKE_main_free(Main *bmain)
void BKE_spacetypes_free()
void BKE_studiolight_free(void)
void BLF_default_set(int fontid)
bool BLF_unload_id(int fontid)
#define BLI_assert_msg(a, msg)
void BLI_kdtree_nd_ free(KDTree *tree)
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE void BLI_listbase_clear(ListBase *lb)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
void void BLI_freelistN(ListBase *listbase) ATTR_NONNULL(1)
void void void const char * BLI_path_basename(const char *path) ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT
bool BLI_path_extension_replace(char *path, size_t path_maxncpy, const char *ext) ATTR_NONNULL(1
#define BLI_path_join(...)
#define SNPRINTF(dst, format,...)
char * STRNCPY(char(&dst)[N], const char *src)
size_t BLI_snprintf(char *__restrict dst, size_t dst_maxncpy, const char *__restrict format,...) ATTR_NONNULL(1
void DEG_free_node_types()
@ USER_SHOW_GIZMO_NAVIGATE
void IMB_moviecache_destruct()
Read Guarded memory(de)allocation.
static struct AtExitData * g_atexit
void BKE_blender_userdef_data_swap(UserDef *userdef_a, UserDef *userdef_b)
static char blender_version_string[48]
static void blender_version_init()
static void userdef_free_keymaps(UserDef *userdef)
const char * BKE_blender_version_string_compact()
bool BKE_blender_version_is_alpha()
Main * BKE_blender_globals_main_swap(Main *new_gmain)
void BKE_blender_userdef_data_set(UserDef *userdef)
const char * BKE_blender_version_string()
static void userdef_free_addons(UserDef *userdef)
void BKE_blender_globals_main_replace(Main *bmain)
static void userdef_free_user_menus(UserDef *userdef)
void BKE_blender_userdef_app_template_data_set_and_free(UserDef *userdef)
void BKE_blender_atexit_register(void(*func)(void *user_data), void *user_data)
void BKE_blender_globals_crash_path_get(char filepath[FILE_MAX])
void BKE_blender_atexit()
void BKE_blender_atexit_unregister(void(*func)(void *user_data), const void *user_data)
void BKE_blender_globals_init()
void BKE_blender_version_blendfile_string_from_values(char *str_buff, const size_t str_buff_maxncpy, const short file_version, const short file_subversion)
void BKE_blender_userdef_data_set_and_free(UserDef *userdef)
void BKE_blender_globals_clear()
void BKE_blender_userdef_app_template_data_set(UserDef *userdef)
#define FLAG_SWAP(id, ty, flags)
void BKE_blender_userdef_app_template_data_swap(UserDef *userdef_a, UserDef *userdef_b)
void BKE_blender_userdef_data_free(UserDef *userdef, bool clear_fonts)
static void keymap_item_free(wmKeyMapItem *kmi)
static char blender_version_string_compact[48]
static void userdef_free_keyconfig_prefs(UserDef *userdef)
bool BKE_blender_version_is_lts()
void MEM_freeN(void *vmemh)
void(* func)(void *user_data)
ListBase script_directories
struct ListBase asset_shelves_settings
struct ListBase user_keymaps
struct ListBase autoexec_paths
struct ListBase user_keyconfig_prefs
struct ListBase extension_repos
struct ListBase user_menus
struct ListBase asset_libraries
void RE_texture_rng_exit()