void VR_Window::on_click() { // TCP update_socket_data(); update_render_buffer(); }
bool VR_Window::on_idle() { // TCP update_socket_data(); update_render_buffer(); }
void VR_Window::set_render_scale() { float r_scale = (float) scale_adjust->get_value(); vrender->set_scale(r_scale); update_render_buffer(); }
void VR_Window::set_render_offset() { float r_offset = (float) offset_adjust->get_value(); vrender->set_offset(r_offset); update_render_buffer(); }
void VR_Window::set_render_brightness() { float r_bright = (float) bright_adjust->get_value(); vrender->set_brightness(r_bright); update_render_buffer(); }
void VR_Window::set_render_density() { float r_dens = (float) dens_adjust->get_value(); vrender->set_density(r_dens); update_render_buffer(); }
void VR_Window::update_render_zoom(gdouble x, gdouble y) { //printf("\n ZOOM!"); float dy = (y - vrender->get_last_y()) / 100; vrender->set_vrender_zoom( dy ); update_render_buffer(); vrender->set_last_x(x); vrender->set_last_y(y); }
void VR_Window::update_render_rotation(gdouble x, gdouble y) { //printf("\n ROTATE!"); float dx = (x - vrender->get_last_x()) / 5; float dy = (y - vrender->get_last_y()) / 5; vrender->set_vrender_rotation( dx, dy ); update_render_buffer(); vrender->set_last_x(x); vrender->set_last_y(y); }
void VR_Window::update_render_translation(gdouble x, gdouble y) { //printf("\n TRANSLATE!"); float dx = (x - vrender->get_last_x()) / 100; float dy = (y - vrender->get_last_y()) / 100; vrender->set_vrender_translation( dx, dy ); update_render_buffer(); vrender->set_last_x(x); vrender->set_last_y(y); }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Render loop ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void Session::run_render() { reset_time = start_time = time_dt(); paused_time = 0.0; bool bStarted = false; params.image_stat.uiCurSamples = 0; if(params.interactive) progress.set_start_time(start_time); bool is_done = false; while(!progress.get_cancel()) { if(!params.interactive) { // If no work left and in background mode, we can stop immediately if(is_done) { update_status_time(); progress.set_status(string(pass_name) + " finished"); break; } } //if(!params.interactive) else { // If in interactive mode, and we are either paused or done for now, // wait for pause condition notify to wake up again thread_scoped_lock pause_lock(pause_mutex); if(pause || is_done) { update_status_time(pause, is_done); while(true) { if(pause) server->pauseRender(true); double pause_start = time_dt(); pause_cond.wait(pause_lock); paused_time += time_dt() - pause_start; progress.set_start_time(start_time + paused_time); update_status_time(pause, is_done); progress.set_update(); if(!pause) { server->pauseRender(false); break; } } } //if(pause || is_ready) if(progress.get_cancel()) break; } //if(!params.interactive), else if(!is_done) { time_sleep(0.01); // Update scene on the render-server - send all changed objects if(!bStarted || params.interactive) update_scene_to_server(frame_idx, total_frames); if(!bStarted) { server->startRender(params.interactive, params.width, params.height, params.interactive ? ::OctaneEngine::OctaneClient::IMAGE_8BIT : (params.hdr_tonemapped ? ::OctaneEngine::OctaneClient::IMAGE_FLOAT_TONEMAPPED : ::OctaneEngine::OctaneClient::IMAGE_FLOAT), params.out_of_core_enabled, params.out_of_core_mem_limit, params.out_of_core_gpu_headroom); //FIXME: Perhaps the wrong place for it... bStarted = true; } if(!server->getServerErrorMessage().empty()) { progress.set_cancel("ERROR! Check console for detailed error messages."); server->clearServerErrorMessage(); } if(progress.get_cancel()) break; // Buffers mutex is locked entirely while rendering each // sample, and released/reacquired on each iteration to allow // reset and draw in between thread_scoped_lock buffers_lock(render_buffer_mutex); // Update status and timing //update_status_time(); update_render_buffer(); if(!server->getServerErrorMessage().empty()) { progress.set_cancel("ERROR! Check console for detailed error messages."); server->clearServerErrorMessage(); } // Update status and timing update_status_time(); progress.set_update(); } //if(!is_done) else { thread_scoped_lock buffers_lock(render_buffer_mutex); update_render_buffer(); // Update status and timing update_status_time(); } is_done = !params.interactive && (params.image_stat.uiCurSamples >= params.samples); } //while(!progress.get_cancel()) } //run_render()
void VR_Window::create_render_window() { Gtk::Box *render_vbox = new Gtk::Box(Gtk::ORIENTATION_VERTICAL, 1); Gtk::ScrolledWindow *render_scroll; Gtk::EventBox *render_eventbox; Glib::RefPtr<Gdk::Pixbuf> render_pixbuf; Gtk::Box *param_hbox1; Gtk::Box *param_hbox2; Gtk::Scale *dens_scale; Gtk::Label *dens_label; Gtk::Scale *bright_scale; Gtk::Label *bright_label; Gtk::Scale *offset_scale; Gtk::Label *offset_label; Gtk::Scale *scale_scale; Gtk::Label *scale_label; render_eventbox = new Gtk::EventBox(); render_eventbox->set_events( Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK | Gdk::POINTER_MOTION_MASK | Gdk::POINTER_MOTION_HINT_MASK | Gdk::BUTTON_RELEASE_MASK); render_pixbuf->create_from_data((const guint8*) vrender->get_vrender_buffer( cloud ), Gdk::COLORSPACE_RGB, false, 8, vrender->get_width(), vrender->get_height(), vrender->get_width() * 3 ); render_image.set( render_pixbuf ); render_eventbox->add( render_image ); render_eventbox->signal_motion_notify_event().connect( sigc::mem_fun( *this, &VR_Window::render_motion_notify_event) ); render_eventbox->signal_button_press_event().connect( sigc::mem_fun( *this, &VR_Window::render_button_press_event) ); render_scroll = new Gtk::ScrolledWindow(); render_scroll->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_ALWAYS); render_scroll->add(render_eventbox[0]); fps_label.set_text("Render rate (ms per ray-tracing):"); fps_update.set_text("..."); fps_box.set_orientation( Gtk::ORIENTATION_HORIZONTAL ); fps_box.set_border_width(0); fps_box.pack_start( fps_label, false, false, 2 ); fps_box.pack_start( fps_update, false, false, 2); render_vbox->pack_start( fps_box, false, false, 2); socket_label.set_text("Update rate (ms per socket transfer):"); socket_update.set_text("..."); socket_box.set_orientation( Gtk::ORIENTATION_HORIZONTAL ); socket_box.set_border_width(0); socket_box.pack_start( socket_label, false, false, 2 ); socket_box.pack_start( socket_update, false, false, 2); render_vbox->pack_start( socket_box, false, false, 2); render_vbox->pack_start(render_scroll[0], true, true, 0); //////////// CREATE SLIDERS param_hbox1 = new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, 1); dens_label = new Gtk::Label("Opacity: "); param_hbox1->pack_start(dens_label[0], false, false, 0); dens_adjust = Gtk::Adjustment::create( vrender->get_density(), 0, 1.1, 0.01, 0.1, 0.1); dens_adjust->signal_value_changed().connect( sigc::mem_fun( *this, &VR_Window::set_render_density) ); dens_scale = new Gtk::Scale( dens_adjust, Gtk::ORIENTATION_HORIZONTAL ); dens_scale->set_digits(2); param_hbox1->pack_start(dens_scale[0], true, true, 0); bright_label = new Gtk::Label("Brightness: "); param_hbox1->pack_start(bright_label[0], false, false, 0); bright_adjust = Gtk::Adjustment::create( vrender->get_brightness(), 0, 10.1, 0.1, 0.1, 0.1); bright_adjust->signal_value_changed().connect( sigc::mem_fun( *this, &VR_Window::set_render_brightness) ); bright_scale = new Gtk::Scale( bright_adjust, Gtk::ORIENTATION_HORIZONTAL ); bright_scale->set_digits(2); param_hbox1->pack_start(bright_scale[0], true, true, 0); render_vbox->pack_start(param_hbox1[0], false, false, 0); param_hbox2 = new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, 1); offset_label = new Gtk::Label("Offset: "); param_hbox2->pack_start(offset_label[0], false, false, 0); offset_adjust = Gtk::Adjustment::create( vrender->get_offset(), -1, 1.1, 0.01, 0.1, 0.1); offset_adjust->signal_value_changed().connect( sigc::mem_fun( *this, &VR_Window::set_render_offset) ); offset_scale = new Gtk::Scale( offset_adjust, Gtk::ORIENTATION_HORIZONTAL ); offset_scale->set_digits(2); param_hbox2->pack_start(offset_scale[0], true, true, 0); scale_label = new Gtk::Label("Scale: "); param_hbox2->pack_start(scale_label[0], false, false, 0); scale_adjust = Gtk::Adjustment::create( vrender->get_scale(), 0, 10.5, 0.1, 0.5, 0.5); scale_adjust->signal_value_changed().connect( sigc::mem_fun( *this, &VR_Window::set_render_scale) ); scale_scale = new Gtk::Scale( scale_adjust, Gtk::ORIENTATION_HORIZONTAL ); scale_scale->set_digits(2); param_hbox2->pack_start(scale_scale[0], true, true, 0); render_vbox->pack_start(param_hbox2[0], false, false, 0); /*Gtk::Button *update_frame_button; update_frame_button = new Gtk::Button(" Update Frame ", true); update_frame_button->signal_clicked().connect( sigc::mem_fun(*this, &VR_Window::on_click) ); render_vbox->pack_start( update_frame_button[0], false, true, 0 );*/ //Glib::signal_idle().connect( sigc::mem_fun( *this, &VR_Window::on_idle) ); Glib::signal_timeout().connect( sigc::mem_fun(*this, &VR_Window::on_timer), 500 ); pack_start(render_vbox[0], true, true, 0); show_all_children(); update_render_buffer(); }