initial commit
[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
15 static unsigned int start_time;
16
17
18 int main(int argc, char **argv)
19 {
20         glutInit(&argc, argv);
21         glutInitWindowSize(800, 600);
22         glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
23         glutCreateWindow("o2demo");
24
25         glutDisplayFunc(disp);
26         glutIdleFunc(idle);
27         glutReshapeFunc(reshape);
28         glutKeyboardFunc(keydown);
29         glutKeyboardUpFunc(keyup);
30         glutMouseFunc(mouse);
31         glutMotionFunc(motion);
32
33         if(demo_init(argc, argv) == -1) {
34                 return 1;
35         }
36         atexit(demo_cleanup);
37
38         start_time = glutGet(GLUT_ELAPSED_TIME);
39
40         glutMainLoop();
41         return 0;
42 }
43
44 void demo_quit(void)
45 {
46         exit(0);
47 }
48
49 unsigned int get_msec(void)
50 {
51         return glutGet(GLUT_ELAPSED_TIME) - start_time;
52 }
53
54 static void disp(void)
55 {
56         time_msec = get_msec();
57
58         demo_draw();
59
60         glutSwapBuffers();
61         assert(glGetError() == GL_NO_ERROR);
62 }
63
64 static void idle(void)
65 {
66         glutPostRedisplay();
67 }
68
69 static void reshape(int x, int y)
70 {
71         win_width = x;
72         win_height = y;
73         win_aspect = (float)x / (float)y;
74
75         demo_reshape(x, y);
76 }
77
78 static void keydown(unsigned char c, int x, int y)
79 {
80         demo_keyboard((int)c, 1);
81 }
82
83 static void keyup(unsigned char c, int x, int y)
84 {
85         demo_keyboard((int)c, 0);
86 }
87
88 static void mouse(int bn, int st, int x, int y)
89 {
90         int bidx = bn - GLUT_LEFT_BUTTON;
91         int press = st == GLUT_DOWN ? 1 : 0;
92         demo_mbutton(bidx, press, x, y);
93 }
94
95 static void motion(int x, int y)
96 {
97         demo_mmotion(x, y);
98 }