foo
[laserbrain_demo] / src / main.cc
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <assert.h>
4 #include <GL/glew.h>
5 #ifdef __APPLE__
6 #include <GLUT/glut.h>
7 #else
8 #include <GL/glut.h>
9 #endif
10 #include "app.h"
11
12 static bool init();
13 static void display();
14 static void idle();
15 static void reshape(int x, int y);
16 static void key_press(unsigned char key, int x, int y);
17 static void key_release(unsigned char key, int x, int y);
18 static void mouse(int bn, int st, int x, int y);
19
20 static unsigned int start_time;
21
22 int main(int argc, char **argv)
23 {
24         glutInitWindowSize(1024, 768);
25         glutInit(&argc, argv);
26         glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE | GLUT_MULTISAMPLE);
27         glutCreateWindow("demo");
28
29         glutDisplayFunc(display);
30         glutIdleFunc(idle);
31         glutReshapeFunc(reshape);
32         glutKeyboardFunc(key_press);
33         glutKeyboardUpFunc(key_release);
34         glutMouseFunc(mouse);
35         glutMotionFunc(app_mouse_motion);
36         glutPassiveMotionFunc(app_mouse_motion);
37
38         if(!init()) {
39                 return 1;
40         }
41         atexit(app_cleanup);
42
43         glutMainLoop();
44         return 0;
45 }
46
47 void app_swap_buffers()
48 {
49         glutSwapBuffers();
50 }
51
52 void app_quit()
53 {
54         exit(0);
55 }
56
57 static bool init()
58 {
59         glewInit();
60
61         if(!app_init()) {
62                 return false;
63         }
64
65         start_time = glutGet(GLUT_ELAPSED_TIME);
66         return true;
67 }
68
69 static void display()
70 {
71         time_msec = glutGet(GLUT_ELAPSED_TIME) - start_time;
72         app_display();
73 }
74
75 static void idle()
76 {
77         glutPostRedisplay();
78 }
79
80 static void reshape(int x, int y)
81 {
82         win_width = x;
83         win_height = y;
84
85         app_reshape(x, y);
86 }
87
88 static void key_press(unsigned char key, int x, int y)
89 {
90         app_keyboard(key, true);
91 }
92
93 static void key_release(unsigned char key, int x, int y)
94 {
95         app_keyboard(key, false);
96 }
97
98 static void mouse(int bn, int st, int x, int y)
99 {
100         int bidx = bn - GLUT_LEFT_BUTTON;
101         bool down = st == GLUT_DOWN;
102
103         app_mouse_button(bidx, down, x, y);
104 }