diff --git a/src/drivers/libretro/libretro.c b/src/drivers/libretro/libretro.c index 516e2a0..d64f168 100644 --- a/src/drivers/libretro/libretro.c +++ b/src/drivers/libretro/libretro.c @@ -700,13 +700,6 @@ void retro_init(void) rgb565 = RETRO_PIXEL_FORMAT_RGB565; if(environ_cb(RETRO_ENVIRONMENT_SET_PIXEL_FORMAT, &rgb565)) log_cb.log(RETRO_LOG_INFO, "Frontend supports RGB565 - will use that instead of XRGB1555.\n"); -#endif - PowerNES(); - check_system_specs(); -#if defined(_3DS) - fceu_video_out = (uint16_t*)linearMemAlign(256 * 240 * sizeof(uint16_t), 128); -#elif !defined(PSP) - fceu_video_out = (uint16_t*)malloc(256 * 240 * sizeof(uint16_t)); #endif } @@ -1539,6 +1532,14 @@ bool retro_load_game(const struct retro_game_info *game) if (!game) return false; + PowerNES(); + check_system_specs(); +#if defined(_3DS) + fceu_video_out = (uint16_t*)linearMemAlign(256 * 240 * sizeof(uint16_t), 128); +#elif !defined(PSP) + fceu_video_out = (uint16_t*)malloc(256 * 240 * sizeof(uint16_t)); +#endif + environ_cb(RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS, desc); if (environ_cb(RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY, &dir) && dir) @@ -1606,6 +1607,14 @@ bool retro_load_game_special( void retro_unload_game(void) { FCEUI_CloseGame(); +#if defined(_3DS) + if (fceu_video_out) + linearFree(fceu_video_out); +#else + if (fceu_video_out) + free(fceu_video_out); + fceu_video_out = NULL; +#endif } unsigned retro_get_region(void)