Пример #1
0
void
VR_Window::on_click()
{
    // TCP
    update_socket_data();
    update_render_buffer();
}
Пример #2
0
bool
VR_Window::on_idle()
{
    // TCP
    update_socket_data();
    update_render_buffer();
}
Пример #3
0
void
VR_Window::set_render_scale()
{
    float r_scale = (float) scale_adjust->get_value();
    vrender->set_scale(r_scale);
    update_render_buffer();
}
Пример #4
0
void
VR_Window::set_render_offset()
{
    float r_offset = (float) offset_adjust->get_value();
    vrender->set_offset(r_offset);
    update_render_buffer();
}
Пример #5
0
void
VR_Window::set_render_brightness()
{
    float r_bright = (float) bright_adjust->get_value();
    vrender->set_brightness(r_bright);
    update_render_buffer();
}
Пример #6
0
void
VR_Window::set_render_density()
{
    float r_dens = (float) dens_adjust->get_value();
    vrender->set_density(r_dens);
    update_render_buffer();
}
Пример #7
0
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);
}
Пример #8
0
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);
}
Пример #9
0
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);
}
Пример #10
0
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 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()
Пример #11
0
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();
}