1 #define _GNU_SOURCE /* For RTLD_NEXT */
13 /* How many frames between reports. */
14 #define REPORT_FREQ 60
20 static struct timeval tv_last;
21 struct timeval tv_now;
23 if ((count % REPORT_FREQ) == 0) {
24 gettimeofday (&tv_now, NULL);
26 printf ("glfps: Initializing FPS timer\n");
28 double elapsed = ((tv_now.tv_sec - tv_last.tv_sec) +
29 (tv_now.tv_usec - tv_last.tv_usec) / 1e6);
30 printf ("FPS: %.3f\n", ((double) REPORT_FREQ) / elapsed);
39 glXSwapBuffers (Display *dpy, GLXDrawable drawable)
41 static typeof(&glXSwapBuffers) real_glXSwapBuffers = NULL;
43 if (real_glXSwapBuffers == NULL)
44 real_glXSwapBuffers = dlsym (RTLD_NEXT, "glXSwapBuffers");
48 real_glXSwapBuffers (dpy, drawable);
52 (*glXGetProcAddressARB (const GLubyte *func))(void)
54 static typeof(&glXGetProcAddressARB) real_glXGetProcAddressARB = NULL;
56 if (strcmp((char *) func, "glXSwapBuffers") == 0)
57 return (void*) glXSwapBuffers;
59 if (real_glXGetProcAddressARB == NULL)
60 real_glXGetProcAddressARB = dlsym (RTLD_NEXT, "glXGetProcAddressARB");
62 return real_glXGetProcAddressARB (func);
66 (*glXGetProcAddress (const GLubyte *func))(void)
68 static typeof(&glXGetProcAddress) real_glXGetProcAddress = NULL;
70 if (strcmp((char *) func, "glXSwapBuffers") == 0)
71 return (void*) glXSwapBuffers;
73 if (real_glXGetProcAddress == NULL)
74 real_glXGetProcAddress = dlsym (RTLD_NEXT, "glXGetProcAddress");
76 return real_glXGetProcAddress (func);