[Glide64] Subscreen delay fix for zelda OoT

f3b47bbe40
This commit is contained in:
zilmar 2015-10-14 10:06:50 +11:00
parent 989c8cbc4d
commit b7d402aacf
3 changed files with 29 additions and 2 deletions

View File

@ -411,7 +411,9 @@ void ReadSpecialSettings (const char * name)
settings.hacks = 0;
//detect games which require special hacks
if (strstr(name, (const char *)"ZELDA") || strstr(name, (const char *)"MASK"))
if (strstr(name, (const char *)"ZELDA"))
settings.hacks |= (hack_Zelda | hack_OoT);
else if(strstr(name, (const char *)"MASK"))
settings.hacks |= hack_Zelda;
else if (strstr(name, (const char *)"ROADSTERS TROPHY"))
settings.hacks |= hack_Zelda;

View File

@ -470,6 +470,26 @@ static void DrawPartFrameBufferToScreen()
((wxUint32)((float)((color&0x07C0) >> 6) / 31.0f * 255.0f) << 16) | \
((wxUint32)((float)((color&0x003E) >> 1) / 31.0f * 255.0f) << 8)
static void copyWhiteToRDRAM()
{
if(rdp.ci_width == 0)
return;
wxUint16 *ptr_dst = (wxUint16*)(gfx.RDRAM + rdp.cimg);
wxUint32 *ptr_dst32 = (wxUint32*)(gfx.RDRAM + rdp.cimg);
for(wxUint32 y = 0; y < rdp.ci_height; y++)
{
for(wxUint32 x = 0; x < rdp.ci_width; x++)
{
if(rdp.ci_size == 2)
ptr_dst[(x + y * rdp.ci_width) ^ 1] = 0xFFFF;
else
ptr_dst32[x + y * rdp.ci_width] = 0xFFFFFFFF;
}
}
}
static void CopyFrameBuffer (GrBuffer_t buffer = GR_BUFFER_BACKBUFFER)
{
if (!fullscreen)
@ -892,8 +912,12 @@ EXPORT void CALL ProcessDList(void)
rdp.scale_x = rdp.scale_x_bak;
rdp.scale_y = rdp.scale_y_bak;
}
if (settings.frame_buffer & fb_ref)
if(settings.hacks & hack_OoT)
copyWhiteToRDRAM(); //Subscreen delay fix
else if (settings.frame_buffer & fb_ref)
CopyFrameBuffer ();
if (rdp.cur_image)
CloseTextureBuffer(rdp.read_whole_frame && ((settings.hacks&hack_PMario) || rdp.swap_ci_index >= 0));

View File

@ -330,6 +330,7 @@ typedef struct {
#define hack_Tonic (1<<26) //tonic trouble
#define hack_Yoshi (1<<27) //Yoshi Story
#define hack_Zelda (1<<28) //zeldas hacks
#define hack_OoT (1<<29) //zelda OoT hacks
wxUint32 hacks;
//wrapper settings