1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-07-04 10:03:36 +00:00

Replace gDP.colorImage.changed by FrameBuffer::m_changed

This commit is contained in:
Sergey Lipskiy 2015-03-01 17:52:59 +06:00
parent ef7ad9a549
commit 1b2b9f9865
6 changed files with 25 additions and 8 deletions

View File

@ -95,7 +95,7 @@ DepthBufferToRDRAM g_dbToRDRAM;
#endif #endif
RDRAMtoFrameBuffer g_RDRAMtoFB; RDRAMtoFrameBuffer g_RDRAMtoFB;
FrameBuffer::FrameBuffer() : m_cleared(false), m_isDepthBuffer(false), m_copiedToRDRAM(false), m_pLoadTile(NULL), m_pDepthBuffer(NULL), m_pResolveTexture(NULL), m_resolveFBO(0), m_resolved(false) FrameBuffer::FrameBuffer() : m_cleared(false), m_changed(false), m_isDepthBuffer(false), m_copiedToRDRAM(false), m_pLoadTile(NULL), m_pDepthBuffer(NULL), m_pResolveTexture(NULL), m_resolveFBO(0), m_resolved(false)
{ {
m_pTexture = textureCache().addFrameBufferTexture(); m_pTexture = textureCache().addFrameBufferTexture();
glGenFramebuffers(1, &m_FBO); glGenFramebuffers(1, &m_FBO);
@ -104,7 +104,7 @@ FrameBuffer::FrameBuffer() : m_cleared(false), m_isDepthBuffer(false), m_copiedT
FrameBuffer::FrameBuffer(FrameBuffer && _other) : FrameBuffer::FrameBuffer(FrameBuffer && _other) :
m_startAddress(_other.m_startAddress), m_endAddress(_other.m_endAddress), m_startAddress(_other.m_startAddress), m_endAddress(_other.m_endAddress),
m_size(_other.m_size), m_width(_other.m_width), m_height(_other.m_height), m_fillcolor(_other.m_fillcolor), m_size(_other.m_size), m_width(_other.m_width), m_height(_other.m_height), m_fillcolor(_other.m_fillcolor),
m_scaleX(_other.m_scaleX), m_scaleY(_other.m_scaleY), m_cleared(_other.m_cleared), m_cfb(_other.m_cfb), m_isDepthBuffer(_other.m_isDepthBuffer), m_copiedToRDRAM(_other.m_copiedToRDRAM), m_scaleX(_other.m_scaleX), m_scaleY(_other.m_scaleY), m_cleared(_other.m_cleared), m_changed(_other.m_changed), m_cfb(_other.m_cfb), m_isDepthBuffer(_other.m_isDepthBuffer), m_copiedToRDRAM(_other.m_copiedToRDRAM),
m_FBO(_other.m_FBO), m_pLoadTile(_other.m_pLoadTile), m_pTexture(_other.m_pTexture), m_pDepthBuffer(_other.m_pDepthBuffer), m_FBO(_other.m_FBO), m_pLoadTile(_other.m_pLoadTile), m_pTexture(_other.m_pTexture), m_pDepthBuffer(_other.m_pDepthBuffer),
m_pResolveTexture(_other.m_pResolveTexture), m_resolveFBO(_other.m_resolveFBO), m_resolved(_other.m_resolved) m_pResolveTexture(_other.m_pResolveTexture), m_resolveFBO(_other.m_resolveFBO), m_resolved(_other.m_resolved)
{ {
@ -243,6 +243,20 @@ void FrameBufferList::destroy() {
m_drawBuffer = GL_BACK; m_drawBuffer = GL_BACK;
} }
void FrameBufferList::setBufferChanged()
{
gDP.colorImage.changed = TRUE;
if (m_pCurrent != NULL)
m_pCurrent->m_changed = true;
}
void FrameBufferList::clearBuffersChanged()
{
gDP.colorImage.changed = FALSE;
for (FrameBuffers::iterator iter = m_list.begin(); iter != m_list.end(); ++iter)
iter->m_changed = false;
}
FrameBuffer * FrameBufferList::findBuffer(u32 _startAddress) FrameBuffer * FrameBufferList::findBuffer(u32 _startAddress)
{ {
for (FrameBuffers::iterator iter = m_list.begin(); iter != m_list.end(); ++iter) for (FrameBuffers::iterator iter = m_list.begin(); iter != m_list.end(); ++iter)

View File

@ -21,6 +21,7 @@ struct FrameBuffer
u32 m_size, m_width, m_height, m_fillcolor; u32 m_size, m_width, m_height, m_fillcolor;
float m_scaleX, m_scaleY; float m_scaleX, m_scaleY;
bool m_cleared; bool m_cleared;
bool m_changed;
bool m_cfb; bool m_cfb;
bool m_isDepthBuffer; bool m_isDepthBuffer;
bool m_copiedToRDRAM; bool m_copiedToRDRAM;
@ -52,6 +53,8 @@ public:
FrameBuffer * getCurrent() const {return m_pCurrent;} FrameBuffer * getCurrent() const {return m_pCurrent;}
void renderBuffer(u32 _address); void renderBuffer(u32 _address);
bool isFboMode() const {return m_drawBuffer == GL_FRAMEBUFFER;} bool isFboMode() const {return m_drawBuffer == GL_FRAMEBUFFER;}
void setBufferChanged();
void clearBuffersChanged();
static FrameBufferList & get() static FrameBufferList & get()
{ {

View File

@ -804,7 +804,7 @@ void OGLRender::drawLLETriangle(u32 _numVtx)
glDrawArrays(GL_TRIANGLE_STRIP, 0, _numVtx); glDrawArrays(GL_TRIANGLE_STRIP, 0, _numVtx);
triangles.num = 0; triangles.num = 0;
gDP.colorImage.changed = TRUE; frameBufferList().setBufferChanged();
gSP.changed |= CHANGED_VIEWPORT | CHANGED_GEOMETRYMODE; gSP.changed |= CHANGED_VIEWPORT | CHANGED_GEOMETRYMODE;
#ifdef __TRIBUFFER_OPT #ifdef __TRIBUFFER_OPT

2
VI.cpp
View File

@ -141,7 +141,7 @@ void VI_UpdateScreen()
if (uNumCurFrameIsShown > 25) if (uNumCurFrameIsShown > 25)
gSP.changed |= CHANGED_CPU_FB_WRITE; gSP.changed |= CHANGED_CPU_FB_WRITE;
} }
gDP.colorImage.changed = FALSE; frameBufferList().clearBuffersChanged();
VI.lastOrigin = *REG.VI_ORIGIN; VI.lastOrigin = *REG.VI_ORIGIN;
#ifdef DEBUG #ifdef DEBUG
while (Debug.paused && !Debug.step); while (Debug.paused && !Debug.step);

View File

@ -934,7 +934,7 @@ void gDPFillRectangle( s32 ulx, s32 uly, s32 lrx, s32 lry )
} }
render.drawRect(ulx, uly, lrx, lry, pColor); render.drawRect(ulx, uly, lrx, lry, pColor);
gDP.colorImage.changed = TRUE; frameBufferList().setBufferChanged();
if (gDP.otherMode.cycleType == G_CYC_FILL) { if (gDP.otherMode.cycleType == G_CYC_FILL) {
if (lry > (u32)gDP.scissor.lry) if (lry > (u32)gDP.scissor.lry)
gDP.colorImage.height = (u32)max(gDP.colorImage.height, (u32)gDP.scissor.lry); gDP.colorImage.height = (u32)max(gDP.colorImage.height, (u32)gDP.scissor.lry);
@ -1019,7 +1019,7 @@ void gDPTextureRectangle( f32 ulx, f32 uly, f32 lrx, f32 lry, s32 tile, f32 s, f
gSP.textureTile[0] = textureTileOrg[0]; gSP.textureTile[0] = textureTileOrg[0];
gSP.textureTile[1] = textureTileOrg[1]; gSP.textureTile[1] = textureTileOrg[1];
gDP.colorImage.changed = TRUE; frameBufferList().setBufferChanged();
if (gDP.colorImage.width < 64) if (gDP.colorImage.width < 64)
gDP.colorImage.height = (u32)max( (f32)gDP.colorImage.height, lry ); gDP.colorImage.height = (u32)max( (f32)gDP.colorImage.height, lry );
else else

View File

@ -46,7 +46,7 @@ void gSPTriangle(s32 v0, s32 v1, s32 v2)
render.drawTriangles(); render.drawTriangles();
} }
gDP.colorImage.changed = TRUE; frameBufferList().setBufferChanged();
gDP.colorImage.height = (u32)max( gDP.colorImage.height, (u32)gDP.scissor.lry ); gDP.colorImage.height = (u32)max( gDP.colorImage.height, (u32)gDP.scissor.lry );
} }
@ -2303,7 +2303,7 @@ void gSPObjSprite(u32 sp)
render.drawLLETriangle(4); render.drawLLETriangle(4);
gDP.colorImage.changed = TRUE; frameBufferList().setBufferChanged();
gDP.colorImage.height = (u32)(max( gDP.colorImage.height, (u32)gDP.scissor.lry )); gDP.colorImage.height = (u32)(max( gDP.colorImage.height, (u32)gDP.scissor.lry ));
} }