]> git.cworth.org Git - fips/blobdiff - metrics.c
Push final collection of CFLAGS/LDFLAGS from Makefile.config to Makefile.local
[fips] / metrics.c
index f4c0a2150f05b2092031a17907da231631b09bd4..84fc23f6b20b02a2a15ece51ee9b63447d4e5466 100644 (file)
--- a/metrics.c
+++ b/metrics.c
@@ -24,8 +24,7 @@
 
 #include <sys/time.h>
 
-#define GL_GLEXT_PROTOTYPES
-#include <GL/gl.h>
+#include "fips-dispatch-gl.h"
 
 #include "metrics.h"
 
@@ -59,7 +58,7 @@ typedef struct context
 context_t current_context;
 
 unsigned
-metrics_add_counter (void)
+metrics_counter_new (void)
 {
        counter_t *counter;
 
@@ -85,6 +84,18 @@ metrics_add_counter (void)
        return counter->id;
 }
 
+void
+metrics_counter_start (unsigned counter)
+{
+       glBeginQuery (GL_TIME_ELAPSED, counter);
+}
+
+void
+metrics_counter_stop (void)
+{
+       glEndQuery (GL_TIME_ELAPSED);
+}
+
 void
 metrics_set_current_program (unsigned program)
 {
@@ -141,28 +152,16 @@ metrics_end_frame (void)
 
 
        frames++;
-
-       if (frames % 60 == 0) {
-               double fps;
-               gettimeofday (&tv_now, NULL);
-
-               fps = (double) frames / (tv_now.tv_sec - tv_start.tv_sec +
-                                        (tv_now.tv_usec - tv_start.tv_usec) / 1.0e6);
-
-               printf("FPS: %.3f\n", fps);
-
-               print_program_metrics ();
-       }
+       gettimeofday (&tv_now, NULL);
 
        /* Consume all counters that are ready. */
        counter_t *counter = current_context.counter_head;
 
        while (counter) {
-               GLint available;
-               GLuint elapsed;
+               GLuint available, elapsed;
 
-               glGetQueryObjectiv (counter->id, GL_QUERY_RESULT_AVAILABLE,
-                                   &available);
+               glGetQueryObjectuiv (counter->id, GL_QUERY_RESULT_AVAILABLE,
+                                    &available);
                if (! available)
                        break;
 
@@ -179,4 +178,15 @@ metrics_end_frame (void)
                free (counter);
                counter = current_context.counter_head;
        }
+
+       if (frames % 60 == 0) {
+               double fps;
+
+               fps = (double) frames / (tv_now.tv_sec - tv_start.tv_sec +
+                                        (tv_now.tv_usec - tv_start.tv_usec) / 1.0e6);
+
+               printf("FPS: %.3f\n", fps);
+
+               print_program_metrics ();
+       }
 }