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

Always show cfb until first dlist:

- move flag CHANGED_CPU_FB_WRITE from gSP to gDP (code refactor)
- enable CHANGED_CPU_FB_WRITE on video init.
- disable CHANGED_CPU_FB_WRITE in process display list.

many pd roms and demos use cpu rendering only
now they are supported with default settings
also detectCFB=1 now isn't needed anymore for some games

Commit is based on changes made by purplemarshmallow in #536
This commit is contained in:
Sergey Lipskiy 2015-05-18 12:31:27 +06:00
parent db9943a7b9
commit b219997c80
8 changed files with 16 additions and 15 deletions

View File

@ -1311,7 +1311,7 @@ void RDRAMtoFrameBuffer::CopyFromRDRAM( u32 _address, bool _bUseAlpha)
currentCombiner()->updateFBInfo();
glDisable(GL_DEPTH_TEST);
const u32 gspChanged = gSP.changed & CHANGED_CPU_FB_WRITE;
const u32 gdpChanged = gDP.changed & CHANGED_CPU_FB_WRITE;
gSP.changed = gDP.changed = 0;
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, pBuffer->m_FBO);
@ -1321,7 +1321,7 @@ void RDRAMtoFrameBuffer::CopyFromRDRAM( u32 _address, bool _bUseAlpha)
gSP.textureTile[0] = pTile0;
gDP.changed |= CHANGED_RENDERMODE | CHANGED_COMBINE;
gDP.changed |= gdpChanged | CHANGED_RENDERMODE | CHANGED_COMBINE;
}
void FrameBuffer_CopyFromRDRAM( u32 address, bool bUseAlpha )

View File

@ -598,6 +598,7 @@ void RDP_ProcessRDPList()
RSP.bLLE = false;
gDP.changed |= CHANGED_COLORBUFFER;
gDP.changed &= ~CHANGED_CPU_FB_WRITE;
dp_start = dp_current = dp_end;
}

View File

@ -153,8 +153,8 @@ void RSP_ProcessDList()
if (gSP.matrix.stackSize == 0)
gSP.matrix.stackSize = 32;
gSP.matrix.modelViewi = 0;
gSP.changed &= ~CHANGED_CPU_FB_WRITE;
gSP.changed |= CHANGED_MATRIX;
gDP.changed &= ~CHANGED_CPU_FB_WRITE;
gDPSetTexturePersp(G_TP_PERSP);
u32 uc_start = *(u32*)&DMEM[0x0FD0];

View File

@ -109,11 +109,11 @@ void VI_UpdateScreen()
}
if (config.frameBufferEmulation.enable) {
const bool bCFB = config.frameBufferEmulation.detectCFB != 0 && (gSP.changed&CHANGED_CPU_FB_WRITE) == CHANGED_CPU_FB_WRITE;
const bool bCFB = (gDP.changed&CHANGED_CPU_FB_WRITE) == CHANGED_CPU_FB_WRITE;
const bool bNeedUpdate = gDP.colorImage.changed != 0 || (bCFB ? true : (*REG.VI_ORIGIN != VI.lastOrigin));
if (bNeedUpdate) {
if ((gSP.changed&CHANGED_CPU_FB_WRITE) == CHANGED_CPU_FB_WRITE) {
if (bCFB) {
FrameBuffer * pBuffer = frameBufferList().findBuffer(*REG.VI_ORIGIN);
if (pBuffer == NULL || pBuffer->m_width != VI.width) {
if (!bVIUpdated) {
@ -137,10 +137,10 @@ void VI_UpdateScreen()
if (gDP.colorImage.changed)
uNumCurFrameIsShown = 0;
else {
else if (config.frameBufferEmulation.detectCFB != 0) {
uNumCurFrameIsShown++;
if (uNumCurFrameIsShown > 25)
gSP.changed |= CHANGED_CPU_FB_WRITE;
gDP.changed |= CHANGED_CPU_FB_WRITE;
}
frameBufferList().clearBuffersChanged();
VI.lastOrigin = *REG.VI_ORIGIN;
@ -148,10 +148,10 @@ void VI_UpdateScreen()
while (Debug.paused && !Debug.step);
Debug.step = FALSE;
#endif
} else {
} else if (config.frameBufferEmulation.detectCFB != 0) {
uNumCurFrameIsShown++;
if (uNumCurFrameIsShown > 25)
gSP.changed |= CHANGED_CPU_FB_WRITE;
gDP.changed |= CHANGED_CPU_FB_WRITE;
}
}
else {

View File

@ -138,7 +138,7 @@ void PluginAPI::RomOpen()
void PluginAPI::ShowCFB()
{
gSP.changed |= CHANGED_CPU_FB_WRITE;
gDP.changed |= CHANGED_CPU_FB_WRITE;
}
void PluginAPI::UpdateScreen()

View File

@ -12,9 +12,10 @@
#define CHANGED_COMBINE 0x040
#define CHANGED_ALPHACOMPARE 0x080
#define CHANGED_FOGCOLOR 0x100
#define CHANGED_FB_TEXTURE 0x200
#define CHANGED_BLENDCOLOR 0x2000
#define CHANGED_BLENDCOLOR 0x200
#define CHANGED_FB_TEXTURE 0x400
#define CHANGED_COLORBUFFER 0x1000
#define CHANGED_CPU_FB_WRITE 0x2000
#define TEXTUREMODE_NORMAL 0
#define TEXTUREMODE_BGIMAGE 2

View File

@ -11,8 +11,7 @@
#define CHANGED_TEXTURE 0x10
#define CHANGED_FOGPOSITION 0x20
#define CHANGED_LIGHT 0x40
#define CHANGED_CPU_FB_WRITE 0x80
#define CHANGED_TEXTURESCALE 0x100
#define CHANGED_TEXTURESCALE 0x80
#define CLIP_X 0x03
#define CLIP_NEGX 0x01

View File

@ -114,7 +114,7 @@ void OGLVideoMupenPlus::_swapBuffers()
gSP.changed |= CHANGED_VIEWPORT;
}
gDP.changed |= CHANGED_COMBINE;
(*renderCallback)((gSP.changed&CHANGED_CPU_FB_WRITE) == 0 ? 1 : 0);
(*renderCallback)((gDP.changed&CHANGED_CPU_FB_WRITE) == 0 ? 1 : 0);
}
CoreVideo_GL_SwapBuffers();
}