diff options
-rw-r--r-- | source/blender/blenkernel/intern/image.c | 5 | ||||
-rw-r--r-- | source/blender/imbuf/IMB_imbuf_types.h | 1 | ||||
-rw-r--r-- | source/blender/imbuf/intern/moviecache.c | 4 |
3 files changed, 9 insertions, 1 deletions
diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c index f83112ba283..636c08fd560 100644 --- a/source/blender/blenkernel/intern/image.c +++ b/source/blender/blenkernel/intern/image.c @@ -137,6 +137,9 @@ static void imagecache_put(Image *image, int index, ImBuf *ibuf) ImageCacheKey key; if (image->cache == NULL) { + // char cache_name[64]; + // BLI_snprintf(cache_name, sizeof(cache_name), "Image Datablock %s", image->id.name); + image->cache = IMB_moviecache_create("Image Datablock Cache", sizeof(ImageCacheKey), imagecache_hashhash, imagecache_hashcmp); } @@ -3099,6 +3102,7 @@ static ImBuf *image_acquire_ibuf(Image *ima, ImageUser *iuser, void **lock_r) /* always verify entirely, and potentially * returns pointer to release later */ ibuf = image_get_render_result(ima, iuser, lock_r); + ibuf->userflags |= IB_PERSISTENT; } else if (ima->type == IMA_TYPE_COMPOSITE) { /* requires lock/unlock, otherwise don't return image */ @@ -3117,6 +3121,7 @@ static ImBuf *image_acquire_ibuf(Image *ima, ImageUser *iuser, void **lock_r) ibuf = IMB_allocImBuf(256, 256, 32, IB_rect); image_assign_ibuf(ima, ibuf, 0, frame); } + ibuf->userflags |= IB_PERSISTENT; } } } diff --git a/source/blender/imbuf/IMB_imbuf_types.h b/source/blender/imbuf/IMB_imbuf_types.h index d20130805c0..44cb7f1211e 100644 --- a/source/blender/imbuf/IMB_imbuf_types.h +++ b/source/blender/imbuf/IMB_imbuf_types.h @@ -150,6 +150,7 @@ typedef struct ImBuf { #define IB_MIPMAP_INVALID (1 << 2) /* image mipmaps are invalid, need recreate */ #define IB_RECT_INVALID (1 << 3) /* float buffer changed, needs recreation of byte rect */ #define IB_DISPLAY_BUFFER_INVALID (1 << 4) /* either float or byte buffer changed, need to re-calculate display buffers */ +#define IB_PERSISTENT (1 << 5) /* image buffer is persistent in the memory and should never be removed from the cache */ /** * \name Imbuf Component flags diff --git a/source/blender/imbuf/intern/moviecache.c b/source/blender/imbuf/intern/moviecache.c index 3718cb270c9..00d9dd2fe04 100644 --- a/source/blender/imbuf/intern/moviecache.c +++ b/source/blender/imbuf/intern/moviecache.c @@ -262,7 +262,9 @@ static bool get_item_destroyable(void *item_v) * * Such buffers are never to be freed. */ - if (item->ibuf->userflags & IB_BITMAPDIRTY) { + if ((item->ibuf->userflags & IB_BITMAPDIRTY) || + (item->ibuf->userflags & IB_PERSISTENT)) + { return false; } return true; |