diff --git a/src/modules/graphics/opengl/Graphics.cpp b/src/modules/graphics/opengl/Graphics.cpp index fd6c3d45c..ff64f56b2 100644 --- a/src/modules/graphics/opengl/Graphics.cpp +++ b/src/modules/graphics/opengl/Graphics.cpp @@ -807,7 +807,7 @@ namespace opengl // precondition: // glEnableClientState(GL_VERTEX_ARRAY); - static void draw_overdraw(Vector* overdraw, size_t count, bool looping) + static void draw_overdraw(Vector* overdraw, size_t count, float pixel_size, bool looping) { // if not looping, the outer overdraw vertices need to be displaced // to cover the line endings, i.e.: @@ -820,11 +820,13 @@ namespace opengl { Vector s = overdraw[1] - overdraw[3]; s.normalize(); + s *= pixel_size; overdraw[1] += s; overdraw[2*count-1] += s; Vector t = overdraw[count-1] - overdraw[count-3]; t.normalize(); + t *= pixel_size; overdraw[count-1] += t; overdraw[count+1] += t; @@ -872,6 +874,7 @@ namespace opengl bool looping = (coords[0] == coords[count-2]) && (coords[1] == coords[count-1]); float halfwidth = lineWidth/2.f; + float pixel_size = 1.f; float overdraw_factor = .0f; if (lineStyle == LINE_SMOOTH) { @@ -879,9 +882,9 @@ namespace opengl // TODO: is there a better way to get the pixel size at the current scale? GLfloat m[16]; glGetFloatv(GL_MODELVIEW_MATRIX, m); - float det = m[0]*m[5]*m[10] + m[4]*m[9]*m[2] + m[8]*m[1]*m[6]; - det -= m[2]*m[5]*m[8] + m[6]*m[9]*m[0] + m[10]*m[1]*m[4]; - float pixel_size = 1. / sqrt(det); + float det = m[0]*m[5]*m[10] + m[4]*m[9]*m[2] + m[8]*m[1]*m[6]; + det -= m[2]*m[5]*m[8] + m[6]*m[9]*m[0] + m[10]*m[1]*m[4]; + pixel_size = 1.f / sqrt(det); overdraw_factor = pixel_size / halfwidth; halfwidth = std::max(.0f, halfwidth - .25f*pixel_size); @@ -919,7 +922,7 @@ namespace opengl // draw the line halo (antialiasing) if (lineStyle == LINE_SMOOTH) - draw_overdraw(overdraw, count, looping); + draw_overdraw(overdraw, count, pixel_size, looping); glDisableClientState(GL_VERTEX_ARRAY); glEnable(GL_TEXTURE_2D);