static int fps_ascent, fps_descent;
static GLuint font_dlist;
static Bool fps_clear_p = False;
+static char fps_string[1024];
static void
fps_init (ModeInfo *mi)
here, which would kind of defeat the purpose of centralizing this
code in one file.
*/
- glPushAttrib(GL_TRANSFORM_BIT | /* for matrix contents */
- GL_ENABLE_BIT | /* for various glDisable calls */
- GL_CURRENT_BIT | /* for glColor3f() */
- GL_LIST_BIT); /* for glListBase() */
+ glPushAttrib (GL_TRANSFORM_BIT | /* for matrix contents */
+ GL_ENABLE_BIT | /* for various glDisable calls */
+ GL_CURRENT_BIT | /* for glColor3f() */
+ GL_LIST_BIT); /* for glListBase() */
{
# ifdef DEBUG
check_gl_error ("glPushAttrib");
# endif
/* disable lighting and texturing when drawing bitmaps!
- (glPopAttrib() restores these, I believe.)
+ (glPopAttrib() restores these.)
*/
- glDisable(GL_TEXTURE_2D);
- glDisable(GL_LIGHTING);
- glDisable(GL_BLEND);
- glDisable(GL_DEPTH_TEST);
+ glDisable (GL_TEXTURE_2D);
+ glDisable (GL_LIGHTING);
+ glDisable (GL_BLEND);
+ glDisable (GL_DEPTH_TEST);
+ glDisable (GL_CULL_FACE);
/* glPopAttrib() does not restore matrix changes, so we must
push/pop the matrix stacks to be non-intrusive there.
}
-void
-do_fps (ModeInfo *mi)
+GLfloat
+fps_1 (ModeInfo *mi)
{
static Bool initted_p = False;
- static int last_ifps = 0;
+ static int last_ifps = -1;
+ static GLfloat last_fps = -1;
static int frame_count = 0;
- static struct timeval prev = { 0, };
- static struct timeval now = { 0, };
- static char msg [1024] = { 0, };
+ static struct timeval prev = { 0, 0 };
+ static struct timeval now = { 0, 0 };
if (!initted_p)
{
initted_p = True;
fps_init (mi);
- strcpy (msg, "FPS: (accumulating...)");
+ strcpy (fps_string, "FPS: (accumulating...)");
}
/* Every N frames (where N is approximately one second's worth of frames)
prev = now;
frame_count = 0;
last_ifps = fps;
+ last_fps = fps;
- sprintf (msg, "FPS: %.02f", fps);
+ sprintf (fps_string, "FPS: %.02f", fps);
if (mi->pause != 0)
{
buf[strlen(buf)-1] = 0;
if (buf[strlen(buf)-1] == '.')
buf[strlen(buf)-1] = 0;
- sprintf(msg + strlen(msg), " (including %s sec/frame delay)",
+ sprintf(fps_string + strlen(fps_string),
+ " (including %s sec/frame delay)",
buf);
}
else if (p >= 2048) p >>= 10, s = "K";
# endif
- strcat (msg, "\nPolys: ");
+ strcat (fps_string, "\nPolys: ");
if (p >= 1000000)
- sprintf (msg + strlen(msg), "%lu,%03lu,%03lu%s",
+ sprintf (fps_string + strlen(fps_string), "%lu,%03lu,%03lu%s",
(p / 1000000), ((p / 1000) % 1000), (p % 1000), s);
else if (p >= 1000)
- sprintf (msg + strlen(msg), "%lu,%03lu%s",
+ sprintf (fps_string + strlen(fps_string), "%lu,%03lu%s",
(p / 1000), (p % 1000), s);
else
- sprintf (msg + strlen(msg), "%lu%s", p, s);
+ sprintf (fps_string + strlen(fps_string), "%lu%s", p, s);
}
}
- /* Print the string every frame (or else nothing will show up.)
- */
- fps_print_string (mi, fps_text_x, fps_text_y, msg);
+ return last_fps;
+}
+
+void
+fps_2 (ModeInfo *mi)
+{
+ fps_print_string (mi, fps_text_x, fps_text_y, fps_string);
+}
+
+
+void
+do_fps (ModeInfo *mi)
+{
+ fps_1 (mi); /* Lazily compute current FPS value, about once a second. */
+ fps_2 (mi); /* Print the string every frame (else nothing shows up.) */
}