diff test/testfill.c @ 3576:5ea08f1c29d0

Added testfill to test raw fill performance
author Sam Lantinga <slouken@libsdl.org>
date Wed, 16 Dec 2009 02:08:59 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/testfill.c	Wed Dec 16 02:08:59 2009 +0000
@@ -0,0 +1,107 @@
+/* Simple program:  Fill the screen with colors as fast as possible */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+
+#include "SDL.h"
+
+/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
+static void
+quit(int rc)
+{
+    SDL_Quit();
+    exit(rc);
+}
+
+int
+main(int argc, char *argv[])
+{
+    SDL_Surface *screen;
+    int width, height;
+    Uint8 video_bpp;
+    Uint32 videoflags;
+    Uint32 colors[3];
+    int i, done;
+    SDL_Event event;
+    Uint32 then, now, frames;
+
+    /* Initialize SDL */
+    if (SDL_Init(SDL_INIT_VIDEO) < 0) {
+        fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError());
+        return (1);
+    }
+
+    width = 640;
+    height = 480;
+    video_bpp = 8;
+    videoflags = 0;
+    while (argc > 1) {
+        --argc;
+        if (strcmp(argv[argc - 1], "-width") == 0) {
+            width = atoi(argv[argc]);
+            --argc;
+        } else if (strcmp(argv[argc - 1], "-height") == 0) {
+            height = atoi(argv[argc]);
+            --argc;
+        } else if (strcmp(argv[argc - 1], "-bpp") == 0) {
+            video_bpp = atoi(argv[argc]);
+            --argc;
+        } else if (strcmp(argv[argc], "-fullscreen") == 0) {
+            videoflags ^= SDL_FULLSCREEN;
+        } else {
+            fprintf(stderr,
+                    "Usage: %s [-width N] [-height N] [-bpp N] [-fullscreen]\n",
+                    argv[0]);
+            quit(1);
+        }
+    }
+
+    /* Set video mode */
+    screen = SDL_SetVideoMode(width, height, video_bpp, 0);
+    if (!screen) {
+        fprintf(stderr, "Couldn't set %dx%d video mode: %s\n",
+                width, height, SDL_GetError());
+        quit(2);
+    }
+
+    /* Get the colors */
+    colors[0] = SDL_MapRGB(screen->format, 0xFF, 0x00, 0x00);
+    colors[1] = SDL_MapRGB(screen->format, 0x00, 0xFF, 0x00);
+    colors[2] = SDL_MapRGB(screen->format, 0x00, 0x00, 0xFF);
+
+    /* Loop, filling and waiting for a keystroke */
+    frames = 0;
+    then = SDL_GetTicks();
+    done = 0;
+    while (!done) {
+        /* Check for events */
+        ++frames;
+        while (SDL_PollEvent(&event)) {
+            switch (event.type) {
+            case SDL_MOUSEBUTTONDOWN:
+                SDL_WarpMouse(screen->w / 2, screen->h / 2);
+                break;
+            case SDL_KEYDOWN:
+                /* Any keypress quits the app... */
+            case SDL_QUIT:
+                done = 1;
+                break;
+            default:
+                break;
+            }
+        }
+        SDL_FillRect(screen, NULL, colors[frames%3]);
+        SDL_Flip(screen);
+    }
+
+    /* Print out some timing information */
+    now = SDL_GetTicks();
+    if (now > then) {
+        double fps = ((double) frames * 1000) / (now - then);
+        printf("%2.2f frames per second\n", fps);
+    }
+    SDL_Quit();
+    return (0);
+}