static void rmenu_xui_frame(void) { XUIMessage msg; XUIMessageRender msgRender; D3DXMATRIX matOrigView; D3DVIEWPORT vp_full; LPDIRECT3DDEVICE d3dr; d3d_video_t *d3d = NULL; menu_handle_t *menu = menu_driver_get_ptr(); driver_t *driver = driver_get_ptr(); if (!menu) return; d3d = (d3d_video_t*)driver->video_data; if (!d3d) return; d3dr = (LPDIRECT3DDEVICE)d3d->dev; if (!d3dr) return; (void)menu; vp_full.X = 0; vp_full.Y = 0; vp_full.Width = d3d->screen_width; vp_full.Height = d3d->screen_height; vp_full.MinZ = 0.0f; vp_full.MaxZ = 1.0f; d3d_set_viewport(d3dr, &vp_full); app.RunFrame(); XuiTimersRun(); XuiRenderBegin( app.GetDC(), D3DCOLOR_ARGB( 255, 0, 0, 0 ) ); XuiRenderGetViewTransform( app.GetDC(), &matOrigView ); XuiMessageRender( &msg, &msgRender, app.GetDC(), 0xffffffff, XUI_BLEND_NORMAL ); XuiSendMessage( app.GetRootObj(), &msg ); XuiRenderSetViewTransform( app.GetDC(), &matOrigView ); const char *message = rarch_main_msg_queue_pull(); if (message) xui_render_message(message); else { const char *message = rarch_main_msg_queue_pull(); if (message) xui_render_message(message); } XuiRenderEnd( app.GetDC() ); d3d_set_viewport(d3dr, &d3d->final_viewport); }
static void rmenu_xui_frame(void) { XUIMessage msg; XUIMessageRender msgRender; D3DXMATRIX matOrigView; LPDIRECT3DDEVICE d3dr; const char *message; D3DVIEWPORT vp_full = {0}; d3d_video_t *d3d = NULL; menu_handle_t *menu = menu_driver_get_ptr(); driver_t *driver = driver_get_ptr(); global_t *global = global_get_ptr(); if (!menu) return; d3d = (d3d_video_t*)driver->video_data; if (!d3d) return; d3dr = (LPDIRECT3DDEVICE)d3d->dev; if (!d3dr) return; menu_display_set_viewport(menu); app.RunFrame(); XuiTimersRun(); XuiRenderBegin( app.GetDC(), D3DCOLOR_ARGB( 255, 0, 0, 0 ) ); XuiRenderGetViewTransform( app.GetDC(), &matOrigView ); XuiMessageRender( &msg, &msgRender, app.GetDC(), 0xffffffff, XUI_BLEND_NORMAL ); XuiSendMessage( app.GetRootObj(), &msg ); XuiRenderSetViewTransform( app.GetDC(), &matOrigView ); message = rarch_main_msg_queue_pull(); if (message) xui_render_message(message); else { message = rarch_main_msg_queue_pull(); if (message) xui_render_message(message); } XuiRenderEnd( app.GetDC() ); menu_display_unset_viewport(menu); }
/** * video_frame: * @data : pointer to data of the video frame. * @width : width of the video frame. * @height : height of the video frame. * @pitch : pitch of the video frame. * * Video frame render callback function. **/ static void video_frame(const void *data, unsigned width, unsigned height, size_t pitch) { unsigned output_width = 0; unsigned output_height = 0; unsigned output_pitch = 0; const char *msg = NULL; driver_t *driver = driver_get_ptr(); global_t *global = global_get_ptr(); settings_t *settings = config_get_ptr(); const video_driver_t *video = driver ? (const video_driver_t*)driver->video : NULL; if (!driver->video_active) return; if (video_pixel_frame_scale(data, width, height, pitch)) { video_pixel_scaler_t *scaler = scaler_get_ptr(); data = scaler->scaler_out; pitch = scaler->scaler->out_stride; } video_driver_cached_frame_set(data, width, height, pitch); /* Slightly messy code, * but we really need to do processing before blocking on VSync * for best possible scheduling. */ if ((!video_driver_frame_filter_alive() || !settings->video.post_filter_record || !data || global->record.gpu_buffer) ) recording_dump_frame(data, width, height, pitch); msg = rarch_main_msg_queue_pull(); *driver->current_msg = 0; if (msg) strlcpy(driver->current_msg, msg, sizeof(driver->current_msg)); if (video_driver_frame_filter(data, width, height, pitch, &output_width, &output_height, &output_pitch)) { data = video_driver_frame_filter_get_buf_ptr(); width = output_width; height = output_height; pitch = output_pitch; } if (!video->frame(driver->video_data, data, width, height, pitch, driver->current_msg)) driver->video_active = false; }