diff --git a/src/video/SDL_renderer_gl.c b/src/video/SDL_renderer_gl.c index cfd970f9cdf73f338fdd5cee7cac1a94919f0a86..84ddf7bf17205bb12ff0cc678dff68523bf47d70 100644 --- a/src/video/SDL_renderer_gl.c +++ b/src/video/SDL_renderer_gl.c @@ -1150,22 +1150,20 @@ GL_RenderLine(SDL_Renderer * renderer, int x1, int y1, int x2, int y2) (GLfloat) renderer->b * inv255f, (GLfloat) renderer->a * inv255f); + /* The line is half open, so we need tiny segments at the endpoints + * so that we guarantee coverage of the beginning and final pixels. + * http://www.opengl.org/documentation/specs/version1.1/glspec1.1/node47.html + */ data->glBegin(GL_LINES); + /* Ensure coverage of the first point */ + data->glVertex2f(0.1f + x1, 0.1f + y1); + data->glVertex2f(0.5f + x1, 0.5f + y1); + /* Draw the requested line */ data->glVertex2f(0.5f + x1, 0.5f + y1); data->glVertex2f(0.5f + x2, 0.5f + y2); - data->glEnd(); - - /* For some reason the rightmost or lowest endpoint is skipped */ - data->glBegin(GL_POINTS); - if (x1 > x2) { - data->glVertex2f(0.5f + x1, 0.5f + y1); - } else if (x2 > x1) { - data->glVertex2f(0.5f + x2, 0.5f + y2); - } else if (y1 > y2) { - data->glVertex2f(0.5f + x1, 0.5f + y1); - } else if (y2 > y1) { - data->glVertex2f(0.5f + x2, 0.5f + y2); - } + /* Ensure coverage of the second point */ + data->glVertex2f(0.5f + x2, 0.5f + y2); + data->glVertex2f(0.9f + x2, 0.9f + y2); data->glEnd(); return 0;