Fix up line loops.

This commit is contained in:
Glenn Maynard
2002-11-14 09:03:19 +00:00
parent 88264c3a56
commit 6b12eddc7f
+17 -4
View File
@@ -50,6 +50,8 @@ int g_iNumVerts;
int g_iFPS, g_iVPF, g_iDPF;
int g_glVersion;
int g_CurrentHeight, g_CurrentWidth;
int RageDisplay::GetFPS() const { return g_iFPS; }
int RageDisplay::GetVPF() const { return g_iVPF; }
int RageDisplay::GetDPF() const { return g_iDPF; }
@@ -220,6 +222,9 @@ bool RageDisplay::SetVideoMode( bool windowed, int width, int height, int bpp, i
Clear();
Flip();
g_CurrentWidth = width;
g_CurrentHeight = height;
return need_reload;
}
@@ -315,17 +320,25 @@ void RageDisplay::DrawLoop( const RageVertex v[], int iNumVerts, float LineWidth
glEnable(GL_POINT_SMOOTH);
glHint(GL_LINE_SMOOTH_HINT, GL_DONT_CARE);
glHint(GL_POINT_SMOOTH_HINT, GL_DONT_CARE);
glLineWidth(LineWidth);
/* Our line width is wrt the regular internal SCREEN_WIDTHxSCREEN_HEIGHT screen,
* but these width functions actually want raster sizes (that is, actual pixels).
* Scale the line width and point size by the average ratio of the scale. */
float WidthVal = float(g_CurrentWidth) / SCREEN_WIDTH;
float HeightVal = float(g_CurrentHeight) / SCREEN_HEIGHT;
float factor = (WidthVal + HeightVal) / 2;
glLineWidth(LineWidth * factor);
/* Draw the line loop: */
g_vertMode = GL_LINE_LOOP;
AddVerts( v, iNumVerts );
FlushQueue();
/* Round off the corners: */
glPointSize(LineWidth);
/* Round off the corners. This isn't perfect; the point is sometimes a little
* larger than the line, causing a small bump on the edge. Not sure how to fix
* that. */
glPointSize(LineWidth * factor);
g_vertMode = GL_POINTS;
AddVerts( v, iNumVerts-1 );
AddVerts( v, iNumVerts );
FlushQueue();
glDisable(GL_LINE_SMOOTH);