summaryrefslogtreecommitdiff
path: root/progs
diff options
context:
space:
mode:
Diffstat (limited to 'progs')
-rw-r--r--progs/demos/gears.c35
1 files changed, 29 insertions, 6 deletions
diff --git a/progs/demos/gears.c b/progs/demos/gears.c
index ab9bc00742..7abbd3670b 100644
--- a/progs/demos/gears.c
+++ b/progs/demos/gears.c
@@ -27,6 +27,9 @@ static GLint T0 = 0;
static GLint Frames = 0;
static GLint autoexit = 0;
static GLint win = 0;
+static GLboolean Visible = GL_TRUE;
+static GLboolean Animate = GL_TRUE;
+static GLfloat viewDist = 40.0;
/**
@@ -179,6 +182,9 @@ draw(void)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
+
+ glTranslatef(0.0, 0.0, -viewDist);
+
glRotatef(view_rotx, 1.0, 0.0, 0.0);
glRotatef(view_roty, 0.0, 1.0, 0.0);
glRotatef(view_rotz, 0.0, 0.0, 1.0);
@@ -240,6 +246,15 @@ idle(void)
glutPostRedisplay();
}
+static void
+update_idle_func(void)
+{
+ if (Visible && Animate)
+ glutIdleFunc(idle);
+ else
+ glutIdleFunc(NULL);
+}
+
/* change view angle, exit upon ESC */
/* ARGSUSED1 */
static void
@@ -252,6 +267,16 @@ key(unsigned char k, int x, int y)
case 'Z':
view_rotz -= 5.0;
break;
+ case 'd':
+ viewDist += 1.0;
+ break;
+ case 'D':
+ viewDist -= 1.0;
+ break;
+ case 'a':
+ Animate = !Animate;
+ update_idle_func();
+ break;
case 27: /* Escape */
cleanup();
exit(0);
@@ -297,8 +322,6 @@ reshape(int width, int height)
glLoadIdentity();
glFrustum(-1.0, 1.0, -h, h, 5.0, 60.0);
glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- glTranslatef(0.0, 0.0, -40.0);
}
static void
@@ -351,13 +374,12 @@ init(int argc, char *argv[])
}
}
+
static void
visible(int vis)
{
- if (vis == GLUT_VISIBLE)
- glutIdleFunc(idle);
- else
- glutIdleFunc(NULL);
+ Visible = vis;
+ update_idle_func();
}
int main(int argc, char *argv[])
@@ -375,6 +397,7 @@ int main(int argc, char *argv[])
glutKeyboardFunc(key);
glutSpecialFunc(special);
glutVisibilityFunc(visible);
+ update_idle_func();
glutMainLoop();
return 0; /* ANSI C requires main to return int. */