Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Commit

Permalink
Of COURSE that trick wouldn't work on all renderers. Fall back to som…
Browse files Browse the repository at this point in the history
…ething for now, hopefully figure out a better way to do this later.

If we have to, we can use vertical line and horizontal line textures for vertical and horizontal lines, and then create custom textures for diagonal lines and software render those.  It's terrible, but at least it would be pixel perfect.
  • Loading branch information
slouken committed Nov 21, 2009
1 parent 5fa4450 commit 072f612
Showing 1 changed file with 20 additions and 10 deletions.
30 changes: 20 additions & 10 deletions src/video/SDL_renderer_gl.c
Expand Up @@ -1150,20 +1150,30 @@ 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);
/* Ensure coverage of the second point */
data->glEnd();

/* The line is half open, so we need one more point to complete the line.
* http://www.opengl.org/documentation/specs/version1.1/glspec1.1/node47.html
*/
data->glBegin(GL_POINTS);
#ifdef __APPLE__
/* Mac OS X seems to always leave the second point open */
data->glVertex2f(0.5f + x2, 0.5f + y2);
data->glVertex2f(0.9f + x2, 0.9f + y2);
#else
/* Linux seems to use the right-most or bottom-most point open */
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);
}
#endif
data->glEnd();

return 0;
Expand Down

0 comments on commit 072f612

Please sign in to comment.