diff options
author | Guillaume Chereau <guillaumec> | 2018-03-16 00:07:37 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2018-03-16 01:05:16 +0300 |
commit | e56fd59f22cb45ed4780b443b7245483dd5509ad (patch) | |
tree | adf8e71bfc3364a59e36d8ef690275cf96178ad1 /intern/cycles/render | |
parent | 41149ca134ff1ffe1029e3eebf1c6b3e95ef4422 (diff) |
Code refactor: move OIIO image buffer writing outside session, into callback.
Original patch by Guillaume, modifications by Brecht.
Differential Revision: https://developer.blender.org/D3102
Diffstat (limited to 'intern/cycles/render')
-rw-r--r-- | intern/cycles/render/buffers.cpp | 33 | ||||
-rw-r--r-- | intern/cycles/render/buffers.h | 1 | ||||
-rw-r--r-- | intern/cycles/render/session.cpp | 10 | ||||
-rw-r--r-- | intern/cycles/render/session.h | 8 |
4 files changed, 11 insertions, 41 deletions
diff --git a/intern/cycles/render/buffers.cpp b/intern/cycles/render/buffers.cpp index 84d10cc477e..6f560380b40 100644 --- a/intern/cycles/render/buffers.cpp +++ b/intern/cycles/render/buffers.cpp @@ -21,7 +21,6 @@ #include "util/util_foreach.h" #include "util/util_hash.h" -#include "util/util_image.h" #include "util/util_math.h" #include "util/util_opengl.h" #include "util/util_time.h" @@ -448,37 +447,5 @@ bool DisplayBuffer::draw_ready() return (draw_width != 0 && draw_height != 0); } -void DisplayBuffer::write(const string& filename) -{ - int w = draw_width; - int h = draw_height; - - if(w == 0 || h == 0) - return; - - if(half_float) - return; - - /* read buffer from device */ - uchar4 *pixels = rgba_byte.copy_from_device(0, w, h); - - /* write image */ - ImageOutput *out = ImageOutput::create(filename); - ImageSpec spec(w, h, 4, TypeDesc::UINT8); - - out->open(filename, spec); - - /* conversion for different top/bottom convention */ - out->write_image(TypeDesc::UINT8, - (uchar*)(pixels + (h-1)*w), - AutoStride, - -w*sizeof(uchar4), - AutoStride); - - out->close(); - - delete out; -} - CCL_NAMESPACE_END diff --git a/intern/cycles/render/buffers.h b/intern/cycles/render/buffers.h index 028bfb83735..dfc98fe2061 100644 --- a/intern/cycles/render/buffers.h +++ b/intern/cycles/render/buffers.h @@ -113,7 +113,6 @@ public: ~DisplayBuffer(); void reset(BufferParams& params); - void write(const string& filename); void draw_set(int width, int height); void draw(Device *device, const DeviceDrawParams& draw_params); diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp index 41156038558..bb636dd962a 100644 --- a/intern/cycles/render/session.cpp +++ b/intern/cycles/render/session.cpp @@ -55,7 +55,7 @@ Session::Session(const SessionParams& params_) device = Device::create(params.device, stats, params.background); - if(params.background && params.output_path.empty()) { + if(params.background && !params.write_render_cb) { buffers = NULL; display = NULL; } @@ -101,7 +101,7 @@ Session::~Session() wait(); } - if(!params.output_path.empty()) { + if(params.write_render_cb) { /* tonemap and write out image if requested */ delete display; @@ -109,8 +109,10 @@ Session::~Session() display->reset(buffers->params); tonemap(params.samples); - progress.set_status("Writing Image", params.output_path); - display->write(params.output_path); + int w = display->draw_width; + int h = display->draw_height; + uchar4 *pixels = display->rgba_byte.copy_from_device(0, w, h); + params.write_render_cb((uchar*)pixels, w, h, 4); } /* clean up */ diff --git a/intern/cycles/render/session.h b/intern/cycles/render/session.h index 8495d95666b..e63cad0d977 100644 --- a/intern/cycles/render/session.h +++ b/intern/cycles/render/session.h @@ -45,7 +45,6 @@ public: DeviceInfo device; bool background; bool progressive_refine; - string output_path; bool progressive; bool experimental; @@ -71,11 +70,15 @@ public: ShadingSystem shadingsystem; + function<bool(const uchar *pixels, + int width, + int height, + int channels)> write_render_cb; + SessionParams() { background = false; progressive_refine = false; - output_path = ""; progressive = false; experimental = false; @@ -106,7 +109,6 @@ public: { return !(device == params.device && background == params.background && progressive_refine == params.progressive_refine - && output_path == params.output_path /* && samples == params.samples */ && progressive == params.progressive && experimental == params.experimental |