Alembic: fixed refcount issue when duplicating imported objects

Duplicating an imported object didn't increment the cache reader's refcount,
whereas removing the duplicate did decrement it. This caused problems.
This commit is contained in:
Sybren A. Stüvel 2017-04-26 15:12:51 +02:00
parent ff1f115706
commit 20621d46d1
4 changed files with 14 additions and 0 deletions

View File

@ -121,6 +121,7 @@ struct DerivedMesh *ABC_read_mesh(struct CacheReader *reader,
const char **err_str,
int flags);
void CacheReader_incref(struct CacheReader *reader);
void CacheReader_free(struct CacheReader *reader);
struct CacheReader *CacheReader_open_alembic_object(struct AbcArchiveHandle *handle,

View File

@ -370,4 +370,5 @@ void AbcObjectReader::incref()
void AbcObjectReader::decref()
{
--m_refcount;
BLI_assert(m_refcount >= 0);
}

View File

@ -980,6 +980,12 @@ void CacheReader_free(CacheReader *reader)
}
}
void CacheReader_incref(CacheReader *reader)
{
AbcObjectReader *abc_reader = reinterpret_cast<AbcObjectReader *>(reader);
abc_reader->incref();
}
CacheReader *CacheReader_open_alembic_object(AbcArchiveHandle *handle, CacheReader *reader, Object *object, const char *object_path)
{
if (object_path[0] == '\0') {

View File

@ -4386,6 +4386,12 @@ static void transformcache_copy(bConstraint *con, bConstraint *srccon)
BLI_strncpy(dst->object_path, src->object_path, sizeof(dst->object_path));
dst->cache_file = src->cache_file;
#ifdef WITH_ALEMBIC
if (dst->reader) {
CacheReader_incref(dst->reader);
}
#endif
}
static void transformcache_free(bConstraint *con)