mirror of
https://github.com/blawar/GLideN64.git
synced 2024-07-04 10:03:36 +00:00
Add FBInfo::isSupported() to know that emulator provides FBInfo support.
Correct frame buffer write detection hack (idea by purplemarshmallow).
This commit is contained in:
parent
ce7526eaf5
commit
dca42610a8
|
@ -1634,11 +1634,9 @@ void RDRAMtoFrameBuffer::CopyFromRDRAM(u32 _address, bool _bCFB)
|
|||
Cleaner cleaner(this);
|
||||
|
||||
if (m_pCurBuffer == nullptr) {
|
||||
if (!_bCFB && config.frameBufferEmulation.copyFromRDRAM == 0)
|
||||
return;
|
||||
if (_bCFB || (config.frameBufferEmulation.copyFromRDRAM != 0 && !fbInfo.isSupported()))
|
||||
m_pCurBuffer = frameBufferList().findBuffer(_address);
|
||||
}
|
||||
else if (m_vecAddress.empty())
|
||||
} else if (m_vecAddress.empty())
|
||||
return;
|
||||
|
||||
if (m_pCurBuffer == nullptr || m_pCurBuffer->m_size < G_IM_SIZ_16b)
|
||||
|
|
|
@ -10,6 +10,11 @@
|
|||
|
||||
FBInfo fbInfo;
|
||||
|
||||
void FBInfo::reset() {
|
||||
m_supported = false;
|
||||
m_pWriteBuffer = nullptr;
|
||||
}
|
||||
|
||||
void FBInfo::Write(u32 addr, u32 size)
|
||||
{
|
||||
// TODO: remove debug print
|
||||
|
@ -62,4 +67,5 @@ void FBInfo::GetInfo(void *pinfo)
|
|||
frameBufferList().fillBufferInfo(&pFBInfo[idx], 6 - idx);
|
||||
|
||||
m_pWriteBuffer = nullptr;
|
||||
m_supported = true;
|
||||
}
|
||||
|
|
|
@ -29,8 +29,13 @@ public:
|
|||
|
||||
void GetInfo(void *pinfo);
|
||||
|
||||
bool isSupported() const { return m_supported; }
|
||||
|
||||
void reset();
|
||||
|
||||
private:
|
||||
const FrameBuffer * m_pWriteBuffer;
|
||||
bool m_supported;
|
||||
};
|
||||
|
||||
extern FBInfo fbInfo;
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include "GLSLCombiner.h"
|
||||
#include "FrameBuffer.h"
|
||||
#include "DepthBuffer.h"
|
||||
#include "FrameBufferInfo.h"
|
||||
#include "GLideNHQ/Ext_TxFilter.h"
|
||||
#include "VI.h"
|
||||
#include "Config.h"
|
||||
|
@ -1395,6 +1396,7 @@ void OGLRender::_initData()
|
|||
TextDrawer::get().init();
|
||||
TFH.init();
|
||||
PostProcessor::get().init();
|
||||
fbInfo.reset();
|
||||
m_renderState = rsNone;
|
||||
|
||||
gSP.changed = gDP.changed = 0xFFFFFFFF;
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
#include "RSP.h"
|
||||
#include "FrameBuffer.h"
|
||||
#include "DepthBuffer.h"
|
||||
#include "FrameBufferInfo.h"
|
||||
#include "Config.h"
|
||||
#include "Debug.h"
|
||||
|
||||
|
@ -111,7 +112,7 @@ void VI_UpdateScreen()
|
|||
FrameBuffer * pBuffer = frameBufferList().findBuffer(*REG.VI_ORIGIN);
|
||||
if (pBuffer == NULL)
|
||||
gDP.changed |= CHANGED_CPU_FB_WRITE;
|
||||
else if (!pBuffer->isValid()) {
|
||||
else if (!fbInfo.isSupported() && !pBuffer->isValid()) {
|
||||
gDP.changed |= CHANGED_CPU_FB_WRITE;
|
||||
if (config.frameBufferEmulation.copyToRDRAM == 0)
|
||||
pBuffer->copyRdram();
|
||||
|
|
Loading…
Reference in New Issue
Block a user