diff options
Diffstat (limited to 'intern/cycles/app/cycles_standalone.cpp')
-rw-r--r-- | intern/cycles/app/cycles_standalone.cpp | 82 |
1 files changed, 36 insertions, 46 deletions
diff --git a/intern/cycles/app/cycles_standalone.cpp b/intern/cycles/app/cycles_standalone.cpp index 258e67b3459..7123edbef64 100644 --- a/intern/cycles/app/cycles_standalone.cpp +++ b/intern/cycles/app/cycles_standalone.cpp @@ -17,27 +17,30 @@ #include <stdio.h> #include "device/device.h" -#include "render/buffers.h" -#include "render/camera.h" -#include "render/integrator.h" -#include "render/scene.h" -#include "render/session.h" - -#include "util/util_args.h" -#include "util/util_foreach.h" -#include "util/util_function.h" -#include "util/util_image.h" -#include "util/util_logging.h" -#include "util/util_path.h" -#include "util/util_progress.h" -#include "util/util_string.h" -#include "util/util_time.h" -#include "util/util_transform.h" -#include "util/util_unique_ptr.h" -#include "util/util_version.h" +#include "scene/camera.h" +#include "scene/integrator.h" +#include "scene/scene.h" +#include "session/buffers.h" +#include "session/session.h" + +#include "util/args.h" +#include "util/foreach.h" +#include "util/function.h" +#include "util/image.h" +#include "util/log.h" +#include "util/path.h" +#include "util/progress.h" +#include "util/string.h" +#include "util/time.h" +#include "util/transform.h" +#include "util/unique_ptr.h" +#include "util/version.h" + +#include "app/cycles_xml.h" +#include "app/oiio_output_driver.h" #ifdef WITH_CYCLES_STANDALONE_GUI -# include "util/util_view.h" +# include "util/view.h" #endif #include "app/cycles_xml.h" @@ -54,6 +57,7 @@ struct Options { bool quiet; bool show_help, interactive, pause; string output_filepath; + string output_pass; } options; static void session_print(const string &str) @@ -78,7 +82,7 @@ static void session_print_status() string status, substatus; /* get status */ - float progress = options.session->progress.get_progress(); + double progress = options.session->progress.get_progress(); options.session->progress.get_status(status, substatus); if (substatus != "") @@ -89,30 +93,6 @@ 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); - - unique_ptr<ImageOutput> out = unique_ptr<ImageOutput>(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(); - - return true; -} - static BufferParams &session_buffer_params() { static BufferParams buffer_params; @@ -147,9 +127,14 @@ static void scene_init() static void session_init() { - options.session_params.write_render_cb = write_render; + options.output_pass = "combined"; options.session = new Session(options.session_params, options.scene_params); + if (!options.output_filepath.empty()) { + options.session->set_output_driver(make_unique<OIIOOutputDriver>( + options.output_filepath, options.output_pass, session_print)); + } + if (options.session_params.background && !options.quiet) options.session->progress.set_update_callback(function_bind(&session_print_status)); #ifdef WITH_CYCLES_STANDALONE_GUI @@ -160,6 +145,11 @@ static void session_init() /* load scene */ scene_init(); + /* add pass for output. */ + Pass *pass = options.scene->create_node<Pass>(); + pass->set_name(ustring(options.output_pass.c_str())); + pass->set_type(PASS_COMBINED); + options.session->reset(options.session_params, session_buffer_params()); options.session->start(); } @@ -193,7 +183,7 @@ static void display_info(Progress &progress) progress.get_time(total_time, sample_time); progress.get_status(status, substatus); - float progress_val = progress.get_progress(); + double progress_val = progress.get_progress(); if (substatus != "") status += ": " + substatus; |