spaceball
[o2demo] / src / main.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <assert.h>
4 #include <GL/glut.h>
5 #include "demo.h"
6
7 static void disp(void);
8 static void idle(void);
9 static void reshape(int x, int y);
10 static void keydown(unsigned char c, int x, int y);
11 static void keyup(unsigned char c, int x, int y);
12 static void mouse(int bn, int st, int x, int y);
13 static void motion(int x, int y);
14 static void sball_button(int bn, int pressed);
15
16 static unsigned int start_time;
17
18
19 int main(int argc, char **argv)
20 {
21         glutInit(&argc, argv);
22         glutInitWindowSize(800, 600);
23         glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
24         glutCreateWindow("o2demo");
25
26         glutDisplayFunc(disp);
27         glutIdleFunc(idle);
28         glutReshapeFunc(reshape);
29         glutKeyboardFunc(keydown);
30         glutKeyboardUpFunc(keyup);
31         glutMouseFunc(mouse);
32         glutMotionFunc(motion);
33         glutSpaceballMotionFunc(demo_sball_motion);
34         glutSpaceballRotateFunc(demo_sball_rotate);
35         glutSpaceballButtonFunc(sball_button);
36
37         if(demo_init(argc, argv) == -1) {
38                 return 1;
39         }
40         atexit(demo_cleanup);
41
42         start_time = glutGet(GLUT_ELAPSED_TIME);
43
44         glutMainLoop();
45         return 0;
46 }
47
48 void demo_quit(void)
49 {
50         exit(0);
51 }
52
53 unsigned int get_msec(void)
54 {
55         return glutGet(GLUT_ELAPSED_TIME) - start_time;
56 }
57
58 static void disp(void)
59 {
60         time_msec = get_msec();
61
62         demo_draw();
63
64         glutSwapBuffers();
65         assert(glGetError() == GL_NO_ERROR);
66 }
67
68 static void idle(void)
69 {
70         glutPostRedisplay();
71 }
72
73 static void reshape(int x, int y)
74 {
75         win_width = x;
76         win_height = y;
77         win_aspect = (float)x / (float)y;
78
79         demo_reshape(x, y);
80 }
81
82 static void keydown(unsigned char c, int x, int y)
83 {
84         demo_keyboard((int)c, 1);
85 }
86
87 static void keyup(unsigned char c, int x, int y)
88 {
89         demo_keyboard((int)c, 0);
90 }
91
92 static void mouse(int bn, int st, int x, int y)
93 {
94         int bidx = bn - GLUT_LEFT_BUTTON;
95         int press = st == GLUT_DOWN ? 1 : 0;
96         demo_mbutton(bidx, press, x, y);
97 }
98
99 static void motion(int x, int y)
100 {
101         demo_mmotion(x, y);
102 }
103
104 static void sball_button(int bn, int pressed)
105 {
106         demo_sball_button(bn - 1, pressed == GLUT_DOWN ? 1 : 0);
107 }