1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-06-30 08:24:05 +00:00

Drop render state after drawing a primitive, in gDPFullSync() and

GraphicsDrawer::copyTexturedRect to avoid wrong use of TexCoordBounds heuristics.

Fixed flickering in the starcraft intro when it transitions from picture to picture.
This commit is contained in:
Sergey Lipskiy 2021-06-05 22:32:01 +07:00
parent 189afd3996
commit 66e8ff3c00
3 changed files with 9 additions and 3 deletions

View File

@ -105,8 +105,7 @@ void DisplayWindow::closeWindow()
{
if (!m_bToggleFullscreen || !m_bFullscreen)
return;
if (m_drawer.getDrawingState() != DrawingState::Non)
m_drawer._destroyData();
m_drawer._destroyData();
_changeWindow();
m_bToggleFullscreen = false;
}

View File

@ -785,6 +785,7 @@ void GraphicsDrawer::drawTriangles()
triangles.num = 0;
triangles.maxElement = 0;
dropRenderState();
}
void GraphicsDrawer::drawScreenSpaceTriangle(u32 _numVtx, graphics::DrawModeParam _mode)
@ -838,6 +839,7 @@ void GraphicsDrawer::drawScreenSpaceTriangle(u32 _numVtx, graphics::DrawModePara
m_statistics.drawnTris += _numVtx / 3;
else if (_mode == graphics::drawmode::TRIANGLE_STRIP)
m_statistics.drawnTris += _numVtx - 2;
dropRenderState();
}
void GraphicsDrawer::drawDMATriangles(u32 _numVtx)
@ -875,6 +877,7 @@ void GraphicsDrawer::drawDMATriangles(u32 _numVtx)
} else {
gfxContext.drawTriangles(triParams);
}
dropRenderState();
}
void GraphicsDrawer::_drawThickLine(u32 _v0, u32 _v1, float _width)
@ -983,6 +986,7 @@ void GraphicsDrawer::drawLine(u32 _v0, u32 _v1, float _width)
SPVertex vertexBuf[2] = { triangles.vertices[_v0], triangles.vertices[_v1] };
gfxContext.drawLine(lineWidth, vertexBuf);
dropRenderState();
}
void GraphicsDrawer::drawRect(int _ulx, int _uly, int _lrx, int _lry)
@ -1051,6 +1055,7 @@ void GraphicsDrawer::drawRect(int _ulx, int _uly, int _lrx, int _lry)
gfxContext.drawRects(rectParams);
g_debugger.addRects(rectParams);
gSP.changed |= CHANGED_GEOMETRYMODE | CHANGED_VIEWPORT;
dropRenderState();
}
static
@ -1439,6 +1444,7 @@ void GraphicsDrawer::drawTexturedRect(const TexturedRectParams & _params)
}
gSP.changed |= CHANGED_GEOMETRYMODE | CHANGED_VIEWPORT;
dropRenderState();
}
void GraphicsDrawer::correctTexturedRectParams(TexturedRectParams & _params)
@ -1686,7 +1692,7 @@ bool GraphicsDrawer::isRejected(u32 _v0, u32 _v1, u32 _v2) const
void GraphicsDrawer::copyTexturedRect(const CopyRectParams & _params)
{
m_drawingState = DrawingState::TexRect;
m_drawingState = DrawingState::Non;
const float scaleX = 1.0f / _params.dstWidth;
const float scaleY = 1.0f / _params.dstHeight;

View File

@ -904,6 +904,7 @@ void gDPFullSync()
}
dwnd().getDrawer().flush();
dwnd().getDrawer().dropRenderState();
frameBufferList().updateCurrentBufferEndAddress();