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:
Diffstat (limited to 'intern/cycles/app/cycles_standalone.cpp')
-rw-r--r--intern/cycles/app/cycles_standalone.cpp794
1 files changed, 424 insertions, 370 deletions
diff --git a/intern/cycles/app/cycles_standalone.cpp b/intern/cycles/app/cycles_standalone.cpp
index 9c899a38e7b..d2d112e8d7e 100644
--- a/intern/cycles/app/cycles_standalone.cpp
+++ b/intern/cycles/app/cycles_standalone.cpp
@@ -36,7 +36,7 @@
#include "util/util_version.h"
#ifdef WITH_CYCLES_STANDALONE_GUI
-#include "util/util_view.h"
+# include "util/util_view.h"
#endif
#include "app/cycles_xml.h"
@@ -44,447 +44,494 @@
CCL_NAMESPACE_BEGIN
struct Options {
- Session *session;
- Scene *scene;
- string filepath;
- int width, height;
- SceneParams scene_params;
- SessionParams session_params;
- bool quiet;
- bool show_help, interactive, pause;
- string output_path;
+ Session *session;
+ Scene *scene;
+ string filepath;
+ int width, height;
+ SceneParams scene_params;
+ SessionParams session_params;
+ bool quiet;
+ bool show_help, interactive, pause;
+ string output_path;
} options;
-static void session_print(const string& str)
+static void session_print(const string &str)
{
- /* print with carriage return to overwrite previous */
- printf("\r%s", str.c_str());
+ /* print with carriage return to overwrite previous */
+ printf("\r%s", str.c_str());
- /* add spaces to overwrite longer previous print */
- static int maxlen = 0;
- int len = str.size();
- maxlen = max(len, maxlen);
+ /* add spaces to overwrite longer previous print */
+ static int maxlen = 0;
+ int len = str.size();
+ maxlen = max(len, maxlen);
- for(int i = len; i < maxlen; i++)
- printf(" ");
+ for (int i = len; i < maxlen; i++)
+ printf(" ");
- /* flush because we don't write an end of line */
- fflush(stdout);
+ /* flush because we don't write an end of line */
+ fflush(stdout);
}
static void session_print_status()
{
- string status, substatus;
+ string status, substatus;
- /* get status */
- float progress = options.session->progress.get_progress();
- options.session->progress.get_status(status, substatus);
+ /* get status */
+ float progress = options.session->progress.get_progress();
+ options.session->progress.get_status(status, substatus);
- if(substatus != "")
- status += ": " + substatus;
+ if (substatus != "")
+ status += ": " + substatus;
- /* print status */
- status = string_printf("Progress %05.2f %s", (double) progress*100, status.c_str());
- session_print(status);
+ /* print status */
+ status = string_printf("Progress %05.2f %s", (double)progress * 100, status.c_str());
+ 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);
+ 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;
- }
+ 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;
- }
+ 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);
+ /* conversion for different top/bottom convention */
+ out->write_image(
+ TypeDesc::UINT8, pixels + (h - 1) * w * channels, AutoStride, -w * channels, AutoStride);
- out->close();
+ out->close();
- return true;
+ return true;
}
-static BufferParams& session_buffer_params()
+static BufferParams &session_buffer_params()
{
- static BufferParams buffer_params;
- buffer_params.width = options.width;
- buffer_params.height = options.height;
- buffer_params.full_width = options.width;
- buffer_params.full_height = options.height;
+ static BufferParams buffer_params;
+ buffer_params.width = options.width;
+ buffer_params.height = options.height;
+ buffer_params.full_width = options.width;
+ buffer_params.full_height = options.height;
- return buffer_params;
+ return buffer_params;
}
static void scene_init()
{
- options.scene = new Scene(options.scene_params, options.session->device);
-
- /* Read XML */
- xml_read_file(options.scene, options.filepath.c_str());
-
- /* Camera width/height override? */
- if(!(options.width == 0 || options.height == 0)) {
- options.scene->camera->width = options.width;
- options.scene->camera->height = options.height;
- }
- else {
- options.width = options.scene->camera->width;
- options.height = options.scene->camera->height;
- }
-
- /* Calculate Viewplane */
- options.scene->camera->compute_auto_viewplane();
+ options.scene = new Scene(options.scene_params, options.session->device);
+
+ /* Read XML */
+ xml_read_file(options.scene, options.filepath.c_str());
+
+ /* Camera width/height override? */
+ if (!(options.width == 0 || options.height == 0)) {
+ options.scene->camera->width = options.width;
+ options.scene->camera->height = options.height;
+ }
+ else {
+ options.width = options.scene->camera->width;
+ options.height = options.scene->camera->height;
+ }
+
+ /* Calculate Viewplane */
+ options.scene->camera->compute_auto_viewplane();
}
static void session_init()
{
- options.session_params.write_render_cb = write_render;
- options.session = new Session(options.session_params);
+ options.session_params.write_render_cb = write_render;
+ options.session = new Session(options.session_params);
- if(options.session_params.background && !options.quiet)
- options.session->progress.set_update_callback(function_bind(&session_print_status));
+ if (options.session_params.background && !options.quiet)
+ options.session->progress.set_update_callback(function_bind(&session_print_status));
#ifdef WITH_CYCLES_STANDALONE_GUI
- else
- options.session->progress.set_update_callback(function_bind(&view_redraw));
+ else
+ options.session->progress.set_update_callback(function_bind(&view_redraw));
#endif
- /* load scene */
- scene_init();
- options.session->scene = options.scene;
+ /* load scene */
+ scene_init();
+ options.session->scene = options.scene;
- options.session->reset(session_buffer_params(), options.session_params.samples);
- options.session->start();
+ options.session->reset(session_buffer_params(), options.session_params.samples);
+ options.session->start();
}
static void session_exit()
{
- if(options.session) {
- delete options.session;
- options.session = NULL;
- }
-
- if(options.session_params.background && !options.quiet) {
- session_print("Finished Rendering.");
- printf("\n");
- }
+ if (options.session) {
+ delete options.session;
+ options.session = NULL;
+ }
+
+ if (options.session_params.background && !options.quiet) {
+ session_print("Finished Rendering.");
+ printf("\n");
+ }
}
#ifdef WITH_CYCLES_STANDALONE_GUI
-static void display_info(Progress& progress)
+static void display_info(Progress &progress)
{
- static double latency = 0.0;
- static double last = 0;
- double elapsed = time_dt();
- string str, interactive;
-
- latency = (elapsed - last);
- last = elapsed;
-
- double total_time, sample_time;
- string status, substatus;
-
- progress.get_time(total_time, sample_time);
- progress.get_status(status, substatus);
- float progress_val = progress.get_progress();
-
- if(substatus != "")
- status += ": " + substatus;
-
- interactive = options.interactive? "On":"Off";
-
- str = string_printf(
- "%s"
- " Time: %.2f"
- " Latency: %.4f"
- " Progress: %05.2f"
- " Average: %.4f"
- " Interactive: %s",
- status.c_str(), total_time, latency, (double) progress_val*100, sample_time, interactive.c_str());
-
- view_display_info(str.c_str());
-
- if(options.show_help)
- view_display_help();
+ static double latency = 0.0;
+ static double last = 0;
+ double elapsed = time_dt();
+ string str, interactive;
+
+ latency = (elapsed - last);
+ last = elapsed;
+
+ double total_time, sample_time;
+ string status, substatus;
+
+ progress.get_time(total_time, sample_time);
+ progress.get_status(status, substatus);
+ float progress_val = progress.get_progress();
+
+ if (substatus != "")
+ status += ": " + substatus;
+
+ interactive = options.interactive ? "On" : "Off";
+
+ str = string_printf(
+ "%s"
+ " Time: %.2f"
+ " Latency: %.4f"
+ " Progress: %05.2f"
+ " Average: %.4f"
+ " Interactive: %s",
+ status.c_str(),
+ total_time,
+ latency,
+ (double)progress_val * 100,
+ sample_time,
+ interactive.c_str());
+
+ view_display_info(str.c_str());
+
+ if (options.show_help)
+ view_display_help();
}
static void display()
{
- static DeviceDrawParams draw_params = DeviceDrawParams();
+ static DeviceDrawParams draw_params = DeviceDrawParams();
- options.session->draw(session_buffer_params(), draw_params);
+ options.session->draw(session_buffer_params(), draw_params);
- display_info(options.session->progress);
+ display_info(options.session->progress);
}
static void motion(int x, int y, int button)
{
- if(options.interactive) {
- Transform matrix = options.session->scene->camera->matrix;
-
- /* Translate */
- if(button == 0) {
- float3 translate = make_float3(x * 0.01f, -(y * 0.01f), 0.0f);
- matrix = matrix * transform_translate(translate);
- }
-
- /* Rotate */
- else if(button == 2) {
- float4 r1 = make_float4((float)x * 0.1f, 0.0f, 1.0f, 0.0f);
- matrix = matrix * transform_rotate(DEG2RADF(r1.x), make_float3(r1.y, r1.z, r1.w));
-
- float4 r2 = make_float4(y * 0.1f, 1.0f, 0.0f, 0.0f);
- matrix = matrix * transform_rotate(DEG2RADF(r2.x), make_float3(r2.y, r2.z, r2.w));
- }
-
- /* Update and Reset */
- options.session->scene->camera->matrix = matrix;
- options.session->scene->camera->need_update = true;
- options.session->scene->camera->need_device_update = true;
-
- options.session->reset(session_buffer_params(), options.session_params.samples);
- }
+ if (options.interactive) {
+ Transform matrix = options.session->scene->camera->matrix;
+
+ /* Translate */
+ if (button == 0) {
+ float3 translate = make_float3(x * 0.01f, -(y * 0.01f), 0.0f);
+ matrix = matrix * transform_translate(translate);
+ }
+
+ /* Rotate */
+ else if (button == 2) {
+ float4 r1 = make_float4((float)x * 0.1f, 0.0f, 1.0f, 0.0f);
+ matrix = matrix * transform_rotate(DEG2RADF(r1.x), make_float3(r1.y, r1.z, r1.w));
+
+ float4 r2 = make_float4(y * 0.1f, 1.0f, 0.0f, 0.0f);
+ matrix = matrix * transform_rotate(DEG2RADF(r2.x), make_float3(r2.y, r2.z, r2.w));
+ }
+
+ /* Update and Reset */
+ options.session->scene->camera->matrix = matrix;
+ options.session->scene->camera->need_update = true;
+ options.session->scene->camera->need_device_update = true;
+
+ options.session->reset(session_buffer_params(), options.session_params.samples);
+ }
}
static void resize(int width, int height)
{
- options.width = width;
- options.height = height;
-
- if(options.session) {
- /* Update camera */
- options.session->scene->camera->width = width;
- options.session->scene->camera->height = height;
- options.session->scene->camera->compute_auto_viewplane();
- options.session->scene->camera->need_update = true;
- options.session->scene->camera->need_device_update = true;
-
- options.session->reset(session_buffer_params(), options.session_params.samples);
- }
+ options.width = width;
+ options.height = height;
+
+ if (options.session) {
+ /* Update camera */
+ options.session->scene->camera->width = width;
+ options.session->scene->camera->height = height;
+ options.session->scene->camera->compute_auto_viewplane();
+ options.session->scene->camera->need_update = true;
+ options.session->scene->camera->need_device_update = true;
+
+ options.session->reset(session_buffer_params(), options.session_params.samples);
+ }
}
static void keyboard(unsigned char key)
{
- /* Toggle help */
- if(key == 'h')
- options.show_help = !(options.show_help);
-
- /* Reset */
- else if(key == 'r')
- options.session->reset(session_buffer_params(), options.session_params.samples);
-
- /* Cancel */
- else if(key == 27) // escape
- options.session->progress.set_cancel("Canceled");
-
- /* Pause */
- else if(key == 'p') {
- options.pause = !options.pause;
- options.session->set_pause(options.pause);
- }
-
- /* Interactive Mode */
- else if(key == 'i')
- options.interactive = !(options.interactive);
-
- /* Navigation */
- else if(options.interactive && (key == 'w' || key == 'a' || key == 's' || key == 'd')) {
- Transform matrix = options.session->scene->camera->matrix;
- float3 translate;
-
- if(key == 'w')
- translate = make_float3(0.0f, 0.0f, 0.1f);
- else if(key == 's')
- translate = make_float3(0.0f, 0.0f, -0.1f);
- else if(key == 'a')
- translate = make_float3(-0.1f, 0.0f, 0.0f);
- else if(key == 'd')
- translate = make_float3(0.1f, 0.0f, 0.0f);
-
- matrix = matrix * transform_translate(translate);
-
- /* Update and Reset */
- options.session->scene->camera->matrix = matrix;
- options.session->scene->camera->need_update = true;
- options.session->scene->camera->need_device_update = true;
-
- options.session->reset(session_buffer_params(), options.session_params.samples);
- }
-
- /* Set Max Bounces */
- else if(options.interactive && (key == '0' || key == '1' || key == '2' || key == '3')) {
- int bounce;
- switch(key) {
- case '0': bounce = 0; break;
- case '1': bounce = 1; break;
- case '2': bounce = 2; break;
- case '3': bounce = 3; break;
- default: bounce = 0; break;
- }
-
- options.session->scene->integrator->max_bounce = bounce;
-
- /* Update and Reset */
- options.session->scene->integrator->need_update = true;
-
- options.session->reset(session_buffer_params(), options.session_params.samples);
- }
+ /* Toggle help */
+ if (key == 'h')
+ options.show_help = !(options.show_help);
+
+ /* Reset */
+ else if (key == 'r')
+ options.session->reset(session_buffer_params(), options.session_params.samples);
+
+ /* Cancel */
+ else if (key == 27) // escape
+ options.session->progress.set_cancel("Canceled");
+
+ /* Pause */
+ else if (key == 'p') {
+ options.pause = !options.pause;
+ options.session->set_pause(options.pause);
+ }
+
+ /* Interactive Mode */
+ else if (key == 'i')
+ options.interactive = !(options.interactive);
+
+ /* Navigation */
+ else if (options.interactive && (key == 'w' || key == 'a' || key == 's' || key == 'd')) {
+ Transform matrix = options.session->scene->camera->matrix;
+ float3 translate;
+
+ if (key == 'w')
+ translate = make_float3(0.0f, 0.0f, 0.1f);
+ else if (key == 's')
+ translate = make_float3(0.0f, 0.0f, -0.1f);
+ else if (key == 'a')
+ translate = make_float3(-0.1f, 0.0f, 0.0f);
+ else if (key == 'd')
+ translate = make_float3(0.1f, 0.0f, 0.0f);
+
+ matrix = matrix * transform_translate(translate);
+
+ /* Update and Reset */
+ options.session->scene->camera->matrix = matrix;
+ options.session->scene->camera->need_update = true;
+ options.session->scene->camera->need_device_update = true;
+
+ options.session->reset(session_buffer_params(), options.session_params.samples);
+ }
+
+ /* Set Max Bounces */
+ else if (options.interactive && (key == '0' || key == '1' || key == '2' || key == '3')) {
+ int bounce;
+ switch (key) {
+ case '0':
+ bounce = 0;
+ break;
+ case '1':
+ bounce = 1;
+ break;
+ case '2':
+ bounce = 2;
+ break;
+ case '3':
+ bounce = 3;
+ break;
+ default:
+ bounce = 0;
+ break;
+ }
+
+ options.session->scene->integrator->max_bounce = bounce;
+
+ /* Update and Reset */
+ options.session->scene->integrator->need_update = true;
+
+ options.session->reset(session_buffer_params(), options.session_params.samples);
+ }
}
#endif
static int files_parse(int argc, const char *argv[])
{
- if(argc > 0)
- options.filepath = argv[0];
+ if (argc > 0)
+ options.filepath = argv[0];
- return 0;
+ return 0;
}
static void options_parse(int argc, const char **argv)
{
- options.width = 0;
- options.height = 0;
- options.filepath = "";
- options.session = NULL;
- options.quiet = false;
-
- /* device names */
- string device_names = "";
- string devicename = "CPU";
- bool list = false;
-
- /* List devices for which support is compiled in. */
- vector<DeviceType> types = Device::available_types();
- foreach(DeviceType type, types) {
- if(device_names != "")
- device_names += ", ";
-
- device_names += Device::string_from_type(type);
- }
-
- /* shading system */
- string ssname = "svm";
-
- /* parse options */
- ArgParse ap;
- bool help = false, debug = false, version = false;
- int verbosity = 1;
-
- ap.options ("Usage: cycles [options] file.xml",
- "%*", files_parse, "",
- "--device %s", &devicename, ("Devices to use: " + device_names).c_str(),
+ options.width = 0;
+ options.height = 0;
+ options.filepath = "";
+ options.session = NULL;
+ options.quiet = false;
+
+ /* device names */
+ string device_names = "";
+ string devicename = "CPU";
+ bool list = false;
+
+ /* List devices for which support is compiled in. */
+ vector<DeviceType> types = Device::available_types();
+ foreach (DeviceType type, types) {
+ if (device_names != "")
+ device_names += ", ";
+
+ device_names += Device::string_from_type(type);
+ }
+
+ /* shading system */
+ string ssname = "svm";
+
+ /* parse options */
+ ArgParse ap;
+ bool help = false, debug = false, version = false;
+ int verbosity = 1;
+
+ ap.options("Usage: cycles [options] file.xml",
+ "%*",
+ files_parse,
+ "",
+ "--device %s",
+ &devicename,
+ ("Devices to use: " + device_names).c_str(),
#ifdef WITH_OSL
- "--shadingsys %s", &ssname, "Shading system to use: svm, osl",
+ "--shadingsys %s",
+ &ssname,
+ "Shading system to use: svm, osl",
#endif
- "--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.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",
- "--tile-width %d", &options.session_params.tile_size.x, "Tile width in pixels",
- "--tile-height %d", &options.session_params.tile_size.y, "Tile height in pixels",
- "--list-devices", &list, "List information about all available devices",
+ "--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.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",
+ "--tile-width %d",
+ &options.session_params.tile_size.x,
+ "Tile width in pixels",
+ "--tile-height %d",
+ &options.session_params.tile_size.y,
+ "Tile height in pixels",
+ "--list-devices",
+ &list,
+ "List information about all available devices",
#ifdef WITH_CYCLES_LOGGING
- "--debug", &debug, "Enable debug logging",
- "--verbose %d", &verbosity, "Set verbosity of the logger",
+ "--debug",
+ &debug,
+ "Enable debug logging",
+ "--verbose %d",
+ &verbosity,
+ "Set verbosity of the logger",
#endif
- "--help", &help, "Print help message",
- "--version", &version, "Print version number",
- NULL);
-
- if(ap.parse(argc, argv) < 0) {
- fprintf(stderr, "%s\n", ap.geterror().c_str());
- ap.usage();
- exit(EXIT_FAILURE);
- }
-
- if(debug) {
- util_logging_start();
- util_logging_verbosity_set(verbosity);
- }
-
- if(list) {
- vector<DeviceInfo> devices = Device::available_devices();
- printf("Devices:\n");
-
- foreach(DeviceInfo& info, devices) {
- printf(" %-10s%s%s\n",
- Device::string_from_type(info.type).c_str(),
- info.description.c_str(),
- (info.display_device)? " (display)": "");
- }
-
- exit(EXIT_SUCCESS);
- }
- else if(version) {
- printf("%s\n", CYCLES_VERSION_STRING);
- exit(EXIT_SUCCESS);
- }
- else if(help || options.filepath == "") {
- ap.usage();
- exit(EXIT_SUCCESS);
- }
-
- if(ssname == "osl")
- options.scene_params.shadingsystem = SHADINGSYSTEM_OSL;
- else if(ssname == "svm")
- options.scene_params.shadingsystem = SHADINGSYSTEM_SVM;
+ "--help",
+ &help,
+ "Print help message",
+ "--version",
+ &version,
+ "Print version number",
+ NULL);
+
+ if (ap.parse(argc, argv) < 0) {
+ fprintf(stderr, "%s\n", ap.geterror().c_str());
+ ap.usage();
+ exit(EXIT_FAILURE);
+ }
+
+ if (debug) {
+ util_logging_start();
+ util_logging_verbosity_set(verbosity);
+ }
+
+ if (list) {
+ vector<DeviceInfo> devices = Device::available_devices();
+ printf("Devices:\n");
+
+ foreach (DeviceInfo &info, devices) {
+ printf(" %-10s%s%s\n",
+ Device::string_from_type(info.type).c_str(),
+ info.description.c_str(),
+ (info.display_device) ? " (display)" : "");
+ }
+
+ exit(EXIT_SUCCESS);
+ }
+ else if (version) {
+ printf("%s\n", CYCLES_VERSION_STRING);
+ exit(EXIT_SUCCESS);
+ }
+ else if (help || options.filepath == "") {
+ ap.usage();
+ exit(EXIT_SUCCESS);
+ }
+
+ if (ssname == "osl")
+ options.scene_params.shadingsystem = SHADINGSYSTEM_OSL;
+ else if (ssname == "svm")
+ options.scene_params.shadingsystem = SHADINGSYSTEM_SVM;
#ifndef WITH_CYCLES_STANDALONE_GUI
- options.session_params.background = true;
+ options.session_params.background = true;
#endif
- /* Use progressive rendering */
- options.session_params.progressive = true;
+ /* Use progressive rendering */
+ options.session_params.progressive = true;
- /* find matching device */
- DeviceType device_type = Device::type_from_string(devicename.c_str());
- vector<DeviceInfo> devices = Device::available_devices(DEVICE_MASK(device_type));
+ /* find matching device */
+ DeviceType device_type = Device::type_from_string(devicename.c_str());
+ vector<DeviceInfo> devices = Device::available_devices(DEVICE_MASK(device_type));
- bool device_available = false;
- if (!devices.empty()) {
- options.session_params.device = devices.front();
- device_available = true;
- }
+ bool device_available = false;
+ if (!devices.empty()) {
+ options.session_params.device = devices.front();
+ device_available = true;
+ }
- /* handle invalid configurations */
- if(options.session_params.device.type == DEVICE_NONE || !device_available) {
- fprintf(stderr, "Unknown device: %s\n", devicename.c_str());
- exit(EXIT_FAILURE);
- }
+ /* handle invalid configurations */
+ if (options.session_params.device.type == DEVICE_NONE || !device_available) {
+ fprintf(stderr, "Unknown device: %s\n", devicename.c_str());
+ exit(EXIT_FAILURE);
+ }
#ifdef WITH_OSL
- else if(!(ssname == "osl" || ssname == "svm")) {
- fprintf(stderr, "Unknown shading system: %s\n", ssname.c_str());
- exit(EXIT_FAILURE);
- }
- else if(options.scene_params.shadingsystem == SHADINGSYSTEM_OSL && options.session_params.device.type != DEVICE_CPU) {
- fprintf(stderr, "OSL shading system only works with CPU device\n");
- exit(EXIT_FAILURE);
- }
+ else if (!(ssname == "osl" || ssname == "svm")) {
+ fprintf(stderr, "Unknown shading system: %s\n", ssname.c_str());
+ exit(EXIT_FAILURE);
+ }
+ else if (options.scene_params.shadingsystem == SHADINGSYSTEM_OSL &&
+ options.session_params.device.type != DEVICE_CPU) {
+ fprintf(stderr, "OSL shading system only works with CPU device\n");
+ exit(EXIT_FAILURE);
+ }
#endif
- else if(options.session_params.samples < 0) {
- fprintf(stderr, "Invalid number of samples: %d\n", options.session_params.samples);
- exit(EXIT_FAILURE);
- }
- else if(options.filepath == "") {
- fprintf(stderr, "No file path specified\n");
- exit(EXIT_FAILURE);
- }
-
- /* For smoother Viewport */
- options.session_params.start_resolution = 64;
+ else if (options.session_params.samples < 0) {
+ fprintf(stderr, "Invalid number of samples: %d\n", options.session_params.samples);
+ exit(EXIT_FAILURE);
+ }
+ else if (options.filepath == "") {
+ fprintf(stderr, "No file path specified\n");
+ exit(EXIT_FAILURE);
+ }
+
+ /* For smoother Viewport */
+ options.session_params.start_resolution = 64;
}
CCL_NAMESPACE_END
@@ -493,26 +540,33 @@ using namespace ccl;
int main(int argc, const char **argv)
{
- util_logging_init(argv[0]);
- path_init();
- options_parse(argc, argv);
+ util_logging_init(argv[0]);
+ path_init();
+ options_parse(argc, argv);
#ifdef WITH_CYCLES_STANDALONE_GUI
- if(options.session_params.background) {
+ if (options.session_params.background) {
#endif
- session_init();
- options.session->wait();
- session_exit();
+ session_init();
+ options.session->wait();
+ session_exit();
#ifdef WITH_CYCLES_STANDALONE_GUI
- }
- else {
- string title = "Cycles: " + path_filename(options.filepath);
-
- /* init/exit are callback so they run while GL is initialized */
- view_main_loop(title.c_str(), options.width, options.height,
- session_init, session_exit, resize, display, keyboard, motion);
- }
+ }
+ else {
+ string title = "Cycles: " + path_filename(options.filepath);
+
+ /* init/exit are callback so they run while GL is initialized */
+ view_main_loop(title.c_str(),
+ options.width,
+ options.height,
+ session_init,
+ session_exit,
+ resize,
+ display,
+ keyboard,
+ motion);
+ }
#endif
- return 0;
+ return 0;
}