Fix pixel-perfect draw2DLine on OpenGL

This commit is contained in:
sfan5 2021-03-11 23:48:05 +01:00
parent 4931b34625
commit 0335a52479
2 changed files with 5 additions and 4 deletions

View File

@ -923,8 +923,8 @@ namespace video
//! Draws a 2d line. //! Draws a 2d line.
/** In theory both start and end will be included in coloring. /** In theory both start and end will be included in coloring.
BUG: Currently hardware drivers (d3d/opengl) ignore the last pixel BUG: Currently d3d ignores the last pixel
(they use the so called "diamond exit rule" for drawing lines). (it uses the so called "diamond exit rule" for drawing lines).
\param start Screen coordinates of the start of the line \param start Screen coordinates of the start of the line
in pixels. in pixels.
\param end Screen coordinates of the start of the line in \param end Screen coordinates of the start of the line in

View File

@ -1887,8 +1887,6 @@ void COpenGLDriver::draw2DRectangle(const core::rect<s32>& position,
void COpenGLDriver::draw2DLine(const core::position2d<s32>& start, void COpenGLDriver::draw2DLine(const core::position2d<s32>& start,
const core::position2d<s32>& end, SColor color) const core::position2d<s32>& end, SColor color)
{ {
// TODO: It's not pixel-exact. Reason is the way OpenGL handles line-drawing (search the web for "diamond exit rule").
if (start==end) if (start==end)
drawPixel(start.X, start.Y, color); drawPixel(start.X, start.Y, color);
else else
@ -1923,6 +1921,9 @@ void COpenGLDriver::draw2DLine(const core::position2d<s32>& start,
} }
glDrawElements(GL_LINES, 2, GL_UNSIGNED_SHORT, Quad2DIndices); glDrawElements(GL_LINES, 2, GL_UNSIGNED_SHORT, Quad2DIndices);
// Draw non-drawn last pixel (search for "diamond exit rule")
glDrawArrays(GL_POINTS, 1, 1);
} }
} }