Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2013-12-10 12:40:09 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2013-12-22 12:44:56 +0400
commit78698a2ecf9d17340ce337ecf73ce6e355299f89 (patch)
treeb25d5e7a6b53a3c51733b5319b0b9535e037bf6a /source/blender/imbuf/intern/moviecache.c
parentc7a970a78eab2dea902b202d583fa98f70b54ba3 (diff)
Add ItemDestroyable to the cache limitor
This callback is used when cache limiter needs to remove some cached objects when running out of limit. From blender side it's used to keep painted images always in memory. This fixes issue when painted images were removing from the memory after image cache rewrite.
Diffstat (limited to 'source/blender/imbuf/intern/moviecache.c')
-rw-r--r--source/blender/imbuf/intern/moviecache.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/source/blender/imbuf/intern/moviecache.c b/source/blender/imbuf/intern/moviecache.c
index c042831a93f..3718cb270c9 100644
--- a/source/blender/imbuf/intern/moviecache.c
+++ b/source/blender/imbuf/intern/moviecache.c
@@ -254,11 +254,26 @@ static int get_item_priority(void *item_v, int default_priority)
return priority;
}
+static bool get_item_destroyable(void *item_v)
+{
+ MovieCacheItem *item = (MovieCacheItem *) item_v;
+ /* IB_BITMAPDIRTY means image was modified from inside blender and
+ * changes are not saved to disk.
+ *
+ * Such buffers are never to be freed.
+ */
+ if (item->ibuf->userflags & IB_BITMAPDIRTY) {
+ return false;
+ }
+ return true;
+}
+
void IMB_moviecache_init(void)
{
limitor = new_MEM_CacheLimiter(IMB_moviecache_destructor, get_item_size);
MEM_CacheLimiter_ItemPriority_Func_set(limitor, get_item_priority);
+ MEM_CacheLimiter_ItemDestroyable_Func_set(limitor, get_item_destroyable);
}
void IMB_moviecache_destruct(void)