static OSDWORK_CALLBACK( draw_video_contents_wt ) { UINT32 dc = 0; int update = 1; worker_param *wp = (worker_param *) param; sdl_window_info *window = wp->window; ASSERT_REDRAW_THREAD(); // Some configurations require events to be polled in the worker thread sdlinput_process_events_buf(wp->machine()); window->primlist = wp->list; // if no bitmap, just fill if (window->primlist == NULL) { } // otherwise, render with our drawing system else { if( video_config.perftest ) measure_fps(window, dc, update); else window->draw(window, dc, update); } /* all done, ready for next */ osd_event_set(window->rendered_event); osd_free(wp); return NULL; }
void sdl_window_info::update() { osd_ticks_t event_wait_ticks; // adjust the cursor state //sdlwindow_update_cursor_state(machine, window); update_cursor_state(); // if we're visible and running and not in the middle of a resize, draw if (m_target != nullptr) { int tempwidth, tempheight; // see if the games video mode has changed m_target->compute_minimum_size(tempwidth, tempheight); if (osd_dim(tempwidth, tempheight) != m_minimum_dim) { m_minimum_dim = osd_dim(tempwidth, tempheight); if (!this->m_fullscreen) { //Don't resize window without user interaction; //window_resize(blitwidth, blitheight); } else if (video_config.switchres) { osd_dim tmp = this->pick_best_mode(); resize(tmp.width(), tmp.height()); } } if (video_config.waitvsync && video_config.syncrefresh) event_wait_ticks = osd_ticks_per_second(); // block at most a second else event_wait_ticks = 0; if (m_rendered_event.wait(event_wait_ticks)) { const int update = 1; // ensure the target bounds are up-to-date, and then get the primitives render_primitive_list &primlist = *renderer().get_primitives(); // and redraw now // Some configurations require events to be polled in the worker thread downcast< sdl_osd_interface& >(machine().osd()).process_events_buf(); // Check whether window has vector screens { const screen_device *screen = screen_device_iterator(machine().root_device()).byindex(m_index); if ((screen != nullptr) && (screen->screen_type() == SCREEN_TYPE_VECTOR)) renderer().set_flags(osd_renderer::FLAG_HAS_VECTOR_SCREEN); else renderer().clear_flags(osd_renderer::FLAG_HAS_VECTOR_SCREEN); } m_primlist = &primlist; // if no bitmap, just fill if (m_primlist == nullptr) { } // otherwise, render with our drawing system else { if( video_config.perftest ) measure_fps(update); else renderer().draw(update); } /* all done, ready for next */ m_rendered_event.set(); } } }