X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=dosdemo;a=blobdiff_plain;f=src%2Fdos%2Fmain.c;h=53b8888f8f991e88bc244a3ff674d77f8fc0a641;hp=442f343ed2ab7ad5ea4eec71a8e0a2cc397c8f24;hb=0b870b76705b3e597da3f6a11e0499deedbeee30;hpb=757e7697c9a4434df6f3fdf3234de504bb4636bc diff --git a/src/dos/main.c b/src/dos/main.c index 442f343..53b8888 100644 --- a/src/dos/main.c +++ b/src/dos/main.c @@ -1,28 +1,42 @@ #include +#include +#include #include #include "demo.h" #include "keyb.h" +#include "mouse.h" #include "timer.h" #include "gfx.h" +#include "logger.h" static int quit; +static int use_mouse; +static long fbsize; int main(int argc, char **argv) { - void *vmem; - long fbsize = fb_width * fb_height * fb_bpp / CHAR_BIT; + fbsize = fb_width * fb_height * fb_bpp / CHAR_BIT; + + init_logger("demo.log"); init_timer(100); kb_init(32); + if((use_mouse = have_mouse())) { + set_mouse_limits(0, 0, fb_width, fb_height); + set_mouse(fb_width / 2, fb_height / 2); + } + if(!(fb_pixels = malloc(fbsize))) { fprintf(stderr, "failed to allocate backbuffer\n"); return 1; } - if(!(vmem = set_video_mode(fb_width, fb_height, fb_bpp))) { + if(!(vmem_front = set_video_mode(fb_width, fb_height, fb_bpp))) { return 1; } + /* TODO implement multiple video memory pages for flipping */ + vmem_back = vmem_front; if(demo_init(argc, argv) == -1) { set_text_mode(); @@ -37,13 +51,12 @@ int main(int argc, char **argv) } if(quit) goto break_evloop; - mouse_bmask = read_mouse(&mouse_x, &mouse_y); + if(use_mouse) { + mouse_bmask = read_mouse(&mouse_x, &mouse_y); + } time_msec = get_msec(); demo_draw(); - - /*wait_vsync();*/ - memcpy(vmem, fb_pixels, fbsize); } break_evloop: @@ -57,3 +70,12 @@ void demo_quit(void) { quit = 1; } + +void swap_buffers(void *pixels) +{ + /* TODO implement page flipping */ + if(pixels) { + /*wait_vsync();*/ + memcpy(vmem_front, pixels, fbsize); + } +}