X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fsdl%2Fmain.c;h=b3ff90557889e8090c9fd592b6dd5e448832ed7c;hb=757e7697c9a4434df6f3fdf3234de504bb4636bc;hp=38822f386d93f3a991de45dd551e7785afafd2b8;hpb=77c1d84c258ca14e1bba06ab711426668ff24290;p=dosdemo diff --git a/src/sdl/main.c b/src/sdl/main.c index 38822f3..b3ff905 100644 --- a/src/sdl/main.c +++ b/src/sdl/main.c @@ -1,5 +1,6 @@ #include #include +#include #include #include "demo.h" @@ -9,19 +10,42 @@ static int quit; static long start_time; static SDL_Surface *fbsurf; +static int fbscale = 2; +static int xsz, ysz; + int main(int argc, char **argv) { + int s, i, j; + char *env; + unsigned short *sptr, *dptr; unsigned int sdl_flags = SDL_SWSURFACE; + if((env = getenv("FBSCALE")) && (s = atoi(env))) { + fbscale = s; + printf("Framebuffer scaling x%d\n", fbscale); + } + + xsz = fb_width * fbscale; + ysz = fb_height * fbscale; + + if(!(fb_pixels = malloc(fb_width * fb_height * fb_bpp / CHAR_BIT))) { + fprintf(stderr, "failed to allocate virtual framebuffer\n"); + return 1; + } + SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER); - if(!(fbsurf = SDL_SetVideoMode(fb_width, fb_height, fb_bpp, sdl_flags))) { + if(!(fbsurf = SDL_SetVideoMode(xsz, ysz, fb_bpp, sdl_flags))) { fprintf(stderr, "failed to set video mode %dx%d %dbpp\n", fb_width, fb_height, fb_bpp); + free(fb_pixels); + SDL_Quit(); return 1; } - SDL_WM_SetCaption("dosdemo SDLemu", 0); + SDL_WM_SetCaption("dosdemo/SDL", 0); time_msec = 0; if(demo_init(argc, argv) == -1) { + free(fb_pixels); + SDL_Quit(); return 1; } start_time = SDL_GetTicks(); @@ -34,12 +58,28 @@ int main(int argc, char **argv) } time_msec = SDL_GetTicks() - start_time; + demo_draw(); + if(SDL_MUSTLOCK(fbsurf)) { SDL_LockSurface(fbsurf); } - fb_pixels = fbsurf->pixels; - demo_draw(); + sptr = fb_pixels; + dptr = fbsurf->pixels; + for(i=0; ikey.keysym.sym, ev->key.state == SDL_PRESSED ? 1 : 0); break; + case SDL_MOUSEMOTION: + mouse_x = ev->motion.x / fbscale; + mouse_y = ev->motion.y / fbscale; + break; + + case SDL_MOUSEBUTTONDOWN: + mouse_bmask |= 1 << ev->button.button; + if(0) { + case SDL_MOUSEBUTTONUP: + mouse_bmask &= ~(1 << ev->button.button); + } + mouse_x = ev->button.x / fbscale; + mouse_y = ev->button.y / fbscale; + break; + default: break; }