diff --git a/src/Config.h b/src/Config.h index ecbfa715..864dedd9 100644 --- a/src/Config.h +++ b/src/Config.h @@ -120,6 +120,7 @@ struct Config #define hack_blastCorps (1<<8) //Blast Corps black polygons #define hack_ignoreVIHeightChange (1<<9) //Do not reset FBO when VI height is changed. Space Invaders need it. #define hack_VIUpdateOnCIChange (1<<10) //Update frame if color buffer changed. Needed for Quake II underwater. +#define hack_skipVIChangeCheck (1<<11) //Don't reset FBO when VI parameters changed. Zelda MM extern Config config; diff --git a/src/RSP.cpp b/src/RSP.cpp index d99622a8..a2724fce 100644 --- a/src/RSP.cpp +++ b/src/RSP.cpp @@ -337,6 +337,8 @@ void RSP_Init() strstr(RSP.romname, (const char *)"PERFECT DARK") ) config.generalEmulation.hacks |= hack_VIUpdateOnCIChange; + else if (strstr(RSP.romname, (const char *)"MASK") != NULL) // Zelda MM + config.generalEmulation.hacks |= hack_skipVIChangeCheck; api().FindPluginPath(RSP.pluginpath); diff --git a/src/VI.cpp b/src/VI.cpp index 35965ce5..dae1c4f1 100644 --- a/src/VI.cpp +++ b/src/VI.cpp @@ -68,7 +68,7 @@ void VI_UpdateSize() FrameBufferList & fbList = frameBufferList(); FrameBuffer * pBuffer = fbList.findBuffer(VI.lastOrigin); DepthBuffer * pDepthBuffer = pBuffer != NULL ? pBuffer->m_pDepthBuffer : NULL; - if (config.frameBufferEmulation.enable && + if (config.frameBufferEmulation.enable && ((config.generalEmulation.hacks & hack_skipVIChangeCheck) == 0) && ((interlacedPrev != VI.interlaced) || (VI.width > 0 && VI.width != VI.widthPrev) || (!VI.interlaced && pDepthBuffer != NULL && pDepthBuffer->m_width != VI.width) ||