/** * video_driver_cached_frame: * * Renders the current video frame. **/ void video_driver_cached_frame(void) { driver_t *driver = driver_get_ptr(); void *recording = driver ? driver->recording_data : NULL; if (rarch_main_is_idle()) return; /* Cannot allow recording when pushing duped frames. */ driver->recording_data = NULL; /* Not 100% safe, since the library might have * freed the memory, but no known implementations do this. * It would be really stupid at any rate ... */ if (driver->retro_ctx.frame_cb) driver->retro_ctx.frame_cb( (video_state.frame_cache.data == RETRO_HW_FRAME_BUFFER_VALID) ? NULL : video_state.frame_cache.data, video_state.frame_cache.width, video_state.frame_cache.height, video_state.frame_cache.pitch); driver->recording_data = recording; }
int menu_iterate_render(void) { const menu_ctx_driver_t *driver = menu_ctx_driver_get_ptr(); menu_handle_t *menu = menu_driver_get_ptr(); if (!menu) return -1; if (menu->state.fb_is_dirty != menu->state.do_messagebox) menu->state.fb_is_dirty = true; if (menu->state.fb_is_dirty) menu_display_fb_set_dirty(); if (menu->state.do_messagebox && menu->state.msg[0] != '\0') { if (driver->render_messagebox) driver->render_messagebox(menu->state.msg); if (ui_companion_is_on_foreground()) { const ui_companion_driver_t *ui = ui_companion_get_ptr(); if (ui->render_messagebox) ui->render_messagebox(menu->state.msg); } } if (menu->state.do_render) { if (driver->render) driver->render(); } if (menu_driver_alive() && !rarch_main_is_idle()) menu_display_fb(); menu_driver_set_texture(); return 0; }