mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-05 23:37:46 -04:00
(libretro) Prevent illegal usage of RETRO_ENVIRONMENT_SET_SYSTEM_AV_INFO/RETRO_ENVIRONMENT_SET_GEOMETRY environment callbacks
This commit is contained in:
parent
a987b67801
commit
906cc85456
1 changed files with 33 additions and 16 deletions
|
@ -102,6 +102,9 @@ static int vout_width, vout_height, vout_offset;
|
||||||
static float vout_aspect = 0.0;
|
static float vout_aspect = 0.0;
|
||||||
static int vout_ghosting = 0;
|
static int vout_ghosting = 0;
|
||||||
|
|
||||||
|
static bool libretro_update_av_info = false;
|
||||||
|
static bool libretro_update_geometry = false;
|
||||||
|
|
||||||
#if defined(RENDER_GSKIT_PS2)
|
#if defined(RENDER_GSKIT_PS2)
|
||||||
#define VOUT_8BIT_WIDTH 328
|
#define VOUT_8BIT_WIDTH 328
|
||||||
#define VOUT_8BIT_HEIGHT 256
|
#define VOUT_8BIT_HEIGHT 256
|
||||||
|
@ -603,8 +606,6 @@ static void apply_renderer()
|
||||||
|
|
||||||
void emu_video_mode_change(int start_line, int line_count, int start_col, int col_count)
|
void emu_video_mode_change(int start_line, int line_count, int start_col, int col_count)
|
||||||
{
|
{
|
||||||
struct retro_system_av_info av_info;
|
|
||||||
|
|
||||||
vm_current_start_line = start_line;
|
vm_current_start_line = start_line;
|
||||||
vm_current_line_count = line_count;
|
vm_current_line_count = line_count;
|
||||||
vm_current_start_col = start_col;
|
vm_current_start_col = start_col;
|
||||||
|
@ -653,9 +654,8 @@ void emu_video_mode_change(int start_line, int line_count, int start_col, int co
|
||||||
#endif
|
#endif
|
||||||
Pico.m.dirtyPal = 1;
|
Pico.m.dirtyPal = 1;
|
||||||
|
|
||||||
// Update the geometry
|
/* Notify frontend of geometry update */
|
||||||
retro_get_system_av_info(&av_info);
|
libretro_update_geometry = true;
|
||||||
environ_cb(RETRO_ENVIRONMENT_SET_GEOMETRY, &av_info);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void emu_32x_startup(void)
|
void emu_32x_startup(void)
|
||||||
|
@ -1327,6 +1327,15 @@ bool retro_load_game(const struct retro_game_info *info)
|
||||||
|
|
||||||
init_frameskip();
|
init_frameskip();
|
||||||
|
|
||||||
|
/* Initialisation routines may have 'triggered'
|
||||||
|
* a libretro AV info or geometry update; this
|
||||||
|
* happens automatically after retro_load_game(),
|
||||||
|
* so disable the relevant flags here to avoid
|
||||||
|
* redundant updates on the first call of
|
||||||
|
* retro_run() */
|
||||||
|
libretro_update_av_info = false;
|
||||||
|
libretro_update_geometry = false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1585,13 +1594,9 @@ static void update_variables(bool first_run)
|
||||||
vout_aspect = VOUT_PAR;
|
vout_aspect = VOUT_PAR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Notify frontend of geometry update */
|
||||||
if (vout_aspect != old_vout_aspect)
|
if (vout_aspect != old_vout_aspect)
|
||||||
{
|
libretro_update_geometry = true;
|
||||||
// Update the geometry
|
|
||||||
struct retro_system_av_info av_info;
|
|
||||||
retro_get_system_av_info(&av_info);
|
|
||||||
environ_cb(RETRO_ENVIRONMENT_SET_GEOMETRY, &av_info);
|
|
||||||
}
|
|
||||||
|
|
||||||
var.value = NULL;
|
var.value = NULL;
|
||||||
var.key = "picodrive_sprlim";
|
var.key = "picodrive_sprlim";
|
||||||
|
@ -1690,16 +1695,15 @@ static void update_variables(bool first_run)
|
||||||
var.value = NULL;
|
var.value = NULL;
|
||||||
var.key = "picodrive_sound_rate";
|
var.key = "picodrive_sound_rate";
|
||||||
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) {
|
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) {
|
||||||
new_sound_rate = atoi(var.value);
|
|
||||||
if (!strcmp(var.value, "native"))
|
if (!strcmp(var.value, "native"))
|
||||||
new_sound_rate = YM2612_NATIVE_RATE();
|
new_sound_rate = YM2612_NATIVE_RATE();
|
||||||
|
else
|
||||||
|
new_sound_rate = atoi(var.value);
|
||||||
if (new_sound_rate != PicoIn.sndRate) {
|
if (new_sound_rate != PicoIn.sndRate) {
|
||||||
/* Update the sound rate */
|
/* Update the sound rate */
|
||||||
PicoIn.sndRate = new_sound_rate;
|
PicoIn.sndRate = new_sound_rate;
|
||||||
PsndRerate(!first_run);
|
PsndRerate(!first_run);
|
||||||
struct retro_system_av_info av_info;
|
libretro_update_av_info = true;
|
||||||
retro_get_system_av_info(&av_info);
|
|
||||||
environ_cb(RETRO_ENVIRONMENT_SET_SYSTEM_AV_INFO, &av_info);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1787,6 +1791,19 @@ void retro_run(void)
|
||||||
|
|
||||||
PicoFrame();
|
PicoFrame();
|
||||||
|
|
||||||
|
/* Check whether frontend needs to be notified
|
||||||
|
* of timing/geometry changes */
|
||||||
|
if (libretro_update_av_info || libretro_update_geometry) {
|
||||||
|
struct retro_system_av_info av_info;
|
||||||
|
retro_get_system_av_info(&av_info);
|
||||||
|
environ_cb(libretro_update_av_info ?
|
||||||
|
RETRO_ENVIRONMENT_SET_SYSTEM_AV_INFO :
|
||||||
|
RETRO_ENVIRONMENT_SET_GEOMETRY,
|
||||||
|
&av_info);
|
||||||
|
libretro_update_av_info = false;
|
||||||
|
libretro_update_geometry = false;
|
||||||
|
}
|
||||||
|
|
||||||
/* If frame was skipped, call video_cb() with
|
/* If frame was skipped, call video_cb() with
|
||||||
* a NULL buffer and return immediately */
|
* a NULL buffer and return immediately */
|
||||||
if (PicoIn.skipFrame) {
|
if (PicoIn.skipFrame) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue