slouken@3576: /* Simple program: Fill the screen with colors as fast as possible */ slouken@3576: slouken@3576: #include slouken@3576: #include slouken@3576: #include slouken@3576: #include slouken@3576: slouken@3576: #include "SDL.h" slouken@3576: slouken@3576: /* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ slouken@3576: static void slouken@3576: quit(int rc) slouken@3576: { slouken@3576: SDL_Quit(); slouken@3576: exit(rc); slouken@3576: } slouken@3576: slouken@3576: int slouken@3576: main(int argc, char *argv[]) slouken@3576: { slouken@3576: SDL_Surface *screen; slouken@3576: int width, height; slouken@3576: Uint8 video_bpp; slouken@3576: Uint32 videoflags; slouken@3576: Uint32 colors[3]; slouken@3576: int i, done; slouken@3576: SDL_Event event; slouken@3576: Uint32 then, now, frames; slouken@3576: slouken@3576: /* Initialize SDL */ slouken@3576: if (SDL_Init(SDL_INIT_VIDEO) < 0) { slouken@3576: fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError()); slouken@3576: return (1); slouken@3576: } slouken@3576: slouken@3576: width = 640; slouken@3576: height = 480; slouken@3576: video_bpp = 8; slouken@3576: videoflags = 0; slouken@3576: while (argc > 1) { slouken@3576: --argc; slouken@3576: if (strcmp(argv[argc - 1], "-width") == 0) { slouken@3576: width = atoi(argv[argc]); slouken@3576: --argc; slouken@3576: } else if (strcmp(argv[argc - 1], "-height") == 0) { slouken@3576: height = atoi(argv[argc]); slouken@3576: --argc; slouken@3576: } else if (strcmp(argv[argc - 1], "-bpp") == 0) { slouken@3576: video_bpp = atoi(argv[argc]); slouken@3576: --argc; slouken@3576: } else if (strcmp(argv[argc], "-fullscreen") == 0) { slouken@3576: videoflags ^= SDL_FULLSCREEN; slouken@3576: } else { slouken@3576: fprintf(stderr, slouken@3576: "Usage: %s [-width N] [-height N] [-bpp N] [-fullscreen]\n", slouken@3576: argv[0]); slouken@3576: quit(1); slouken@3576: } slouken@3576: } slouken@3576: slouken@3576: /* Set video mode */ slouken@3576: screen = SDL_SetVideoMode(width, height, video_bpp, 0); slouken@3576: if (!screen) { slouken@3576: fprintf(stderr, "Couldn't set %dx%d video mode: %s\n", slouken@3576: width, height, SDL_GetError()); slouken@3576: quit(2); slouken@3576: } slouken@3576: slouken@3576: /* Get the colors */ slouken@3576: colors[0] = SDL_MapRGB(screen->format, 0xFF, 0x00, 0x00); slouken@3576: colors[1] = SDL_MapRGB(screen->format, 0x00, 0xFF, 0x00); slouken@3576: colors[2] = SDL_MapRGB(screen->format, 0x00, 0x00, 0xFF); slouken@3576: slouken@3576: /* Loop, filling and waiting for a keystroke */ slouken@3576: frames = 0; slouken@3576: then = SDL_GetTicks(); slouken@3576: done = 0; slouken@3576: while (!done) { slouken@3576: /* Check for events */ slouken@3576: ++frames; slouken@3576: while (SDL_PollEvent(&event)) { slouken@3576: switch (event.type) { slouken@3576: case SDL_MOUSEBUTTONDOWN: slouken@3576: SDL_WarpMouse(screen->w / 2, screen->h / 2); slouken@3576: break; slouken@3576: case SDL_KEYDOWN: slouken@3576: /* Any keypress quits the app... */ slouken@3576: case SDL_QUIT: slouken@3576: done = 1; slouken@3576: break; slouken@3576: default: slouken@3576: break; slouken@3576: } slouken@3576: } slouken@3576: SDL_FillRect(screen, NULL, colors[frames%3]); slouken@3576: SDL_Flip(screen); slouken@3576: } slouken@3576: slouken@3576: /* Print out some timing information */ slouken@3576: now = SDL_GetTicks(); slouken@3576: if (now > then) { slouken@3576: double fps = ((double) frames * 1000) / (now - then); slouken@3576: printf("%2.2f frames per second\n", fps); slouken@3576: } slouken@3576: SDL_Quit(); slouken@3576: return (0); slouken@3576: }