added crappy polygon filler
[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 #include "3dgfx.h"
10
11 int fb_width = 320;
12 int fb_height = 240;
13 int fb_bpp = 16;
14 void *fb_pixels;
15 unsigned long time_msec;
16 int mouse_x, mouse_y;
17 unsigned int mouse_bmask;
18
19 static unsigned long nframes;
20 static const char *start_scr_name;
21
22 int demo_init(int argc, char **argv)
23 {
24         struct screen *scr;
25
26         if(argv[1]) {
27                 start_scr_name = argv[1];
28         }
29
30         if(g3d_init() == -1) {
31                 return -1;
32         }
33         g3d_framebuffer(fb_width, fb_height, fb_pixels);
34
35         if(scr_init() == -1) {
36                 return -1;
37         }
38         if(start_scr_name) {
39                 scr = scr_lookup(start_scr_name);
40         } else {
41                 scr = scr_screen(0);
42         }
43
44         if(!scr || scr_change(scr, 4000) == -1) {
45                 fprintf(stderr, "screen %s not found\n", start_scr_name ? start_scr_name : "0");
46                 return -1;
47         }
48
49         /* clear the framebuffer at least once */
50         memset(fb_pixels, 0, fb_width * fb_height * fb_bpp / CHAR_BIT);
51         return 0;
52 }
53
54 void demo_cleanup(void)
55 {
56         scr_shutdown();
57         g3d_destroy();
58
59         if(time_msec) {
60                 float fps = (float)nframes / ((float)time_msec / 1000.0f);
61                 printf("average framerate: %.1f\n", fps);
62         }
63 }
64
65 void demo_draw(void)
66 {
67         scr_update();
68         scr_draw();
69
70         ++nframes;
71 }
72
73 void demo_keyboard(int key, int state)
74 {
75         if(state) {
76                 switch(key) {
77                 case 27:
78                         demo_quit();
79                         break;
80
81                 default:
82                         if(key >= '1' && key <= '1' + scr_num_screens()) {
83                                 int idx = key - '1';
84                                 printf("change screen %d\n", idx);
85                                 scr_change(scr_screen(idx), 4000);
86                         }
87                         break;
88                 }
89         }
90 }