Skip to content
This repository has been archived by the owner on May 13, 2024. It is now read-only.

Commit

Permalink
Fix pixel-perfect draw2DLine on OpenGL
Browse files Browse the repository at this point in the history
  • Loading branch information
sfan5 committed Mar 12, 2021
1 parent 4931b34 commit 0335a52
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 4 deletions.
4 changes: 2 additions & 2 deletions include/IVideoDriver.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
5 changes: 3 additions & 2 deletions source/Irrlicht/COpenGLDriver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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);
}
}

Expand Down

0 comments on commit 0335a52

Please sign in to comment.