From 47ea32781a063120f58ccdc5ea549fbb8aa36ec4 Mon Sep 17 00:00:00 2001 From: Alex Szpakowski Date: Tue, 22 Dec 2020 23:06:06 -0400 Subject: [PATCH] metal: handle triangle strip draws --- src/modules/graphics/metal/Graphics.mm | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/modules/graphics/metal/Graphics.mm b/src/modules/graphics/metal/Graphics.mm index a2211fc31..0c379a911 100644 --- a/src/modules/graphics/metal/Graphics.mm +++ b/src/modules/graphics/metal/Graphics.mm @@ -112,6 +112,19 @@ static MTLStencilOperation getMTLStencilOperation(StencilAction action) return MTLStencilOperationKeep; } +static MTLPrimitiveType getMTLPrimitiveType(PrimitiveType prim) +{ + switch (prim) + { + case PRIMITIVE_TRIANGLES: return MTLPrimitiveTypeTriangle; + case PRIMITIVE_TRIANGLE_STRIP: return MTLPrimitiveTypeTriangleStrip; + case PRIMITIVE_TRIANGLE_FAN: return MTLPrimitiveTypeTriangle; // This needs to be emulated. + case PRIMITIVE_POINTS: return MTLPrimitiveTypePoint; + case PRIMITIVE_MAX_ENUM: return MTLPrimitiveTypeTriangle; + } + return MTLPrimitiveTypeTriangle; +} + static inline id getMTLTexture(love::graphics::Texture *tex) { return tex ? (__bridge id)(void *) tex->getHandle() : nil; @@ -765,7 +778,7 @@ void Graphics::draw(const DrawCommand &cmd) setVertexBuffers(encoder, cmd.buffers); - [encoder drawPrimitives:MTLPrimitiveTypeTriangle + [encoder drawPrimitives:getMTLPrimitiveType(cmd.primitiveType) vertexStart:cmd.vertexStart vertexCount:cmd.vertexCount instanceCount:cmd.instanceCount]; @@ -793,7 +806,7 @@ void Graphics::draw(const DrawIndexedCommand &cmd) auto indexType = cmd.indexType == INDEX_UINT32 ? MTLIndexTypeUInt32 : MTLIndexTypeUInt16; - [encoder drawIndexedPrimitives:MTLPrimitiveTypeTriangle + [encoder drawIndexedPrimitives:getMTLPrimitiveType(cmd.primitiveType) indexCount:cmd.indexCount indexType:indexType indexBuffer:getMTLBuffer(cmd.indexBuffer)