libretro: hires blending buffer

This commit is contained in:
kps501 2018-06-08 21:28:12 +00:00 committed by radius
parent 0f4824a16c
commit 951da61b5f
1 changed files with 24 additions and 17 deletions

View File

@ -46,6 +46,7 @@
char g_rom_dir[1024]; char g_rom_dir[1024];
char g_basename[1024]; char g_basename[1024];
bool hires_blend = false; bool hires_blend = false;
static uint16 *gfx_blend;
retro_log_printf_t log_cb = NULL; retro_log_printf_t log_cb = NULL;
static retro_video_refresh_t video_cb = NULL; static retro_video_refresh_t video_cb = NULL;
@ -725,6 +726,7 @@ void retro_init(void)
GFX.Pitch = MAX_SNES_WIDTH * sizeof(uint16); GFX.Pitch = MAX_SNES_WIDTH * sizeof(uint16);
GFX.Screen = (uint16*) calloc(1, GFX.Pitch * MAX_SNES_HEIGHT); GFX.Screen = (uint16*) calloc(1, GFX.Pitch * MAX_SNES_HEIGHT);
gfx_blend = (uint16*) calloc(1, GFX.Pitch * MAX_SNES_HEIGHT);
S9xGraphicsInit(); S9xGraphicsInit();
S9xInitInputDevices(); S9xInitInputDevices();
@ -989,6 +991,7 @@ void retro_deinit()
S9xUnmapAllControls(); S9xUnmapAllControls();
free(GFX.Screen); free(GFX.Screen);
free(gfx_blend);
} }
@ -1120,7 +1123,7 @@ bool8 S9xDeinitUpdate(int width, int height)
for (register int y = 0; y < height; y++) for (register int y = 0; y < height; y++)
{ {
register uint16 *input = (uint16 *) ((uint8 *) GFX.Screen + y * GFX.Pitch); register uint16 *input = (uint16 *) ((uint8 *) GFX.Screen + y * GFX.Pitch);
register uint16 *output = (uint16 *) ((uint8 *) GFX.Screen + y * GFX.Pitch); register uint16 *output = (uint16 *) ((uint8 *) gfx_blend + y * GFX.Pitch);
register uint16 l, r; register uint16 l, r;
l = 0; l = 0;
@ -1135,10 +1138,14 @@ bool8 S9xDeinitUpdate(int width, int height)
l = r; l = r;
} }
} }
video_cb(gfx_blend, width, height, GFX.Pitch);
}
else
{
video_cb(GFX.Screen, width, height, GFX.Pitch);
} }
video_cb(GFX.Screen, width, height, GFX.Pitch);
return TRUE; return TRUE;
} }