1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-07-02 09:03:37 +00:00

Fix validity check for depth buffer.

Fixed Pokemon Stadium Menu Items Missing (Regression) #1446
This commit is contained in:
Sergey Lipskiy 2017-03-29 17:01:59 +07:00
parent cc5f11dec2
commit 4f5759ef46
2 changed files with 19 additions and 4 deletions

View File

@ -704,6 +704,13 @@ void FrameBufferList::removeBuffers(u32 _width)
}
}
void FrameBufferList::depthBufferCopyRdram()
{
FrameBuffer * pCurrentDepthBuffer = findBuffer(gDP.depthImageAddress);
if (pCurrentDepthBuffer != nullptr)
pCurrentDepthBuffer->copyRdram();
}
void FrameBufferList::fillBufferInfo(void * _pinfo, u32 _size)
{
FBInfo::FrameBufferInfo* pInfo = reinterpret_cast<FBInfo::FrameBufferInfo*>(_pinfo);
@ -1233,15 +1240,22 @@ void FrameBuffer_CopyChunkToRDRAM(u32 _address)
bool FrameBuffer_CopyDepthBuffer( u32 address )
{
FrameBuffer * pCopyBuffer = frameBufferList().getCopyBuffer();
FrameBufferList & fblist = frameBufferList();
FrameBuffer * pCopyBuffer = fblist.getCopyBuffer();
if (pCopyBuffer != nullptr) {
// This code is mainly to emulate Zelda MM camera.
ColorBufferToRDRAM::get().copyToRDRAM(pCopyBuffer->m_startAddress, true);
pCopyBuffer->m_RdramCopy.resize(0); // To disable validity check by RDRAM content. CPU may change content of the buffer for some unknown reason.
frameBufferList().setCopyBuffer(nullptr);
fblist.setCopyBuffer(nullptr);
return true;
} else
return DepthBufferToRDRAM::get().copyToRDRAM(address);
}
if (DepthBufferToRDRAM::get().copyToRDRAM(address)) {
fblist.depthBufferCopyRdram();
return true;
}
return false;
}
bool FrameBuffer_CopyDepthBufferChunk(u32 address)

View File

@ -98,6 +98,7 @@ public:
FrameBuffer * getCopyBuffer() const { return m_pCopy; }
void setCopyBuffer(FrameBuffer * _pBuffer) { m_pCopy = _pBuffer; }
void depthBufferCopyRdram();
void fillBufferInfo(void * _pinfo, u32 _size);