From 67b764d26888426d9c1457d7978706d6a2c516cd Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Thu, 10 Nov 2011 00:22:44 -0500 Subject: [PATCH] Fixed issues closing lines with the OpenGL ES renderer. --- src/render/direct3d/SDL_render_d3d.c | 3 ++- src/render/opengles/SDL_render_gles.c | 2 ++ src/render/opengles2/SDL_render_gles2.c | 6 ++++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/render/direct3d/SDL_render_d3d.c b/src/render/direct3d/SDL_render_d3d.c index 73fe39586..974796a15 100644 --- a/src/render/direct3d/SDL_render_d3d.c +++ b/src/render/direct3d/SDL_render_d3d.c @@ -889,7 +889,8 @@ D3D_RenderDrawLines(SDL_Renderer * renderer, const SDL_Point * points, /* DirectX 9 has the same line rasterization semantics as GDI, so we need to close the endpoint of the line */ - if (points[0].x != points[count-1].x || points[0].y != points[count-1].y) { + if (count == 2 || + points[0].x != points[count-1].x || points[0].y != points[count-1].y) { vertices[0].x = (float) points[count-1].x; vertices[0].y = (float) points[count-1].y; result = IDirect3DDevice9_DrawPrimitiveUP(data->device, D3DPT_POINTLIST, 1, vertices, sizeof(*vertices)); diff --git a/src/render/opengles/SDL_render_gles.c b/src/render/opengles/SDL_render_gles.c index 5f55772f1..57e434b51 100644 --- a/src/render/opengles/SDL_render_gles.c +++ b/src/render/opengles/SDL_render_gles.c @@ -625,6 +625,8 @@ GLES_RenderDrawLines(SDL_Renderer * renderer, const SDL_Point * points, glDrawArrays(GL_LINE_LOOP, 0, count); } else { glDrawArrays(GL_LINE_STRIP, 0, count); + /* We need to close the endpoint of the line */ + glDrawArrays(GL_POINTS, count-1, 1); } SDL_stack_free(vertices); diff --git a/src/render/opengles2/SDL_render_gles2.c b/src/render/opengles2/SDL_render_gles2.c index 0901b95a4..0122a298d 100644 --- a/src/render/opengles2/SDL_render_gles2.c +++ b/src/render/opengles2/SDL_render_gles2.c @@ -944,6 +944,12 @@ GLES2_RenderDrawLines(SDL_Renderer *renderer, const SDL_Point *points, int count glGetError(); glVertexAttribPointer(GLES2_ATTRIBUTE_POSITION, 2, GL_FLOAT, GL_FALSE, 0, vertices); glDrawArrays(GL_LINE_STRIP, 0, count); + + /* We need to close the endpoint of the line */ + if (count == 2 || + points[0].x != points[count-1].x || points[0].y != points[count-1].y) { + glDrawArrays(GL_POINTS, count-1, 1); + } SDL_stack_free(vertices); if (glGetError() != GL_NO_ERROR) {