mirror of
https://github.com/blawar/GLideN64.git
synced 2024-07-02 09:03:37 +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:
parent
189afd3996
commit
66e8ff3c00
|
@ -105,8 +105,7 @@ void DisplayWindow::closeWindow()
|
||||||
{
|
{
|
||||||
if (!m_bToggleFullscreen || !m_bFullscreen)
|
if (!m_bToggleFullscreen || !m_bFullscreen)
|
||||||
return;
|
return;
|
||||||
if (m_drawer.getDrawingState() != DrawingState::Non)
|
m_drawer._destroyData();
|
||||||
m_drawer._destroyData();
|
|
||||||
_changeWindow();
|
_changeWindow();
|
||||||
m_bToggleFullscreen = false;
|
m_bToggleFullscreen = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -785,6 +785,7 @@ void GraphicsDrawer::drawTriangles()
|
||||||
|
|
||||||
triangles.num = 0;
|
triangles.num = 0;
|
||||||
triangles.maxElement = 0;
|
triangles.maxElement = 0;
|
||||||
|
dropRenderState();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphicsDrawer::drawScreenSpaceTriangle(u32 _numVtx, graphics::DrawModeParam _mode)
|
void GraphicsDrawer::drawScreenSpaceTriangle(u32 _numVtx, graphics::DrawModeParam _mode)
|
||||||
|
@ -838,6 +839,7 @@ void GraphicsDrawer::drawScreenSpaceTriangle(u32 _numVtx, graphics::DrawModePara
|
||||||
m_statistics.drawnTris += _numVtx / 3;
|
m_statistics.drawnTris += _numVtx / 3;
|
||||||
else if (_mode == graphics::drawmode::TRIANGLE_STRIP)
|
else if (_mode == graphics::drawmode::TRIANGLE_STRIP)
|
||||||
m_statistics.drawnTris += _numVtx - 2;
|
m_statistics.drawnTris += _numVtx - 2;
|
||||||
|
dropRenderState();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphicsDrawer::drawDMATriangles(u32 _numVtx)
|
void GraphicsDrawer::drawDMATriangles(u32 _numVtx)
|
||||||
|
@ -875,6 +877,7 @@ void GraphicsDrawer::drawDMATriangles(u32 _numVtx)
|
||||||
} else {
|
} else {
|
||||||
gfxContext.drawTriangles(triParams);
|
gfxContext.drawTriangles(triParams);
|
||||||
}
|
}
|
||||||
|
dropRenderState();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphicsDrawer::_drawThickLine(u32 _v0, u32 _v1, float _width)
|
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] };
|
SPVertex vertexBuf[2] = { triangles.vertices[_v0], triangles.vertices[_v1] };
|
||||||
gfxContext.drawLine(lineWidth, vertexBuf);
|
gfxContext.drawLine(lineWidth, vertexBuf);
|
||||||
|
dropRenderState();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphicsDrawer::drawRect(int _ulx, int _uly, int _lrx, int _lry)
|
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);
|
gfxContext.drawRects(rectParams);
|
||||||
g_debugger.addRects(rectParams);
|
g_debugger.addRects(rectParams);
|
||||||
gSP.changed |= CHANGED_GEOMETRYMODE | CHANGED_VIEWPORT;
|
gSP.changed |= CHANGED_GEOMETRYMODE | CHANGED_VIEWPORT;
|
||||||
|
dropRenderState();
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
|
@ -1439,6 +1444,7 @@ void GraphicsDrawer::drawTexturedRect(const TexturedRectParams & _params)
|
||||||
}
|
}
|
||||||
|
|
||||||
gSP.changed |= CHANGED_GEOMETRYMODE | CHANGED_VIEWPORT;
|
gSP.changed |= CHANGED_GEOMETRYMODE | CHANGED_VIEWPORT;
|
||||||
|
dropRenderState();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphicsDrawer::correctTexturedRectParams(TexturedRectParams & _params)
|
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)
|
void GraphicsDrawer::copyTexturedRect(const CopyRectParams & _params)
|
||||||
{
|
{
|
||||||
m_drawingState = DrawingState::TexRect;
|
m_drawingState = DrawingState::Non;
|
||||||
|
|
||||||
const float scaleX = 1.0f / _params.dstWidth;
|
const float scaleX = 1.0f / _params.dstWidth;
|
||||||
const float scaleY = 1.0f / _params.dstHeight;
|
const float scaleY = 1.0f / _params.dstHeight;
|
||||||
|
|
|
@ -904,6 +904,7 @@ void gDPFullSync()
|
||||||
}
|
}
|
||||||
|
|
||||||
dwnd().getDrawer().flush();
|
dwnd().getDrawer().flush();
|
||||||
|
dwnd().getDrawer().dropRenderState();
|
||||||
|
|
||||||
frameBufferList().updateCurrentBufferEndAddress();
|
frameBufferList().updateCurrentBufferEndAddress();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user