mirror of
https://github.com/blawar/GLideN64.git
synced 2024-07-04 10:03:36 +00:00
Rewrite polygons drawing in N64 depth compare mode.
Fixed #1418: Various regressions since PR2.0 with N64 depth compare enabled
This commit is contained in:
parent
07a84a9973
commit
6b4ae04f5e
|
@ -189,9 +189,6 @@ void BufferedDrawer::_updateTrianglesBuffers(const graphics::Context::DrawTriang
|
|||
|
||||
void BufferedDrawer::drawTriangles(const graphics::Context::DrawTriangleParameters & _params)
|
||||
{
|
||||
if (config.frameBufferEmulation.N64DepthCompare != 0)
|
||||
glMemoryBarrier(GL_SHADER_IMAGE_ACCESS_BARRIER_BIT);
|
||||
|
||||
_updateTrianglesBuffers(_params);
|
||||
|
||||
if (config.generalEmulation.enableHWLighting != 0)
|
||||
|
@ -202,8 +199,20 @@ void BufferedDrawer::drawTriangles(const graphics::Context::DrawTriangleParamete
|
|||
return;
|
||||
}
|
||||
|
||||
glDrawElementsBaseVertex(GLenum(_params.mode), _params.elementsCount, GL_UNSIGNED_BYTE,
|
||||
(char*)nullptr + m_trisBuffers.ebo.pos - _params.elementsCount, m_trisBuffers.vbo.pos - _params.verticesCount);
|
||||
if (config.frameBufferEmulation.N64DepthCompare == 0) {
|
||||
glDrawElementsBaseVertex(GLenum(_params.mode), _params.elementsCount, GL_UNSIGNED_BYTE,
|
||||
(char*)nullptr + m_trisBuffers.ebo.pos - _params.elementsCount, m_trisBuffers.vbo.pos - _params.verticesCount);
|
||||
return;
|
||||
}
|
||||
|
||||
// Draw polygons one by one
|
||||
const GLint eboStartPos = m_trisBuffers.ebo.pos - _params.elementsCount;
|
||||
const GLint vboStartPos = m_trisBuffers.vbo.pos - _params.verticesCount;
|
||||
for (GLint i = 0; i < _params.elementsCount; i += 3) {
|
||||
glMemoryBarrier(GL_SHADER_IMAGE_ACCESS_BARRIER_BIT);
|
||||
glDrawElementsBaseVertex(GLenum(_params.mode), 3, GL_UNSIGNED_BYTE,
|
||||
(char*)nullptr + eboStartPos + i, vboStartPos);
|
||||
}
|
||||
}
|
||||
|
||||
void BufferedDrawer::drawLine(f32 _width, SPVertex * _vertices)
|
||||
|
|
|
@ -38,9 +38,6 @@ bool UnbufferedDrawer::_updateAttribPointer(u32 _index, const void * _ptr)
|
|||
|
||||
void UnbufferedDrawer::drawTriangles(const graphics::Context::DrawTriangleParameters & _params)
|
||||
{
|
||||
if (config.frameBufferEmulation.N64DepthCompare != 0)
|
||||
glMemoryBarrier(GL_SHADER_IMAGE_ACCESS_BARRIER_BIT);
|
||||
|
||||
{
|
||||
m_cachedAttribArray->enableVertexAttribArray(triangleAttrib::position, true);
|
||||
const void * ptr = &_params.vertices->x;
|
||||
|
@ -84,7 +81,16 @@ void UnbufferedDrawer::drawTriangles(const graphics::Context::DrawTriangleParame
|
|||
return;
|
||||
}
|
||||
|
||||
glDrawElements(GLenum(_params.mode), _params.elementsCount, GL_UNSIGNED_BYTE, _params.elements);
|
||||
if (config.frameBufferEmulation.N64DepthCompare == 0) {
|
||||
glDrawElements(GLenum(_params.mode), _params.elementsCount, GL_UNSIGNED_BYTE, _params.elements);
|
||||
return;
|
||||
}
|
||||
|
||||
// Draw polygons one by one
|
||||
for (GLint i = 0; i < _params.elementsCount; i += 3) {
|
||||
glMemoryBarrier(GL_SHADER_IMAGE_ACCESS_BARRIER_BIT);
|
||||
glDrawElements(GLenum(_params.mode), 3, GL_UNSIGNED_BYTE, (u8*)_params.elements + i);
|
||||
}
|
||||
}
|
||||
|
||||
void UnbufferedDrawer::drawRects(const graphics::Context::DrawRectParameters & _params)
|
||||
|
|
|
@ -60,8 +60,6 @@ void gSPTriangle(s32 v0, s32 v1, s32 v2)
|
|||
if (drawer.isClipped(v0, v1, v2))
|
||||
return;
|
||||
drawer.addTriangle(v0, v1, v2);
|
||||
if (config.frameBufferEmulation.N64DepthCompare != 0)
|
||||
drawer.drawTriangles();
|
||||
}
|
||||
|
||||
frameBufferList().setBufferChanged();
|
||||
|
|
Loading…
Reference in New Issue
Block a user