From b28848063fec337443af9b77c13143f82d52a53f Mon Sep 17 00:00:00 2001 From: Antony Riakiotakis Date: Wed, 26 Dec 2012 20:38:20 +0000 Subject: Fix: after multires baking, gpu textures were not getting invalidated for images and viewport was not getting refreshed with new baked textures. Now made sure this happens. The image list is copied to the job custom data so that the custom data cleanup function can properly delete them (if gpu image texture deletion does not happen on main thread, image bindcodes will remain intact for original images) --- source/blender/editors/object/object_bake.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'source/blender/editors/object') diff --git a/source/blender/editors/object/object_bake.c b/source/blender/editors/object/object_bake.c index d3ebd1dae0a..f36c6d79783 100644 --- a/source/blender/editors/object/object_bake.c +++ b/source/blender/editors/object/object_bake.c @@ -89,6 +89,7 @@ typedef struct MultiresBakerJobData { struct MultiresBakerJobData *next, *prev; DerivedMesh *lores_dm, *hires_dm; int simple, lvl, tot_lvl; + ListBase images; } MultiresBakerJobData; /* data passing to multires-baker job */ @@ -429,7 +430,7 @@ static void multiresbake_startjob(void *bkv, short *stop, short *do_update, floa RE_multires_bake_images(&bkr); - BLI_freelistN(&bkr.image); + data->images = bkr.image; baked_objects++; } @@ -439,12 +440,22 @@ static void multiresbake_freejob(void *bkv) { MultiresBakeJob *bkj = bkv; MultiresBakerJobData *data, *next; + LinkData *link; data = bkj->data.first; while (data) { next = data->next; data->lores_dm->release(data->lores_dm); data->hires_dm->release(data->hires_dm); + + /* delete here, since this delete will be called from main thread */ + for (link = data->images.first; link; link = link->next) { + Image *ima = (Image *)link->data; + GPU_free_image(ima); + } + + BLI_freelistN(&data->images); + MEM_freeN(data); data = next; } -- cgit v1.2.3