1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-07-02 09:03:37 +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
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();
glGenFramebuffers(1, &m_FBO);
@ -104,7 +104,7 @@ FrameBuffer::FrameBuffer() : m_cleared(false), m_isDepthBuffer(false), m_copiedT
FrameBuffer::FrameBuffer(FrameBuffer && _other) :
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_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_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;
}
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)
{
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;
float m_scaleX, m_scaleY;
bool m_cleared;
bool m_changed;
bool m_cfb;
bool m_isDepthBuffer;
bool m_copiedToRDRAM;
@ -52,6 +53,8 @@ public:
FrameBuffer * getCurrent() const {return m_pCurrent;}
void renderBuffer(u32 _address);
bool isFboMode() const {return m_drawBuffer == GL_FRAMEBUFFER;}
void setBufferChanged();
void clearBuffersChanged();
static FrameBufferList & get()
{

View File

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

2
VI.cpp
View File

@ -141,7 +141,7 @@ void VI_UpdateScreen()
if (uNumCurFrameIsShown > 25)
gSP.changed |= CHANGED_CPU_FB_WRITE;
}
gDP.colorImage.changed = FALSE;
frameBufferList().clearBuffersChanged();
VI.lastOrigin = *REG.VI_ORIGIN;
#ifdef DEBUG
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);
gDP.colorImage.changed = TRUE;
frameBufferList().setBufferChanged();
if (gDP.otherMode.cycleType == G_CYC_FILL) {
if (lry > (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[1] = textureTileOrg[1];
gDP.colorImage.changed = TRUE;
frameBufferList().setBufferChanged();
if (gDP.colorImage.width < 64)
gDP.colorImage.height = (u32)max( (f32)gDP.colorImage.height, lry );
else

View File

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