mirror of
https://github.com/blawar/GLideN64.git
synced 2024-07-04 10:03:36 +00:00
Force CFB mode if current frame is shown more than 4 times in succession (<15 fps)
This commit is contained in:
parent
d6a3b265a5
commit
fb0ba864d1
|
@ -56,7 +56,7 @@ public:
|
|||
void Init();
|
||||
void Destroy();
|
||||
|
||||
void CopyFromRDRAM( u32 address);
|
||||
void CopyFromRDRAM( u32 _address, bool _bUseAlpha);
|
||||
|
||||
private:
|
||||
struct PBOBinder {
|
||||
|
@ -706,9 +706,9 @@ void RDRAMtoFrameBuffer::Destroy()
|
|||
glDeleteBuffers(1, &m_PBO);
|
||||
}
|
||||
|
||||
void RDRAMtoFrameBuffer::CopyFromRDRAM( u32 address)
|
||||
void RDRAMtoFrameBuffer::CopyFromRDRAM( u32 _address, bool _bUseAlpha)
|
||||
{
|
||||
FrameBuffer *current = FrameBuffer_FindBuffer(address);
|
||||
FrameBuffer *current = FrameBuffer_FindBuffer(_address);
|
||||
if (current == NULL || current->size < G_IM_SIZ_16b)
|
||||
return;
|
||||
|
||||
|
@ -723,7 +723,7 @@ void RDRAMtoFrameBuffer::CopyFromRDRAM( u32 address)
|
|||
if (ptr == NULL)
|
||||
return;
|
||||
|
||||
u8 * image = RDRAM + address;
|
||||
u8 * image = RDRAM + _address;
|
||||
u32 * dst = (u32*)ptr;
|
||||
|
||||
u32 empty = 0;
|
||||
|
@ -731,7 +731,7 @@ void RDRAMtoFrameBuffer::CopyFromRDRAM( u32 address)
|
|||
if (current->size == G_IM_SIZ_16b) {
|
||||
u16 * src = (u16*)image;
|
||||
u16 col;
|
||||
const u32 bound = (RDRAMSize + 1 - address) >> 1;
|
||||
const u32 bound = (RDRAMSize + 1 - _address) >> 1;
|
||||
for (u32 y = 0; y < height; y++)
|
||||
{
|
||||
for (u32 x = 0; x < width; x++)
|
||||
|
@ -753,7 +753,7 @@ void RDRAMtoFrameBuffer::CopyFromRDRAM( u32 address)
|
|||
// 32 bit
|
||||
u32 * src = (u32*)image;
|
||||
u32 col;
|
||||
const u32 bound = (RDRAMSize + 1 - address) >> 2;
|
||||
const u32 bound = (RDRAMSize + 1 - _address) >> 2;
|
||||
for (u32 y=0; y < height; y++)
|
||||
{
|
||||
for (u32 x=0; x < width; x++)
|
||||
|
@ -797,7 +797,10 @@ void RDRAMtoFrameBuffer::CopyFromRDRAM( u32 address)
|
|||
|
||||
glActiveTextureARB(GL_TEXTURE0_ARB);
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
Combiner_SetCombine( EncodeCombineMode( 0, 0, 0, TEXEL0, 0, 0, 0, TEXEL0, 0, 0, 0, TEXEL0, 0, 0, 0, TEXEL0 ) );
|
||||
if (_bUseAlpha)
|
||||
Combiner_SetCombine( EncodeCombineMode( 0, 0, 0, TEXEL0, 0, 0, 0, TEXEL0, 0, 0, 0, TEXEL0, 0, 0, 0, TEXEL0 ) );
|
||||
else
|
||||
Combiner_SetCombine( EncodeCombineMode( 0, 0, 0, TEXEL0, 0, 0, 0, 1, 0, 0, 0, TEXEL0, 0, 0, 0, 1 ) );
|
||||
glEnable( GL_BLEND );
|
||||
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
|
||||
//glDisable( GL_ALPHA_TEST );
|
||||
|
@ -844,7 +847,7 @@ void RDRAMtoFrameBuffer::CopyFromRDRAM( u32 address)
|
|||
#endif
|
||||
}
|
||||
|
||||
void FrameBuffer_CopyFromRDRAM( u32 address )
|
||||
void FrameBuffer_CopyFromRDRAM( u32 address, bool bUseAlpha )
|
||||
{
|
||||
g_RDRAMtoFB.CopyFromRDRAM(address);
|
||||
g_RDRAMtoFB.CopyFromRDRAM(address, bUseAlpha);
|
||||
}
|
||||
|
|
|
@ -36,7 +36,7 @@ void FrameBuffer_SaveBuffer( u32 address, u16 format, u16 size, u16 width, u16 h
|
|||
void FrameBuffer_RenderBuffer( u32 address );
|
||||
void FrameBuffer_RemoveBuffer( u32 address );
|
||||
void FrameBuffer_CopyToRDRAM( u32 address, bool bSync );
|
||||
void FrameBuffer_CopyFromRDRAM( u32 address );
|
||||
void FrameBuffer_CopyFromRDRAM( u32 address, bool bUseAlpha );
|
||||
FrameBuffer *FrameBuffer_FindBuffer( u32 address );
|
||||
void FrameBuffer_ActivateBufferTexture( s16 t, FrameBuffer *buffer );
|
||||
void FrameBuffer_ActivateBufferTextureBG( s16 t, FrameBuffer *buffer );
|
||||
|
|
10
VI.cpp
10
VI.cpp
|
@ -35,6 +35,7 @@ void VI_UpdateSize()
|
|||
|
||||
void VI_UpdateScreen()
|
||||
{
|
||||
static u32 uNumCurFrameIsShown = 0;
|
||||
glFinish();
|
||||
|
||||
if (OGL.captureScreen) {
|
||||
|
@ -43,7 +44,7 @@ void VI_UpdateScreen()
|
|||
}
|
||||
|
||||
if (OGL.frameBufferTextures) {
|
||||
const bool bCFB = (gSP.changed&CHANGED_CPU_FB_WRITE) != 0;
|
||||
const bool bCFB = (gSP.changed&CHANGED_CPU_FB_WRITE) == CHANGED_CPU_FB_WRITE;
|
||||
const bool bNeedUpdate = bCFB ? true : (*REG.VI_ORIGIN != VI.lastOrigin) && gDP.colorImage.changed;
|
||||
|
||||
if (bNeedUpdate) {
|
||||
|
@ -56,17 +57,22 @@ void VI_UpdateScreen()
|
|||
FrameBuffer_SaveBuffer( *REG.VI_ORIGIN, G_IM_FMT_RGBA, size, *REG.VI_WIDTH, VI.height );
|
||||
}
|
||||
if (g_bCopyFromRDRAM || bCFB)
|
||||
FrameBuffer_CopyFromRDRAM( *REG.VI_ORIGIN );
|
||||
FrameBuffer_CopyFromRDRAM( *REG.VI_ORIGIN, g_bCopyFromRDRAM && !bCFB );
|
||||
if (g_bCopyToRDRAM && !bCFB)
|
||||
FrameBuffer_CopyToRDRAM( *REG.VI_ORIGIN, false );
|
||||
FrameBuffer_RenderBuffer( *REG.VI_ORIGIN );
|
||||
|
||||
gDP.colorImage.changed = FALSE;
|
||||
VI.lastOrigin = *REG.VI_ORIGIN;
|
||||
uNumCurFrameIsShown = 0;;
|
||||
#ifdef DEBUG
|
||||
while (Debug.paused && !Debug.step);
|
||||
Debug.step = FALSE;
|
||||
#endif
|
||||
} else {
|
||||
uNumCurFrameIsShown++;
|
||||
if (uNumCurFrameIsShown > 4)
|
||||
gSP.changed |= CHANGED_CPU_FB_WRITE;
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
|
Loading…
Reference in New Issue
Block a user