From b88b6b3c23804e5c01326574ba695efe3aa97f4c Mon Sep 17 00:00:00 2001 From: Sylvain Date: Fri, 7 Jan 2022 22:43:12 +0100 Subject: [PATCH] Remove QueueDrawLines from METAL --- src/render/metal/SDL_render_metal.m | 59 +++-------------------------- 1 file changed, 5 insertions(+), 54 deletions(-) diff --git a/src/render/metal/SDL_render_metal.m b/src/render/metal/SDL_render_metal.m index e093fd4d8..742bd3134 100644 --- a/src/render/metal/SDL_render_metal.m +++ b/src/render/metal/SDL_render_metal.m @@ -1107,56 +1107,6 @@ METAL_QueueDrawPoints(SDL_Renderer * renderer, SDL_RenderCommand *cmd, const SDL return 0; } -static int -METAL_QueueDrawLines(SDL_Renderer * renderer, SDL_RenderCommand *cmd, const SDL_FPoint * points, int count) -{ - const SDL_Color color = { - cmd->data.draw.r, - cmd->data.draw.g, - cmd->data.draw.b, - cmd->data.draw.a - }; - - SDL_assert(count >= 2); /* should have been checked at the higher level. */ - - const size_t vertlen = (2 * sizeof (float) + sizeof (SDL_Color)) * count; - float *verts = (float *) SDL_AllocateRenderVertices(renderer, vertlen, DEVICE_ALIGN(8), &cmd->data.draw.first); - if (!verts) { - return -1; - } - cmd->data.draw.count = count; - - for (int i = 0; i < count; i++, points++) { - *(verts++) = points->x; - *(verts++) = points->y; - *((SDL_Color *)verts++) = color; - } - - /* If the line segment is completely horizontal or vertical, - make it one pixel longer, to satisfy the diamond-exit rule. - We should probably do this for diagonal lines too, but we'd have to - do some trigonometry to figure out the correct pixel and generally - when we have problems with pixel perfection, it's for straight lines - that are missing a pixel that frames something and not arbitrary - angles. Maybe !!! FIXME for later, though. */ - - points -= 2; /* update the last line. */ - verts -= 2 + 1; - - const float xstart = points[0].x; - const float ystart = points[0].y; - const float xend = points[1].x; - const float yend = points[1].y; - - if (ystart == yend) { /* horizontal line */ - verts[0] += (xend > xstart) ? 1.0f : -1.0f; - } else if (xstart == xend) { /* vertical line */ - verts[1] += (yend > ystart) ? 1.0f : -1.0f; - } - - return 0; -} - static int METAL_QueueGeometry(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *texture, const float *xy, int xy_stride, const SDL_Color *color, int color_stride, const float *uv, int uv_stride, @@ -1422,15 +1372,17 @@ METAL_RunCommandQueue(SDL_Renderer * renderer, SDL_RenderCommand *cmd, void *ver break; } - case SDL_RENDERCMD_DRAW_POINTS: - case SDL_RENDERCMD_DRAW_LINES: { + case SDL_RENDERCMD_DRAW_POINTS: { const size_t count = cmd->data.draw.count; - const MTLPrimitiveType primtype = (cmd->command == SDL_RENDERCMD_DRAW_POINTS) ? MTLPrimitiveTypePoint : MTLPrimitiveTypeLineStrip; + const MTLPrimitiveType primtype = MTLPrimitiveTypePoint; if (SetDrawState(renderer, cmd, SDL_METAL_FRAGMENT_SOLID, CONSTANTS_OFFSET_HALF_PIXEL_TRANSFORM, mtlbufvertex, &statecache)) { [data.mtlcmdencoder drawPrimitives:primtype vertexStart:0 vertexCount:count]; } break; } + + case SDL_RENDERCMD_DRAW_LINES: /* unused */ + break; case SDL_RENDERCMD_FILL_RECTS: /* unused */ break; @@ -1886,7 +1838,6 @@ METAL_CreateRenderer(SDL_Window * window, Uint32 flags) renderer->QueueSetViewport = METAL_QueueSetViewport; renderer->QueueSetDrawColor = METAL_QueueSetDrawColor; renderer->QueueDrawPoints = METAL_QueueDrawPoints; - renderer->QueueDrawLines = METAL_QueueDrawLines; renderer->QueueGeometry = METAL_QueueGeometry; renderer->RunCommandQueue = METAL_RunCommandQueue; renderer->RenderReadPixels = METAL_RenderReadPixels;