diff --git a/OpenGL.cpp b/OpenGL.cpp index 8b183366..03a3dcdf 100644 --- a/OpenGL.cpp +++ b/OpenGL.cpp @@ -798,6 +798,7 @@ void OGLRender::drawLLETriangle(u32 _numVtx) glDrawArrays(GL_TRIANGLE_STRIP, 0, _numVtx); triangles.num = 0; + gDP.colorImage.changed = TRUE; gSP.changed |= CHANGED_VIEWPORT | CHANGED_GEOMETRYMODE; #ifdef __TRIBUFFER_OPT diff --git a/VI.cpp b/VI.cpp index 62f20ee1..1bce6e41 100644 --- a/VI.cpp +++ b/VI.cpp @@ -129,9 +129,15 @@ void VI_UpdateScreen() } frameBufferList().renderBuffer(*REG.VI_ORIGIN); + if (gDP.colorImage.changed) + uNumCurFrameIsShown = 0; + else { + uNumCurFrameIsShown++; + if (uNumCurFrameIsShown > 25) + gSP.changed |= CHANGED_CPU_FB_WRITE; + } gDP.colorImage.changed = FALSE; VI.lastOrigin = *REG.VI_ORIGIN; - uNumCurFrameIsShown = 0;; #ifdef DEBUG while (Debug.paused && !Debug.step); Debug.step = FALSE; diff --git a/gSP.cpp b/gSP.cpp index 1fc3c3d0..2030ca1b 100644 --- a/gSP.cpp +++ b/gSP.cpp @@ -2042,7 +2042,6 @@ void gSPDrawObjRect(const ObjCoordinates & _coords) vtx3.t = _coords.lrt; render.drawLLETriangle(4); - gDP.colorImage.changed = TRUE; gDP.colorImage.height = (u32)(max(gDP.colorImage.height, (u32)gDP.scissor.lry)); }