mirror of
https://github.com/libretro/RetroArch
synced 2025-02-06 09:40:06 +00:00
Create CORE_CTL_RETRO_CTX_FRAME_CB and CORE_CTL_RETRO_CTX_POLL_CB
This commit is contained in:
parent
4165c89385
commit
6151e1c425
@ -1145,7 +1145,8 @@ void video_driver_set_pixel_format(enum retro_pixel_format fmt)
|
||||
**/
|
||||
static bool video_driver_cached_frame(void)
|
||||
{
|
||||
void *recording = recording_driver_get_data_ptr();
|
||||
retro_ctx_frame_info_t info;
|
||||
void *recording = recording_driver_get_data_ptr();
|
||||
|
||||
if (runloop_ctl(RUNLOOP_CTL_IS_IDLE, NULL))
|
||||
return true; /* Maybe return false here for indication of idleness? */
|
||||
@ -1157,13 +1158,15 @@ static bool video_driver_cached_frame(void)
|
||||
* freed the memory, but no known implementations do this.
|
||||
* It would be really stupid at any rate ...
|
||||
*/
|
||||
if (retro_ctx.frame_cb)
|
||||
retro_ctx.frame_cb(
|
||||
(video_driver_state.frame_cache.data == RETRO_HW_FRAME_BUFFER_VALID)
|
||||
? NULL : video_driver_state.frame_cache.data,
|
||||
video_driver_state.frame_cache.width,
|
||||
video_driver_state.frame_cache.height,
|
||||
video_driver_state.frame_cache.pitch);
|
||||
info.data = NULL;
|
||||
info.width = video_driver_state.frame_cache.width;
|
||||
info.height = video_driver_state.frame_cache.height;
|
||||
info.pitch = video_driver_state.frame_cache.pitch;
|
||||
|
||||
if (video_driver_state.frame_cache.data != RETRO_HW_FRAME_BUFFER_VALID)
|
||||
info.data = video_driver_state.frame_cache.data;
|
||||
|
||||
core_ctl(CORE_CTL_RETRO_CTX_FRAME_CB, &info);
|
||||
|
||||
recording_driver_set_data_ptr(recording);
|
||||
|
||||
|
@ -171,6 +171,21 @@ bool core_ctl(enum core_ctl_state state, void *data)
|
||||
{
|
||||
switch (state)
|
||||
{
|
||||
case CORE_CTL_RETRO_CTX_FRAME_CB:
|
||||
{
|
||||
retro_ctx_frame_info_t *info = (retro_ctx_frame_info_t*)data;
|
||||
if (!info || !retro_ctx.frame_cb)
|
||||
return false;
|
||||
|
||||
retro_ctx.frame_cb(
|
||||
info->data, info->width, info->height, info->pitch);
|
||||
}
|
||||
break;
|
||||
case CORE_CTL_RETRO_CTX_POLL_CB:
|
||||
if (!retro_ctx.poll_cb)
|
||||
return false;
|
||||
retro_ctx.poll_cb();
|
||||
break;
|
||||
case CORE_CTL_RETRO_GET_SYSTEM_AV_INFO:
|
||||
{
|
||||
struct retro_system_av_info *av_info = (struct retro_system_av_info*)data;
|
||||
|
@ -60,9 +60,21 @@ enum core_ctl_state
|
||||
|
||||
CORE_CTL_RETRO_RESET,
|
||||
|
||||
CORE_CTL_RETRO_GET_SYSTEM_AV_INFO
|
||||
CORE_CTL_RETRO_GET_SYSTEM_AV_INFO,
|
||||
|
||||
CORE_CTL_RETRO_CTX_FRAME_CB,
|
||||
|
||||
CORE_CTL_RETRO_CTX_POLL_CB
|
||||
};
|
||||
|
||||
typedef struct retro_ctx_frame_info
|
||||
{
|
||||
const void *data;
|
||||
unsigned width;
|
||||
unsigned height;
|
||||
size_t pitch;
|
||||
} retro_ctx_frame_info_t;
|
||||
|
||||
typedef struct retro_callbacks
|
||||
{
|
||||
retro_video_refresh_t frame_cb;
|
||||
|
@ -1183,8 +1183,7 @@ unsigned menu_input_frame_retropad(retro_input_t input, retro_input_t trigger_in
|
||||
if (!menu_input)
|
||||
return 0;
|
||||
|
||||
if (retro_ctx.poll_cb)
|
||||
retro_ctx.poll_cb();
|
||||
core_ctl(CORE_CTL_RETRO_CTX_POLL_CB, NULL);
|
||||
|
||||
/* don't run anything first frame, only capture held inputs
|
||||
* for old_input_state. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user