diff options
author | Antony Riakiotakis <kalast@gmail.com> | 2012-12-27 00:38:20 +0400 |
---|---|---|
committer | Antony Riakiotakis <kalast@gmail.com> | 2012-12-27 00:38:20 +0400 |
commit | b28848063fec337443af9b77c13143f82d52a53f (patch) | |
tree | be6a7ff2e3c482ff77fc6d4012208fdfdac3253d /source/blender/editors/object/object_bake.c | |
parent | 7b938abe2b85eae1fdfe8d584935f4ec4d94f297 (diff) |
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)
Diffstat (limited to 'source/blender/editors/object/object_bake.c')
-rw-r--r-- | source/blender/editors/object/object_bake.c | 13 |
1 files changed, 12 insertions, 1 deletions
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; } |