compute reasonable animate rate (Marcelo Magallon)
authorBrian Paul <brian.paul@tungstengraphics.com>
Sat, 8 Jan 2005 23:52:01 +0000 (23:52 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Sat, 8 Jan 2005 23:52:01 +0000 (23:52 +0000)
progs/samples/olympic.c
progs/samples/sphere.c
progs/samples/star.c
progs/samples/stretch.c
progs/samples/wave.c

index d1cfa7250f5eb769c87b76aa0c770acc8f308a5c..5385e487026f110b027e2b0541d34b336c4e3a8e 100644 (file)
@@ -108,7 +108,6 @@ void FillTorus(float rc, int numc, float rt, int numt)
 
 float Clamp(int iters_left, float t)
 {
-
     if (iters_left < 3) {
        return 0.0;
     }
@@ -119,6 +118,17 @@ void DrawScene(void)
 {
     int i, j;
     GLboolean goIdle;
+    static double t0 = -1.;
+    double t, dt;
+    t = glutGet(GLUT_ELAPSED_TIME) / 1000.;
+    if (t0 < 0.)
+       t0 = t;
+    dt = t - t0;
+
+    if (dt < 1./30.)
+        return;
+
+    t0 = t;
 
     goIdle = GL_TRUE;
     for (i = 0; i < RINGS; i++) {
@@ -167,6 +177,10 @@ float MyRand(void)
    return 10.0 * ( (float) rand() / (float) RAND_MAX - 0.5 );
 }
 
+#if !defined(GLUTCALLBACK)
+#define GLUTCALLBACK
+#endif
+
 void GLUTCALLBACK glut_post_redisplay_p(void)
 {
       glutPostRedisplay();
index cbe2cb1868b22e99d5c26a83309100060e658074..7d0508dee9f1934e44b4aa20fc1a47ef3b1872aa 100644 (file)
@@ -29,7 +29,7 @@
 #include <math.h>
 #include <stdlib.h>
 #include <GL/glut.h>
-#include "../util/readtex.c"
+#include "readtex.h"
 
 
 #ifndef PI
@@ -820,8 +820,16 @@ void Reshape(int width, int height)
 
 void Idle(void)
 {
-   xRotation += .75;
-   yRotation += .375;
+   static double t0 = -1.;
+   double t, dt;
+   t = glutGet(GLUT_ELAPSED_TIME) / 1000.;
+   if (t0 < 0.)
+      t0 = t;
+   dt = t - t0;
+   t0 = t;
+
+   xRotation += .75*60.*dt;
+   yRotation += .375*60.*dt;
    glutPostRedisplay();
 }
 
index 570c3e19f9d2228e915277e4b00bc1c062a3976b..2cf470e2a2f7d412e89d8eced46b9ee0c58e74f5 100644 (file)
@@ -45,7 +45,7 @@ enum {
 
 #define MAXSTARS 400
 #define MAXPOS 10000
-#define MAXWARP 10
+#define MAXWARP 500
 #define MAXANGLES 6000
 
 
@@ -115,6 +115,13 @@ void MoveStars(void)
 {
     float offset;
     GLint n;
+    static double t0 = -1.;
+    double t, dt;
+    t = glutGet(GLUT_ELAPSED_TIME) / 1000.;
+    if (t0 < 0.)
+       t0 = t;
+    dt = 85.*(t - t0);
+    t0 = t;
 
     offset = speed * 60.0;
 
@@ -122,10 +129,10 @@ void MoveStars(void)
        stars[n].x[1] = stars[n].x[0];
        stars[n].y[1] = stars[n].y[0];
        stars[n].z[1] = stars[n].z[0];
-       stars[n].x[0] += stars[n].offsetX;
-       stars[n].y[0] += stars[n].offsetY;
-       stars[n].z[0] -= offset;
-        stars[n].rotation += stars[n].offsetR;
+       stars[n].x[0] += stars[n].offsetX*dt;
+       stars[n].y[0] += stars[n].offsetY*dt;
+       stars[n].z[0] -= offset*dt;
+        stars[n].rotation += stars[n].offsetR*dt;
         if (stars[n].rotation > MAXANGLES) {
             stars[n].rotation = 0.0;
        }
@@ -296,6 +303,10 @@ static GLenum Args(int argc, char **argv)
     return GL_TRUE;
 }
 
+#if !defined(GLUTCALLBACK)
+#define GLUTCALLBACK
+#endif
+
 void GLUTCALLBACK glut_post_redisplay_p(void)
 {
       glutPostRedisplay();
index 9efa8e187e3a43c238334961eec0257b3e2fb935..1fd015d794a051e9ee0ce2751d80d8fad5e16951 100644 (file)
@@ -265,6 +265,17 @@ void Mouse(int button, int state, int mouseX, int mouseY)
 
 void Animate(void)
 {
+    static double t0 = -1.;
+    double t, dt;
+    t = glutGet(GLUT_ELAPSED_TIME) / 1000.;
+    if (t0 < 0.)
+       t0 = t;
+    dt = t - t0;
+
+    if (dt < 1./60.)
+        return;
+
+    t0 = t;
 
     switch (op) {
       case OP_STRETCH:
@@ -307,6 +318,10 @@ static GLenum Args(int argc, char **argv)
     return GL_TRUE;
 }
 
+#if !defined(GLUTCALLBACK)
+#define GLUTCALLBACK
+#endif
+
 void GLUTCALLBACK glut_post_redisplay_p(void)
 {
       glutPostRedisplay();
index 7ded49bedccbfcacb5038afe202e7e792c82127e..d3c4687459ebe32112355315becd10d8be76b33a 100644 (file)
@@ -87,9 +87,26 @@ GLubyte contourTexture2[] = {
     255, 127, 127, 127,
 };
 
+#if !defined(GLUTCALLBACK)
+#define GLUTCALLBACK
+#endif
+
+
 void GLUTCALLBACK glut_post_redisplay_p(void)
 {
-      glutPostRedisplay();
+    static double t0 = -1.;
+    double t, dt;
+    t = glutGet(GLUT_ELAPSED_TIME) / 1000.;
+    if (t0 < 0.)
+       t0 = t;
+    dt = t - t0;
+
+    if (dt < 1./30.)
+        return;
+
+    t0 = t;
+
+    glutPostRedisplay();
 }
 
 static void Animate(void)