mirror of
https://github.com/blawar/GLideN64.git
synced 2024-07-04 10:03:36 +00:00
Fix detection of frame buffers address space intersection.
Fixed problem of growing frame buffers number.
This commit is contained in:
parent
62f5d8cf4e
commit
a3d702a4dd
|
@ -155,10 +155,11 @@ void FrameBufferList::destroy() {
|
|||
m_drawBuffer = GL_BACK;
|
||||
}
|
||||
|
||||
FrameBuffer * FrameBufferList::findBuffer(u32 _address)
|
||||
FrameBuffer * FrameBufferList::findBuffer(u32 _startAddress, u32 _endAddress)
|
||||
{
|
||||
for (FrameBuffers::iterator iter = m_list.begin(); iter != m_list.end(); ++iter)
|
||||
if (iter->m_startAddress <= _address && iter->m_endAddress >= _address)
|
||||
if ((iter->m_startAddress <= _startAddress && iter->m_endAddress >= _startAddress) ||
|
||||
(_startAddress < iter->m_startAddress && _endAddress > iter->m_startAddress))
|
||||
return &(*iter);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -183,8 +184,9 @@ void FrameBufferList::saveBuffer(u32 _address, u16 _format, u16 _size, u16 _widt
|
|||
gDPFillRDRAM(m_pCurrent->m_startAddress, 0, 0, m_pCurrent->m_width, gDP.colorImage.height, m_pCurrent->m_width, m_pCurrent->m_size, m_pCurrent->m_fillcolor);
|
||||
}
|
||||
|
||||
const u32 endAddress = _address + ((_width * _height << _size >> 1) - 1);
|
||||
if (m_pCurrent == NULL || m_pCurrent->m_startAddress != _address)
|
||||
m_pCurrent = findBuffer(_address);
|
||||
m_pCurrent = findBuffer(_address, endAddress);
|
||||
if (m_pCurrent != NULL) {
|
||||
if ((m_pCurrent->m_startAddress != _address) ||
|
||||
(m_pCurrent->m_width != _width) ||
|
||||
|
@ -214,7 +216,7 @@ void FrameBufferList::saveBuffer(u32 _address, u16 _format, u16 _size, u16 _widt
|
|||
FrameBuffer & buffer = m_list.front();
|
||||
|
||||
buffer.m_startAddress = _address;
|
||||
buffer.m_endAddress = _address + ((_width * _height << _size >> 1) - 1);
|
||||
buffer.m_endAddress = endAddress;
|
||||
buffer.m_width = _width;
|
||||
buffer.m_height = _height;
|
||||
buffer.m_size = _size;
|
||||
|
@ -337,7 +339,7 @@ void FrameBufferList::renderBuffer(u32 _address)
|
|||
if (VI.width == 0) // H width is zero. Don't draw
|
||||
return;
|
||||
|
||||
FrameBuffer *pBuffer = findBuffer(_address);
|
||||
FrameBuffer *pBuffer = findBuffer(_address, 0);
|
||||
if (pBuffer == NULL)
|
||||
return;
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@ public:
|
|||
void saveBuffer(u32 _address, u16 _format, u16 _size, u16 _width, u16 _height, bool _cfb);
|
||||
void removeBuffer(u32 _address);
|
||||
void attachDepthBuffer();
|
||||
FrameBuffer * findBuffer(u32 _address);
|
||||
FrameBuffer * findBuffer(u32 _startAddress, u32 _endAddress = 0);
|
||||
FrameBuffer * findTmpBuffer(u32 _address);
|
||||
FrameBuffer * getCurrent() const {return m_pCurrent;}
|
||||
void renderBuffer(u32 _address);
|
||||
|
|
Loading…
Reference in New Issue
Block a user