+void Sbar_ShowFPS(void)
+{
+ if (showfps.integer)
+ {
+ static double currtime, frametimes[32];
+ double newtime, total;
+ char temp[32];
+ int calc, count, i;
+ static int framecycle = 0;
+ float fps_x, fps_y, fps_scalex, fps_scaley;
+
+ newtime = Sys_DoubleTime();
+ frametimes[framecycle] = newtime - currtime;
+ total = 0;
+ count = 0;
+ while(total < 0.2 && count < 32 && frametimes[i = (framecycle - count) & 31])
+ {
+ total += frametimes[i];
+ count++;
+ }
+ framecycle++;
+ framecycle &= 31;
+ if (showfps.integer == 1)
+ calc = (int) (((double) count / total) + 0.5);
+ else // showfps 2, rapid update
+ calc = (int) ((1.0 / (newtime - currtime)) + 0.5);
+ sprintf(temp, "%4i", calc);
+ currtime = newtime;
+ fps_scalex = 12;
+ fps_scaley = 12;
+ fps_x = vid.conwidth - (fps_scalex * strlen(temp));
+ fps_y = vid.conheight - sb_lines/* - 8*/; // yes this might draw over the sbar
+ if (fps_y > vid.conheight - fps_scaley)
+ fps_y = vid.conheight - fps_scaley;
+ DrawQ_Fill(fps_x, fps_y, fps_scalex * strlen(temp), fps_scaley, 0, 0, 0, 0.5, 0);
+ DrawQ_String(fps_x, fps_y, temp, 0, fps_scalex, fps_scaley, 1, 1, 1, 1, 0);
+ }
+}
+