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:
authorGuillaume Chereau <guillaumec>2018-03-16 00:07:37 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2018-03-16 01:05:16 +0300
commite56fd59f22cb45ed4780b443b7245483dd5509ad (patch)
treeadf8e71bfc3364a59e36d8ef690275cf96178ad1 /intern/cycles/app/cycles_standalone.cpp
parent41149ca134ff1ffe1029e3eebf1c6b3e95ef4422 (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/app/cycles_standalone.cpp')
-rw-r--r--intern/cycles/app/cycles_standalone.cpp32
1 files changed, 31 insertions, 1 deletions
diff --git a/intern/cycles/app/cycles_standalone.cpp b/intern/cycles/app/cycles_standalone.cpp
index 2d4b0d35e54..c682744f5fa 100644
--- a/intern/cycles/app/cycles_standalone.cpp
+++ b/intern/cycles/app/cycles_standalone.cpp
@@ -51,6 +51,7 @@ struct Options {
SessionParams session_params;
bool quiet;
bool show_help, interactive, pause;
+ string output_path;
} options;
static void session_print(const string& str)
@@ -86,6 +87,34 @@ static void session_print_status()
session_print(status);
}
+static bool write_render(const uchar *pixels, int w, int h, int channels)
+{
+ string msg = string_printf("Writing image %s", options.output_path.c_str());
+ session_print(msg);
+
+ ImageOutput *out = ImageOutput::create(options.output_path);
+ if(!out) {
+ return false;
+ }
+
+ ImageSpec spec(w, h, channels, TypeDesc::UINT8);
+ if(!out->open(options.output_path, spec)) {
+ return false;
+ }
+
+ /* conversion for different top/bottom convention */
+ out->write_image(TypeDesc::UINT8,
+ pixels + (h - 1) * w * channels,
+ AutoStride,
+ -w * channels,
+ AutoStride);
+
+ out->close();
+ delete out;
+
+ return true;
+}
+
static BufferParams& session_buffer_params()
{
static BufferParams buffer_params;
@@ -120,6 +149,7 @@ static void scene_init()
static void session_init()
{
+ options.session_params.write_render_cb = write_render;
options.session = new Session(options.session_params);
if(options.session_params.background && !options.quiet)
@@ -364,7 +394,7 @@ static void options_parse(int argc, const char **argv)
"--background", &options.session_params.background, "Render in background, without user interface",
"--quiet", &options.quiet, "In background mode, don't print progress messages",
"--samples %d", &options.session_params.samples, "Number of samples to render",
- "--output %s", &options.session_params.output_path, "File path to write output image",
+ "--output %s", &options.output_path, "File path to write output image",
"--threads %d", &options.session_params.threads, "CPU Rendering Threads",
"--width %d", &options.width, "Window width in pixel",
"--height %d", &options.height, "Window height in pixel",