1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-07-07 03:13:49 +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) void FrameBufferList::fillBufferInfo(void * _pinfo, u32 _size)
{ {
FBInfo::FrameBufferInfo* pInfo = reinterpret_cast<FBInfo::FrameBufferInfo*>(_pinfo); FBInfo::FrameBufferInfo* pInfo = reinterpret_cast<FBInfo::FrameBufferInfo*>(_pinfo);
@ -1233,15 +1240,22 @@ void FrameBuffer_CopyChunkToRDRAM(u32 _address)
bool FrameBuffer_CopyDepthBuffer( u32 address ) bool FrameBuffer_CopyDepthBuffer( u32 address )
{ {
FrameBuffer * pCopyBuffer = frameBufferList().getCopyBuffer(); FrameBufferList & fblist = frameBufferList();
FrameBuffer * pCopyBuffer = fblist.getCopyBuffer();
if (pCopyBuffer != nullptr) { if (pCopyBuffer != nullptr) {
// This code is mainly to emulate Zelda MM camera. // This code is mainly to emulate Zelda MM camera.
ColorBufferToRDRAM::get().copyToRDRAM(pCopyBuffer->m_startAddress, true); 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. 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; return true;
} else }
return DepthBufferToRDRAM::get().copyToRDRAM(address);
if (DepthBufferToRDRAM::get().copyToRDRAM(address)) {
fblist.depthBufferCopyRdram();
return true;
}
return false;
} }
bool FrameBuffer_CopyDepthBufferChunk(u32 address) bool FrameBuffer_CopyDepthBufferChunk(u32 address)

View File

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