Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntony Riakiotakis <kalast@gmail.com>2012-12-27 00:38:20 +0400
committerAntony Riakiotakis <kalast@gmail.com>2012-12-27 00:38:20 +0400
commitb28848063fec337443af9b77c13143f82d52a53f (patch)
treebe6a7ff2e3c482ff77fc6d4012208fdfdac3253d /source/blender/editors/object/object_bake.c
parent7b938abe2b85eae1fdfe8d584935f4ec4d94f297 (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.c13
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;
}