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:
-rw-r--r--source/blender/blenkernel/intern/image.c5
-rw-r--r--source/blender/imbuf/IMB_imbuf_types.h1
-rw-r--r--source/blender/imbuf/intern/moviecache.c4
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;