1
0
forked from 0ad/0ad

Fixes a degenerate triangle on terrain sides of map corners.

This was SVN commit r26487.
This commit is contained in:
Vladislav Belov 2022-02-25 23:45:54 +00:00
parent d5d1754991
commit 59a0a74951

View File

@ -582,17 +582,24 @@ void CPatchRData::BuildSide(std::vector<SSideVertex>& vertices, CPatchSideFlags
v1.m_Position = pos;
v1.m_Position.Y = 0;
// If this is the start of this tristrip, but we've already got a partial
// tristrip, add a couple of degenerate triangles to join the strips properly
if (k == 0 && !vertices.empty())
if (k == 0)
{
vertices.push_back(vertices.back());
vertices.push_back(v1);
vertices.emplace_back(v1);
vertices.emplace_back(v0);
}
if (k > 0)
{
const size_t lastIndex = vertices.size() - 1;
vertices.emplace_back(v1);
vertices.emplace_back(vertices[lastIndex]);
vertices.emplace_back(v0);
vertices.emplace_back(v1);
if (k + 1 < vsize)
{
vertices.emplace_back(v1);
vertices.emplace_back(v0);
}
}
// Now add the new triangles
vertices.push_back(v1);
vertices.push_back(v0);
}
}
@ -1180,11 +1187,11 @@ void CPatchRData::RenderSides(
shader->AssertPointersBound();
glDrawArrays(GL_TRIANGLE_STRIP, patch->m_VBSides->m_Index, (GLsizei)patch->m_VBSides->m_Count);
glDrawArrays(GL_TRIANGLES, patch->m_VBSides->m_Index, (GLsizei)patch->m_VBSides->m_Count);
// bump stats
g_Renderer.m_Stats.m_DrawCalls++;
g_Renderer.m_Stats.m_TerrainTris += patch->m_VBSides->m_Count - 2;
g_Renderer.m_Stats.m_TerrainTris += patch->m_VBSides->m_Count / 3;
}
CVertexBuffer::Unbind(deviceCommandContext);