diff options
author | Thomas Dinges <blender@dingto.org> | 2014-02-14 16:40:29 +0400 |
---|---|---|
committer | Thomas Dinges <blender@dingto.org> | 2014-02-14 16:41:02 +0400 |
commit | 34d17463311846ac40966ce262c99d790d31f19e (patch) | |
tree | fd72622afe9faf3b60528658a9f89f0e5629471a /intern | |
parent | 30c9fe19a31f6f92be4de2abacb9fd96179a9a04 (diff) |
Cycles Standalone: Add interactive mode (I-key), to avoid accidental changes/movement.
Also some code and whitespace cleanup.
Diffstat (limited to 'intern')
-rw-r--r-- | intern/cycles/app/cycles_standalone.cpp | 67 | ||||
-rw-r--r-- | intern/cycles/util/util_view.cpp | 15 |
2 files changed, 46 insertions, 36 deletions
diff --git a/intern/cycles/app/cycles_standalone.cpp b/intern/cycles/app/cycles_standalone.cpp index 5a86f85148a..4635ae14efa 100644 --- a/intern/cycles/app/cycles_standalone.cpp +++ b/intern/cycles/app/cycles_standalone.cpp @@ -46,7 +46,7 @@ struct Options { int width, height; SceneParams scene_params; SessionParams session_params; - bool quiet, show_help; + bool quiet, show_help, interactive; } options; static void session_print(const string& str) @@ -101,7 +101,7 @@ static void session_init() options.session = new Session(options.session_params); options.session->reset(session_buffer_params(), options.session_params.samples); options.session->scene = options.scene; - + if(options.session_params.background && !options.quiet) options.session->progress.set_update_callback(function_bind(&session_print_status)); #ifdef WITH_CYCLES_STANDALONE_GUI @@ -118,7 +118,7 @@ static void scene_init(int width, int height) { options.scene = new Scene(options.scene_params, options.session_params.device); xml_read_file(options.scene, options.filepath.c_str()); - + if (width == 0 || height == 0) { options.width = options.scene->camera->width; options.height = options.scene->camera->height; @@ -148,7 +148,7 @@ static void display_info(Progress& progress) static double latency = 0.0; static double last = 0; double elapsed = time_dt(); - string str; + string str, interactive; latency = (elapsed - last); last = elapsed; @@ -164,11 +164,13 @@ static void display_info(Progress& progress) if(substatus != "") status += ": " + substatus; - str = string_printf("%s Time: %.2f Latency: %.4f Sample: %d Average: %.4f", - status.c_str(), total_time, latency, sample, sample_time); + interactive = options.interactive? "On":"Off"; + + str = string_printf("%s Time: %.2f Latency: %.4f Sample: %d Average: %.4f Interactive: %s", + status.c_str(), total_time, latency, sample, sample_time, interactive.c_str()); view_display_info(str.c_str()); - + if(options.show_help) view_display_help(); } @@ -182,26 +184,31 @@ static void display() static void motion(int x, int y, int button) { - /* Translate */ - if(button == 0) { - float3 translate = make_float3(x*0.01, y*0.01, 0.0f); - options.session->scene->camera->matrix = options.session->scene->camera->matrix * transform_translate(translate); - } - - /* Rotate */ - else if(button == 2) { - float4 r1= make_float4(x*0.1, 0.0f, 1.0f, 0.0f); - options.session->scene->camera->matrix = options.session->scene->camera->matrix * transform_rotate(r1.x*M_PI/180.0f, make_float3(r1.y, r1.z, r1.w)); - - float4 r2 = make_float4(y*0.1, 1.0f, 0.0, 0.0f); - options.session->scene->camera->matrix = options.session->scene->camera->matrix * transform_rotate(r2.x*M_PI/180.0f, make_float3(r2.y, r2.z, r2.w)); + 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(x * 0.1f, 0.0f, 1.0f, 0.0f); + matrix = matrix * transform_rotate(r1.x * M_PI/180.0f, make_float3(r1.y, r1.z, r1.w)); + + float4 r2 = make_float4(y*0.1, 1.0f, 0.0, 0.0f); + matrix = matrix * transform_rotate(r2.x * M_PI/180.0f, 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); } - - /* Update and Reset */ - 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) @@ -219,6 +226,8 @@ static void keyboard(unsigned char key) options.session->reset(session_buffer_params(), options.session_params.samples); else if(key == 'h') options.show_help = !(options.show_help); + else if(key == 'i') + options.interactive = !(options.interactive); else if(key == 27) // escape options.session->progress.set_cancel("Canceled"); } @@ -277,7 +286,7 @@ static void options_parse(int argc, const char **argv) "--list-devices", &list, "List information about all available devices", "--help", &help, "Print help message", NULL); - + if(ap.parse(argc, argv) < 0) { fprintf(stderr, "%s\n", ap.geterror().c_str()); ap.usage(); @@ -304,7 +313,7 @@ static void options_parse(int argc, const char **argv) options.scene_params.shadingsystem = SceneParams::OSL; else if(ssname == "svm") options.scene_params.shadingsystem = SceneParams::SVM; - + #ifdef WITH_CYCLES_STANDALONE_GUI /* Progressive rendering for GUI */ if(!options.session_params.background) @@ -367,7 +376,7 @@ int main(int argc, const char **argv) { path_init(); options_parse(argc, argv); - + #ifdef WITH_CYCLES_STANDALONE_GUI if(options.session_params.background) { #endif diff --git a/intern/cycles/util/util_view.cpp b/intern/cycles/util/util_view.cpp index de655d9d41e..361a7bc95f2 100644 --- a/intern/cycles/util/util_view.cpp +++ b/intern/cycles/util/util_view.cpp @@ -42,7 +42,7 @@ struct View { bool first_display; bool redraw; - + int mouseX, mouseY; int mouseBut0, mouseBut2; @@ -104,9 +104,10 @@ void view_display_help() view_display_text(x1+20, y2-120, "r: Restart the render"); view_display_text(x1+20, y2-140, "q: Quit the program"); view_display_text(x1+20, y2-160, "esc: Cancel the render"); - - view_display_text(x1+20, y2-190, "LMB: Move camera"); - view_display_text(x1+20, y2-210, "RMB: Rotate camera"); + + view_display_text(x1+20, y2-190, "Interactive Mode (i-key):"); + view_display_text(x1+20, y2-210, "LMB: Move camera"); + view_display_text(x1+20, y2-230, "RMB: Rotate camera"); glColor3f(1.0f, 1.0f, 1.0f); } @@ -142,7 +143,7 @@ static void view_reshape(int width, int height) { if(width <= 0 || height <= 0) return; - + V.width = width; V.height = height; @@ -200,10 +201,10 @@ static void view_motion(int x, int y) const int but = V.mouseBut0? 0:2; const int distX = x - V.mouseX; const int distY = y - V.mouseY; - + if(V.motion) V.motion(distX, distY, but); - + V.mouseX = x; V.mouseY = y; } |