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.
/** In theory both start and end will be included in coloring.
BUG: Currently hardware drivers (d3d/opengl) ignore the last pixel
(they use the so called "diamond exit rule" for drawing lines).
BUG: Currently d3d ignores the last pixel
(it uses the so called "diamond exit rule" for drawing lines).
\param start Screen coordinates of the start of the line
in pixels.
\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,
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)
drawPixel(start.X, start.Y, color);
else
@ -1923,6 +1921,9 @@ void COpenGLDriver::draw2DLine(const core::position2d<s32>& start,
}
glDrawElements(GL_LINES, 2, GL_UNSIGNED_SHORT, Quad2DIndices);
// Draw non-drawn last pixel (search for "diamond exit rule")
glDrawArrays(GL_POINTS, 1, 1);
}
}