diff options
-rw-r--r-- | source/blender/blenkernel/intern/image.c | 10 | ||||
-rw-r--r-- | source/blender/imbuf/intern/moviecache.c | 12 |
2 files changed, 17 insertions, 5 deletions
diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c index aaeead431b9..7d8ada0fa68 100644 --- a/source/blender/blenkernel/intern/image.c +++ b/source/blender/blenkernel/intern/image.c @@ -3058,7 +3058,6 @@ static ImBuf *image_acquire_ibuf(Image *ima, ImageUser *iuser, void **lock_r) if (ima->type == IMA_TYPE_MULTILAYER) /* keeps render result, stores ibufs in listbase, allows saving */ ibuf = image_get_ibuf_multilayer(ima, iuser); - } else if (ima->source == IMA_SRC_GENERATED) { /* generated is: ibuf is allocated dynamically */ @@ -3076,9 +3075,6 @@ 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); - if (ibuf) { - ibuf->userflags |= IB_PERSISTENT; - } } else if (ima->type == IMA_TYPE_COMPOSITE) { /* requires lock/unlock, otherwise don't return image */ @@ -3097,10 +3093,14 @@ 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; } } } + + /* We only want movies and sequences to be memory limited. */ + if (ibuf != NULL && !ELEM(ima->source, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE)) { + ibuf->userflags |= IB_PERSISTENT; + } } BKE_image_tag_time(ima); diff --git a/source/blender/imbuf/intern/moviecache.c b/source/blender/imbuf/intern/moviecache.c index 07ce3c39d73..f699afd3475 100644 --- a/source/blender/imbuf/intern/moviecache.c +++ b/source/blender/imbuf/intern/moviecache.c @@ -200,6 +200,18 @@ static size_t IMB_get_size_in_memory(ImBuf *ibuf) int a; size_t size = 0, channel_size = 0; + /* Persistent images should have no affect on how "normal" + * images are cached. + * + * This is a bit arbitrary, but would make it so only movies + * and sequences are memory limited, keeping textures in the + * memory in order to avoid constant file reload on viewport + * update. + */ + if (ibuf->userflags & IB_PERSISTENT) { + return 0; + } + size += sizeof(ImBuf); if (ibuf->rect) |