From 60fa921daa9dc1fe1d947beeb8c837558730bd34 Mon Sep 17 00:00:00 2001 From: Jelle Raaijmakers Date: Fri, 24 Dec 2021 14:48:00 +0100 Subject: [PATCH] LibGL: Fix `GL_TRIANGLE_STRIP` rendering only half its triangles According to the documentation, we should switch around vertices every other triangle to prevent front-face culling from removing them. This allows Tux in Tux Racer to render correctly. --- Userland/Libraries/LibSoftGPU/Device.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Userland/Libraries/LibSoftGPU/Device.cpp b/Userland/Libraries/LibSoftGPU/Device.cpp index b77789f90b..45ec7fa84b 100644 --- a/Userland/Libraries/LibSoftGPU/Device.cpp +++ b/Userland/Libraries/LibSoftGPU/Device.cpp @@ -565,9 +565,15 @@ void Device::draw_primitives(PrimitiveType primitive_type, FloatMatrix4x4 const& } else if (primitive_type == PrimitiveType::TriangleStrip) { Triangle triangle; for (size_t i = 0; i < vertices.size() - 2; i++) { - triangle.vertices[0] = vertices.at(i); - triangle.vertices[1] = vertices.at(i + 1); - triangle.vertices[2] = vertices.at(i + 2); + if (i % 2 == 0) { + triangle.vertices[0] = vertices.at(i); + triangle.vertices[1] = vertices.at(i + 1); + triangle.vertices[2] = vertices.at(i + 2); + } else { + triangle.vertices[0] = vertices.at(i + 1); + triangle.vertices[1] = vertices.at(i); + triangle.vertices[2] = vertices.at(i + 2); + } m_triangle_list.append(triangle); } }