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:
authorCampbell Barton <ideasman42@gmail.com>2021-09-06 13:04:26 +0300
committerCampbell Barton <ideasman42@gmail.com>2021-09-06 13:05:58 +0300
commit687f70ceca88324fb8f376e086a55b341dd34e6f (patch)
tree1d9b467aecc63dbb78c77d67d046e3a86527cef1 /source/blender/blenkernel/intern/studiolight.c
parenta0912ff5663b950222ef00485a3853bfb6001db4 (diff)
ImBuf: add IMB_allocFromBufferOwn that takes ownership of the buffer
Avoids duplicating the image buffer when saving thumbnails.
Diffstat (limited to 'source/blender/blenkernel/intern/studiolight.c')
-rw-r--r--source/blender/blenkernel/intern/studiolight.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/source/blender/blenkernel/intern/studiolight.c b/source/blender/blenkernel/intern/studiolight.c
index 95436372a65..29f726ece71 100644
--- a/source/blender/blenkernel/intern/studiolight.c
+++ b/source/blender/blenkernel/intern/studiolight.c
@@ -439,17 +439,15 @@ static void studiolight_load_equirect_image(StudioLight *sl)
if (ctx.diffuse_pass != NULL) {
float *converted_pass = studiolight_multilayer_convert_pass(
ibuf, ctx.diffuse_pass, ctx.num_diffuse_channels);
- diffuse_ibuf = IMB_allocFromBuffer(
+ diffuse_ibuf = IMB_allocFromBufferOwn(
NULL, converted_pass, ibuf->x, ibuf->y, ctx.num_diffuse_channels);
- MEM_freeN(converted_pass);
}
if (ctx.specular_pass != NULL) {
float *converted_pass = studiolight_multilayer_convert_pass(
ibuf, ctx.specular_pass, ctx.num_specular_channels);
- specular_ibuf = IMB_allocFromBuffer(
+ specular_ibuf = IMB_allocFromBufferOwn(
NULL, converted_pass, ibuf->x, ibuf->y, ctx.num_specular_channels);
- MEM_freeN(converted_pass);
}
IMB_exr_close(ibuf->userdata);
@@ -1148,12 +1146,11 @@ static void studiolight_calculate_irradiance_equirect_image(StudioLight *sl)
}
ITER_PIXELS_END;
- sl->equirect_irradiance_buffer = IMB_allocFromBuffer(NULL,
- colbuf,
- STUDIOLIGHT_IRRADIANCE_EQUIRECT_WIDTH,
- STUDIOLIGHT_IRRADIANCE_EQUIRECT_HEIGHT,
- 4);
- MEM_freeN(colbuf);
+ sl->equirect_irradiance_buffer = IMB_allocFromBufferOwn(NULL,
+ colbuf,
+ STUDIOLIGHT_IRRADIANCE_EQUIRECT_WIDTH,
+ STUDIOLIGHT_IRRADIANCE_EQUIRECT_HEIGHT,
+ 4);
}
sl->flag |= STUDIOLIGHT_EQUIRECT_IRRADIANCE_IMAGE_CALCULATED;
}