diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2013-11-22 14:48:08 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2013-11-22 14:52:12 +0400 |
commit | 885354daec2fa8181aeb27b637c80e4ee4c247df (patch) | |
tree | 5259821ae57c2be5d6ed42026d182cc01164a2eb /source/blender/render | |
parent | 0469971b05ea94b9bf9ea3c8e935049c5c5b7120 (diff) |
Optimization for render result save
Skip byte->float conversion if output file format
supports high bit depths but configured to only
output 8 bits per channel.
Gives around 30% speedup when re-exporting movie file
to PNG image sequence here on laptop.
Possible further optimization:
- Skip color space conversion in imbuf_for_write
function if we've got already have buffer in
that space.
This doesn't seem to happen often after tweak
to render result to imbuf.
- Skip black alpha-under if original image is
opaque,
This is a bit tricky to detect.
Diffstat (limited to 'source/blender/render')
-rw-r--r-- | source/blender/render/intern/source/render_result.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/source/blender/render/intern/source/render_result.c b/source/blender/render/intern/source/render_result.c index 37587d89ce0..487de42515d 100644 --- a/source/blender/render/intern/source/render_result.c +++ b/source/blender/render/intern/source/render_result.c @@ -1124,7 +1124,13 @@ ImBuf *render_result_rect_to_ibuf(RenderResult *rr, RenderData *rd) */ if (ibuf->rect) { if (BKE_imtype_valid_depths(rd->im_format.imtype) & (R_IMF_CHAN_DEPTH_12 | R_IMF_CHAN_DEPTH_16 | R_IMF_CHAN_DEPTH_24 | R_IMF_CHAN_DEPTH_32)) { - IMB_float_from_rect(ibuf); + if (rd->im_format.depth == R_IMF_CHAN_DEPTH_8) { + /* Higher depth bits are supported but not needed for current file output. */ + ibuf->rect_float = NULL; + } + else { + IMB_float_from_rect(ibuf); + } } else { /* ensure no float buffer remained from previous frame */ |