Cleanup: CacheFile: Move to IDTypeInfo and remove unused BKE API.

This commit is contained in:
2020-03-09 12:21:45 +01:00
parent 613148ce5b
commit b57d3afb76
6 changed files with 58 additions and 66 deletions

View File

@@ -39,18 +39,8 @@ void BKE_cachefiles_exit(void);
void *BKE_cachefile_add(struct Main *bmain, const char *name); void *BKE_cachefile_add(struct Main *bmain, const char *name);
void BKE_cachefile_init(struct CacheFile *cache_file);
void BKE_cachefile_free(struct CacheFile *cache_file);
void BKE_cachefile_copy_data(struct Main *bmain,
struct CacheFile *cache_file_dst,
const struct CacheFile *cache_file_src,
const int flag);
struct CacheFile *BKE_cachefile_copy(struct Main *bmain, const struct CacheFile *cache_file); struct CacheFile *BKE_cachefile_copy(struct Main *bmain, const struct CacheFile *cache_file);
void BKE_cachefile_make_local(struct Main *bmain, struct CacheFile *cache_file, const int flags);
void BKE_cachefile_reload(struct Depsgraph *depsgraph, struct CacheFile *cache_file); void BKE_cachefile_reload(struct Depsgraph *depsgraph, struct CacheFile *cache_file);
void BKE_cachefile_eval(struct Main *bmain, void BKE_cachefile_eval(struct Main *bmain,

View File

@@ -157,7 +157,7 @@ extern IDTypeInfo IDType_ID_WM;
// extern IDTypeInfo IDType_ID_LS; // extern IDTypeInfo IDType_ID_LS;
// extern IDTypeInfo IDType_ID_PAL; // extern IDTypeInfo IDType_ID_PAL;
// extern IDTypeInfo IDType_ID_PC; // extern IDTypeInfo IDType_ID_PC;
// extern IDTypeInfo IDType_ID_CF; extern IDTypeInfo IDType_ID_CF;
extern IDTypeInfo IDType_ID_WS; extern IDTypeInfo IDType_ID_WS;
extern IDTypeInfo IDType_ID_LP; extern IDTypeInfo IDType_ID_LP;

View File

@@ -37,8 +37,11 @@
#include "BLI_string.h" #include "BLI_string.h"
#include "BLI_threads.h" #include "BLI_threads.h"
#include "BLT_translation.h"
#include "BKE_animsys.h" #include "BKE_animsys.h"
#include "BKE_cachefile.h" #include "BKE_cachefile.h"
#include "BKE_idtype.h"
#include "BKE_lib_id.h" #include "BKE_lib_id.h"
#include "BKE_main.h" #include "BKE_main.h"
#include "BKE_modifier.h" #include "BKE_modifier.h"
@@ -50,6 +53,54 @@
# include "ABC_alembic.h" # include "ABC_alembic.h"
#endif #endif
static void cachefile_handle_free(CacheFile *cache_file);
static void cache_file_init_data(ID *id)
{
CacheFile *cache_file = (CacheFile *)id;
BLI_assert(MEMCMP_STRUCT_AFTER_IS_ZERO(cache_file, id));
cache_file->scale = 1.0f;
}
static void cache_file_copy_data(Main *UNUSED(bmain),
ID *id_dst,
const ID *id_src,
const int UNUSED(flag))
{
CacheFile *cache_file_dst = (CacheFile *)id_dst;
const CacheFile *cache_file_src = (const CacheFile *)id_src;
cache_file_dst->handle = NULL;
cache_file_dst->handle_readers = NULL;
BLI_duplicatelist(&cache_file_dst->object_paths, &cache_file_src->object_paths);
}
static void cache_file_free_data(ID *id)
{
CacheFile *cache_file = (CacheFile *)id;
BKE_animdata_free((ID *)cache_file, false);
cachefile_handle_free(cache_file);
BLI_freelistN(&cache_file->object_paths);
}
IDTypeInfo IDType_ID_CF = {
.id_code = ID_CF,
.id_filter = FILTER_ID_CF,
.main_listbase_index = INDEX_ID_CF,
.struct_size = sizeof(CacheFile),
.name = "CacheFile",
.name_plural = "cache_files",
.translation_context = BLT_I18NCONTEXT_ID_CACHEFILE,
.flags = 0,
.init_data = cache_file_init_data,
.copy_data = cache_file_copy_data,
.free_data = cache_file_free_data,
.make_local = NULL,
};
/* TODO: make this per cache file to avoid global locks. */ /* TODO: make this per cache file to avoid global locks. */
static SpinLock spin; static SpinLock spin;
@@ -157,53 +208,11 @@ void *BKE_cachefile_add(Main *bmain, const char *name)
{ {
CacheFile *cache_file = BKE_libblock_alloc(bmain, ID_CF, name, 0); CacheFile *cache_file = BKE_libblock_alloc(bmain, ID_CF, name, 0);
BKE_cachefile_init(cache_file); cache_file_init_data(&cache_file->id);
return cache_file; return cache_file;
} }
void BKE_cachefile_init(CacheFile *cache_file)
{
cache_file->filepath[0] = '\0';
cache_file->override_frame = false;
cache_file->frame = 0.0f;
cache_file->is_sequence = false;
cache_file->scale = 1.0f;
BLI_listbase_clear(&cache_file->object_paths);
cache_file->handle = NULL;
cache_file->handle_filepath[0] = '\0';
cache_file->handle_readers = NULL;
}
/** Free (or release) any data used by this cachefile (does not free the cachefile itself). */
void BKE_cachefile_free(CacheFile *cache_file)
{
BKE_animdata_free((ID *)cache_file, false);
cachefile_handle_free(cache_file);
BLI_freelistN(&cache_file->object_paths);
}
/**
* Only copy internal data of CacheFile ID from source to already
* allocated/initialized destination.
* You probably never want to use that directly,
* use #BKE_id_copy or #BKE_id_copy_ex for typical needs.
*
* WARNING! This function will not handle ID user count!
*
* \param flag: Copying options (see BKE_lib_id.h's LIB_ID_COPY_... flags for more).
*/
void BKE_cachefile_copy_data(Main *UNUSED(bmain),
CacheFile *cache_file_dst,
const CacheFile *UNUSED(cache_file_src),
const int UNUSED(flag))
{
cache_file_dst->handle = NULL;
cache_file_dst->handle_readers = NULL;
BLI_duplicatelist(&cache_file_dst->object_paths, &cache_file_dst->object_paths);
}
CacheFile *BKE_cachefile_copy(Main *bmain, const CacheFile *cache_file) CacheFile *BKE_cachefile_copy(Main *bmain, const CacheFile *cache_file)
{ {
CacheFile *cache_file_copy; CacheFile *cache_file_copy;
@@ -211,11 +220,6 @@ CacheFile *BKE_cachefile_copy(Main *bmain, const CacheFile *cache_file)
return cache_file_copy; return cache_file_copy;
} }
void BKE_cachefile_make_local(Main *bmain, CacheFile *cache_file, const int flags)
{
BKE_lib_id_make_local_generic(bmain, &cache_file->id, flags);
}
void BKE_cachefile_reload(Depsgraph *depsgraph, CacheFile *cache_file) void BKE_cachefile_reload(Depsgraph *depsgraph, CacheFile *cache_file)
{ {
/* To force reload, free the handle and tag depsgraph to load it again. */ /* To force reload, free the handle and tag depsgraph to load it again. */

View File

@@ -84,7 +84,7 @@ static void id_type_init(void)
// INIT_TYPE(ID_LS); // INIT_TYPE(ID_LS);
// INIT_TYPE(ID_PAL); // INIT_TYPE(ID_PAL);
// INIT_TYPE(ID_PC); // INIT_TYPE(ID_PC);
// INIT_TYPE(ID_CF); INIT_TYPE(ID_CF);
INIT_TYPE(ID_WS); INIT_TYPE(ID_WS);
INIT_TYPE(ID_LP); INIT_TYPE(ID_LP);

View File

@@ -568,9 +568,7 @@ bool BKE_lib_id_make_local(Main *bmain, ID *id, const bool test, const int flags
} }
return true; return true;
case ID_CF: case ID_CF:
if (!test) { BLI_assert(0);
BKE_cachefile_make_local(bmain, (CacheFile *)id, flags);
}
return true; return true;
case ID_WS: case ID_WS:
case ID_SCR: case ID_SCR:
@@ -772,7 +770,7 @@ bool BKE_id_copy_ex(Main *bmain, const ID *id, ID **r_newid, const int flag)
BKE_paint_curve_copy_data(bmain, (PaintCurve *)*r_newid, (PaintCurve *)id, flag); BKE_paint_curve_copy_data(bmain, (PaintCurve *)*r_newid, (PaintCurve *)id, flag);
break; break;
case ID_CF: case ID_CF:
BKE_cachefile_copy_data(bmain, (CacheFile *)*r_newid, (CacheFile *)id, flag); BLI_assert(0);
break; break;
case ID_SO: case ID_SO:
BLI_assert(0); BLI_assert(0);
@@ -1391,7 +1389,7 @@ void BKE_libblock_init_empty(ID *id)
BKE_linestyle_init((FreestyleLineStyle *)id); BKE_linestyle_init((FreestyleLineStyle *)id);
break; break;
case ID_CF: case ID_CF:
BKE_cachefile_init((CacheFile *)id); BLI_assert(0);
break; break;
case ID_KE: case ID_KE:
/* Shapekeys are a complex topic too - they depend on their 'user' data type... /* Shapekeys are a complex topic too - they depend on their 'user' data type...

View File

@@ -238,7 +238,7 @@ void BKE_libblock_free_datablock(ID *id, const int UNUSED(flag))
BKE_paint_curve_free((PaintCurve *)id); BKE_paint_curve_free((PaintCurve *)id);
break; break;
case ID_CF: case ID_CF:
BKE_cachefile_free((CacheFile *)id); BLI_assert(0);
break; break;
case ID_WS: case ID_WS:
BLI_assert(0); BLI_assert(0);