Merge branch 'master' of goat:git/dosdemo
[dosdemo] / src / demo.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <math.h>
5 #include <errno.h>
6 #include <limits.h>
7 #include "demo.h"
8 #include "screen.h"
9
10 int fb_width = 320;
11 int fb_height = 240;
12 int fb_bpp = 16;
13 void *fb_pixels;
14 unsigned long time_msec;
15 int mouse_x, mouse_y;
16 unsigned int mouse_bmask;
17
18 static unsigned long nframes;
19 static const char *start_scr_name = "tunnel";
20
21 int demo_init(int argc, char **argv)
22 {
23         if(argv[1]) {
24                 start_scr_name = argv[1];
25         }
26
27         if(scr_init() == -1) {
28                 return -1;
29         }
30         if(scr_change(scr_lookup(start_scr_name), 4000) == -1) {
31                 fprintf(stderr, "screen %s not found\n", start_scr_name);
32                 return -1;
33         }
34
35         /* clear the framebuffer at least once */
36         memset(fb_pixels, 0, fb_width * fb_height * fb_bpp / CHAR_BIT);
37         return 0;
38 }
39
40 void demo_cleanup(void)
41 {
42         scr_shutdown();
43
44         if(time_msec) {
45                 float fps = (float)nframes / ((float)time_msec / 1000.0f);
46                 printf("average framerate: %.1f\n", fps);
47         }
48 }
49
50 void demo_draw(void)
51 {
52         scr_update();
53         scr_draw();
54
55         ++nframes;
56 }
57
58 void demo_keyboard(int key, int state)
59 {
60         if(state) {
61                 switch(key) {
62                 case 27:
63                         demo_quit();
64                         break;
65
66                 default:
67                         break;
68                 }
69         }
70 }