Fix T63349: image texture garbage collection causing freezes
authorBrecht Van Lommel <brechtvanlommel@gmail.com>
Mon, 15 Jul 2019 13:40:09 +0000 (15:40 +0200)
committerBrecht Van Lommel <brechtvanlommel@gmail.com>
Mon, 15 Jul 2019 15:24:20 +0000 (17:24 +0200)
Images were being freed often because the tagging for when the image was last
used was missing.

Differential Revision: https://developer.blender.org/D5252

source/blender/editors/space_image/image_draw.c
source/blender/gpu/intern/gpu_draw.c

index 86db6d50fcc68158ca8952ca0872b09a053e1dd3..3825389062424695a7f162099c4ce2e7f754d426 100644 (file)
@@ -797,6 +797,9 @@ void draw_image_main(const bContext *C, ARegion *ar)
   ima = ED_space_image(sima);
   ED_space_image_get_zoom(sima, ar, &zoomx, &zoomy);
 
+  /* Tag image as in active use for garbage collector. */
+  BKE_image_tag_time(ima);
+
   show_viewer = (ima && ima->source == IMA_SRC_VIEWER) != 0;
   show_render = (show_viewer && ima->type == IMA_TYPE_R_RESULT) != 0;
   show_paint = (ima && (sima->mode == SI_MODE_PAINT) && (show_viewer == false) &&
index d1d5e1d89a2bd6294ba6a8718333d0f2f65e1870..be3655648f5780a79489f82140d70d96af6041c6 100644 (file)
@@ -475,6 +475,9 @@ GPUTexture *GPU_texture_from_blender(Image *ima, ImageUser *iuser, int textarget
     ima->gpuflag &= ~IMA_GPU_REFRESH;
   }
 
+  /* Tag as in active use for garbage collector. */
+  BKE_image_tag_time(ima);
+
   /* Test if we already have a texture. */
   GPUTexture **tex = gpu_get_image_gputexture(ima, textarget);
   if (*tex) {