Runtime cache preservation during undo: add support for nodes and embedded IDs.
This commit is contained in:
@@ -315,6 +315,33 @@ static void node_foreach_id(ID *id, LibraryForeachIDData *data)
|
||||
}
|
||||
}
|
||||
|
||||
static void node_foreach_cache(ID *id,
|
||||
IDTypeForeachCacheFunctionCallback function_callback,
|
||||
void *user_data)
|
||||
{
|
||||
bNodeTree *nodetree = (bNodeTree *)id;
|
||||
IDCacheKey key = {
|
||||
.id_session_uuid = id->session_uuid,
|
||||
.offset_in_ID = offsetof(bNodeTree, previews),
|
||||
.cache_v = nodetree->previews,
|
||||
};
|
||||
|
||||
/* TODO, see also `direct_link_nodetree()` in readfile.c. */
|
||||
#if 0
|
||||
function_callback(id, &key, (void **)&nodetree->previews, 0, user_data);
|
||||
#endif
|
||||
|
||||
if (nodetree->type == NTREE_COMPOSIT) {
|
||||
for (bNode *node = nodetree->nodes.first; node; node = node->next) {
|
||||
if (node->type == CMP_NODE_MOVIEDISTORTION) {
|
||||
key.offset_in_ID = (size_t)BLI_ghashutil_strhash_p(node->name);
|
||||
key.cache_v = node->storage;
|
||||
function_callback(id, &key, (void **)&node->storage, 0, user_data);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
IDTypeInfo IDType_ID_NT = {
|
||||
.id_code = ID_NT,
|
||||
.id_filter = FILTER_ID_NT,
|
||||
@@ -330,6 +357,7 @@ IDTypeInfo IDType_ID_NT = {
|
||||
.free_data = ntree_free_data,
|
||||
.make_local = NULL,
|
||||
.foreach_id = node_foreach_id,
|
||||
.foreach_cache = node_foreach_cache,
|
||||
};
|
||||
|
||||
static void node_add_sockets_from_type(bNodeTree *ntree, bNode *node, bNodeType *ntype)
|
||||
|
||||
Reference in New Issue
Block a user