-/* fps, Copyright (c) 2001-2009 Jamie Zawinski <jwz@jwz.org>
+/* fps, Copyright (c) 2001-2014 Jamie Zawinski <jwz@jwz.org>
* Draw a frames-per-second display (Xlib and OpenGL).
*
* Permission to use, copy, modify, distribute, and sell this software and its
#ifdef HAVE_COCOA
# include "jwxyz.h"
-# include <OpenGL/gl.h>
-# include <OpenGL/glu.h>
-# include <AGL/agl.h>
-#else /* !HAVE_COCOA -- real Xlib */
+#elif defined(HAVE_ANDROID)
+# include <GLES/gl.h>
+#else /* real Xlib */
# include <GL/glx.h>
# include <GL/glu.h>
#endif /* !HAVE_COCOA */
+#ifdef HAVE_JWZGLES
+# include "jwzgles.h"
+#endif /* HAVE_JWZGLES */
+
#include "xlockmoreI.h"
#include "fpsI.h"
-#include "glxfonts.h"
+#include "texfont.h"
/* These are in xlock-gl.c */
extern void clear_gl_error (void);
extern void check_gl_error (const char *type);
+typedef struct {
+ texture_font_data *texfont;
+ int line_height;
+ Bool top_p;
+} gl_fps_data;
+
static void
xlockmore_gl_fps_init (fps_state *st)
{
- XFontStruct *f = st->font;
- int first = f->min_char_or_byte2;
- int last = f->max_char_or_byte2;
-
- clear_gl_error ();
- st->font_dlist = glGenLists ((GLuint) last+1);
- check_gl_error ("glGenLists");
-
- xscreensaver_glXUseXFont (st->dpy, f->fid,
- first, last-first+1, st->font_dlist + first);
- check_gl_error ("xscreensaver_glXUseXFont");
+ gl_fps_data *data = (gl_fps_data *) calloc (1, sizeof(*data));
+ data->top_p = get_boolean_resource (st->dpy, "fpsTop", "FPSTop");
+ data->texfont = load_texture_font (st->dpy, "fpsFont");
+ texture_string_width (data->texfont, "M", &data->line_height);
+ st->gl_fps_data = data;
}
-
/* Callback in xscreensaver_function_table, via xlockmore.c.
*/
void
xlockmore_gl_fps_init (fpst);
}
- fps_compute (fpst, mi->polygon_count);
+ fps_compute (fpst, mi->polygon_count, mi->recursion_depth);
}
fps_state *st = mi->fpst;
if (st) /* might be too early */
{
+ gl_fps_data *data = (gl_fps_data *) st->gl_fps_data;
XWindowAttributes xgwa;
int lines = 1;
const char *s;
- int lh = st->font->ascent + st->font->descent;
int y = st->y;
XGetWindowAttributes (st->dpy, st->window, &xgwa);
if (*s == '\n') lines++;
if (y < 0)
- y = xgwa.height + y - lines*lh;
- y += lines*lh + st->font->descent;
+ y = xgwa.height + y - (lines * data->line_height);
+ y += lines * data->line_height;
glColor3f (1, 1, 1);
- print_gl_string (st->dpy, st->font, st->font_dlist,
- xgwa.width, xgwa.height,
- st->x, y, st->string, st->clear_p);
+ print_texture_label (st->dpy, data->texfont,
+ xgwa.width, xgwa.height,
+ (data->top_p ? 1 : 2),
+ st->string);
}
}