From 59a0a7495124dd30e1529120e6f99818b00b3403 Mon Sep 17 00:00:00 2001 From: vladislavbelov Date: Fri, 25 Feb 2022 23:45:54 +0000 Subject: [PATCH] Fixes a degenerate triangle on terrain sides of map corners. This was SVN commit r26487. --- source/renderer/PatchRData.cpp | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/source/renderer/PatchRData.cpp b/source/renderer/PatchRData.cpp index b4cd84c4ab..4caaff4b9f 100644 --- a/source/renderer/PatchRData.cpp +++ b/source/renderer/PatchRData.cpp @@ -582,17 +582,24 @@ void CPatchRData::BuildSide(std::vector& 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);