From c1065ee977f70042e54a930a6cd3af819d4a9806 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Sat, 8 Jan 2005 23:52:01 +0000 Subject: [PATCH] compute reasonable animate rate (Marcelo Magallon) --- progs/samples/olympic.c | 16 +++++++++++++++- progs/samples/sphere.c | 14 +++++++++++--- progs/samples/star.c | 21 ++++++++++++++++----- progs/samples/stretch.c | 15 +++++++++++++++ progs/samples/wave.c | 19 ++++++++++++++++++- 5 files changed, 75 insertions(+), 10 deletions(-) diff --git a/progs/samples/olympic.c b/progs/samples/olympic.c index d1cfa7250f5..5385e487026 100644 --- a/progs/samples/olympic.c +++ b/progs/samples/olympic.c @@ -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(); diff --git a/progs/samples/sphere.c b/progs/samples/sphere.c index cbe2cb1868b..7d0508dee9f 100644 --- a/progs/samples/sphere.c +++ b/progs/samples/sphere.c @@ -29,7 +29,7 @@ #include #include #include -#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(); } diff --git a/progs/samples/star.c b/progs/samples/star.c index 570c3e19f9d..2cf470e2a2f 100644 --- a/progs/samples/star.c +++ b/progs/samples/star.c @@ -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(); diff --git a/progs/samples/stretch.c b/progs/samples/stretch.c index 9efa8e187e3..1fd015d794a 100644 --- a/progs/samples/stretch.c +++ b/progs/samples/stretch.c @@ -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(); diff --git a/progs/samples/wave.c b/progs/samples/wave.c index 7ded49bedcc..d3c4687459e 100644 --- a/progs/samples/wave.c +++ b/progs/samples/wave.c @@ -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)