forked from bartvdbraak/blender
Fix T39395: Switching to "Textured solid" and "GLSL" view will cause the FPS drop to 0
Issue was caused by the cache limitor which was removing 4k textures from the memory when accessing other images. This is pretty much awful situation and solved by making it so only image sequences and movies ace cache-guarded. Could be optimized further so images used by viewport are not being freed, but that's much more tricky to do.. This is a nice candidature for 'a'.
This commit is contained in:
parent
bd57ec686c
commit
6452d9f02f
@ -3058,7 +3058,6 @@ static ImBuf *image_acquire_ibuf(Image *ima, ImageUser *iuser, void **lock_r)
|
|||||||
if (ima->type == IMA_TYPE_MULTILAYER)
|
if (ima->type == IMA_TYPE_MULTILAYER)
|
||||||
/* keeps render result, stores ibufs in listbase, allows saving */
|
/* keeps render result, stores ibufs in listbase, allows saving */
|
||||||
ibuf = image_get_ibuf_multilayer(ima, iuser);
|
ibuf = image_get_ibuf_multilayer(ima, iuser);
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (ima->source == IMA_SRC_GENERATED) {
|
else if (ima->source == IMA_SRC_GENERATED) {
|
||||||
/* generated is: ibuf is allocated dynamically */
|
/* 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
|
/* always verify entirely, and potentially
|
||||||
* returns pointer to release later */
|
* returns pointer to release later */
|
||||||
ibuf = image_get_render_result(ima, iuser, lock_r);
|
ibuf = image_get_render_result(ima, iuser, lock_r);
|
||||||
if (ibuf) {
|
|
||||||
ibuf->userflags |= IB_PERSISTENT;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (ima->type == IMA_TYPE_COMPOSITE) {
|
else if (ima->type == IMA_TYPE_COMPOSITE) {
|
||||||
/* requires lock/unlock, otherwise don't return image */
|
/* 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);
|
ibuf = IMB_allocImBuf(256, 256, 32, IB_rect);
|
||||||
image_assign_ibuf(ima, ibuf, 0, frame);
|
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);
|
BKE_image_tag_time(ima);
|
||||||
|
@ -200,6 +200,18 @@ static size_t IMB_get_size_in_memory(ImBuf *ibuf)
|
|||||||
int a;
|
int a;
|
||||||
size_t size = 0, channel_size = 0;
|
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);
|
size += sizeof(ImBuf);
|
||||||
|
|
||||||
if (ibuf->rect)
|
if (ibuf->rect)
|
||||||
|
Loading…
Reference in New Issue
Block a user