X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=dosdemo;a=blobdiff_plain;f=src%2Fsdl%2Fmain.c;h=0abb3e32c60382fa1c6631174aeff3093b5ac574;hp=38822f386d93f3a991de45dd551e7785afafd2b8;hb=ecc362e702b77d5c1334656e6f4dc9b17abcb767;hpb=2c2834ca26bf4d2b9f6a588c9aa53a8b36510bd6 diff --git a/src/sdl/main.c b/src/sdl/main.c index 38822f3..0abb3e3 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; i