From a08d61ad46cb91f2b52b560d2af6049488104827 Mon Sep 17 00:00:00 2001
From: Samuliak <samuliak77@gmail.com>
Date: Wed, 3 Jul 2024 15:16:03 +0200
Subject: [PATCH] use proper primitive types

---
 include/renderer_mtl/pica_to_mtl.hpp   | 13 +++++++++++++
 src/core/renderer_mtl/renderer_mtl.cpp |  2 +-
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/include/renderer_mtl/pica_to_mtl.hpp b/include/renderer_mtl/pica_to_mtl.hpp
index bbd48fd5..f4437da2 100644
--- a/include/renderer_mtl/pica_to_mtl.hpp
+++ b/include/renderer_mtl/pica_to_mtl.hpp
@@ -97,4 +97,17 @@ inline MTL::StencilOperation toMTLStencilOperation(u8 op) {
     return MTL::StencilOperationKeep;
 }
 
+inline MTL::PrimitiveType toMTLPrimitiveType(PrimType primType) {
+    switch (primType) {
+    case PrimType::TriangleList: return MTL::PrimitiveTypeTriangle;
+    case PrimType::TriangleStrip: return MTL::PrimitiveTypeTriangleStrip;
+    case PrimType::TriangleFan:
+        Helpers::warn("Triangle fans are not supported on Metal, using triangles instead");
+        return MTL::PrimitiveTypeTriangle;
+    case PrimType::GeometryPrimitive:
+        Helpers::warn("Geometry primitives are not yet, using triangles instead");
+        return MTL::PrimitiveTypeTriangle;
+    }
+}
+
 } // namespace PICA
diff --git a/src/core/renderer_mtl/renderer_mtl.cpp b/src/core/renderer_mtl/renderer_mtl.cpp
index ea466663..9d20224a 100644
--- a/src/core/renderer_mtl/renderer_mtl.cpp
+++ b/src/core/renderer_mtl/renderer_mtl.cpp
@@ -405,7 +405,7 @@ void RendererMTL::drawVertices(PICA::PrimType primType, std::span<const PICA::Ve
 	renderCommandEncoder->setFragmentBytes(&regs[0x48], 0x200 - 0x48, 0);
 
 	// TODO: respect primitive type
-	renderCommandEncoder->drawPrimitives(MTL::PrimitiveTypeTriangle, NS::UInteger(0), NS::UInteger(vertices.size()));
+	renderCommandEncoder->drawPrimitives(toMTLPrimitiveType(primType), NS::UInteger(0), NS::UInteger(vertices.size()));
 }
 
 void RendererMTL::screenshot(const std::string& name) {