diff test/testvidinfo.c @ 1895:c121d94672cb

SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
author Sam Lantinga <slouken@libsdl.org>
date Mon, 10 Jul 2006 21:04:37 +0000
parents 8d9bb0cf2c2a
children 01e29c3e9a29
line wrap: on
line diff
--- a/test/testvidinfo.c	Thu Jul 06 18:01:37 2006 +0000
+++ b/test/testvidinfo.c	Mon Jul 10 21:04:37 2006 +0000
@@ -15,451 +15,517 @@
                          SDL_SRCCOLORKEY | SDL_SRCALPHA | SDL_RLEACCEL  | \
                          SDL_RLEACCELOK)
 
-void PrintFlags(Uint32 flags)
+#if 0
+void
+PrintFlags(Uint32 flags)
 {
-	printf("0x%8.8x", (flags & FLAG_MASK));
-	if ( flags & SDL_HWSURFACE ) {
-		printf(" SDL_HWSURFACE");
-	} else {
-		printf(" SDL_SWSURFACE");
-	}
-	if ( flags & SDL_FULLSCREEN ) {
-		printf(" | SDL_FULLSCREEN");
-	}
-	if ( flags & SDL_DOUBLEBUF ) {
-		printf(" | SDL_DOUBLEBUF");
-	}
-	if ( flags & SDL_SRCCOLORKEY ) {
-		printf(" | SDL_SRCCOLORKEY");
-	}
-	if ( flags & SDL_SRCALPHA ) {
-		printf(" | SDL_SRCALPHA");
-	}
-	if ( flags & SDL_RLEACCEL ) {
-		printf(" | SDL_RLEACCEL");
-	}
-	if ( flags & SDL_RLEACCELOK ) {
-		printf(" | SDL_RLEACCELOK");
-	}
+    printf("0x%8.8x", (flags & FLAG_MASK));
+    if (flags & SDL_HWSURFACE) {
+        printf(" SDL_HWSURFACE");
+    } else {
+        printf(" SDL_SWSURFACE");
+    }
+    if (flags & SDL_FULLSCREEN) {
+        printf(" | SDL_FULLSCREEN");
+    }
+    if (flags & SDL_DOUBLEBUF) {
+        printf(" | SDL_DOUBLEBUF");
+    }
+    if (flags & SDL_SRCCOLORKEY) {
+        printf(" | SDL_SRCCOLORKEY");
+    }
+    if (flags & SDL_SRCALPHA) {
+        printf(" | SDL_SRCALPHA");
+    }
+    if (flags & SDL_RLEACCEL) {
+        printf(" | SDL_RLEACCEL");
+    }
+    if (flags & SDL_RLEACCELOK) {
+        printf(" | SDL_RLEACCELOK");
+    }
 }
 
-int RunBlitTests(SDL_Surface *screen, SDL_Surface *bmp, int blitcount)
+int
+RunBlitTests(SDL_Surface * screen, SDL_Surface * bmp, int blitcount)
 {
-	int i, j;
-	int maxx;
-	int maxy;
-	SDL_Rect dst;
+    int i, j;
+    int maxx;
+    int maxy;
+    SDL_Rect dst;
 
-	maxx = (int)screen->w - bmp->w + 1;
-	maxy = (int)screen->h - bmp->h + 1;
-	for ( i = 0; i < NUM_UPDATES; ++i ) {
-		for ( j = 0; j < blitcount; ++j ) {
-			if ( maxx ) {
-				dst.x = rand() % maxx;
-			} else {
-				dst.x = 0;
-			}
-			if ( maxy ) {
-				dst.y = rand() % maxy;
-			} else {
-				dst.y = 0;
-			}
-			dst.w = bmp->w;
-			dst.h = bmp->h;
-			SDL_BlitSurface(bmp, NULL, screen, &dst);
-		}
-		SDL_Flip(screen);
-	}
+    maxx = (int) screen->w - bmp->w + 1;
+    maxy = (int) screen->h - bmp->h + 1;
+    for (i = 0; i < NUM_UPDATES; ++i) {
+        for (j = 0; j < blitcount; ++j) {
+            if (maxx) {
+                dst.x = rand() % maxx;
+            } else {
+                dst.x = 0;
+            }
+            if (maxy) {
+                dst.y = rand() % maxy;
+            } else {
+                dst.y = 0;
+            }
+            dst.w = bmp->w;
+            dst.h = bmp->h;
+            SDL_BlitSurface(bmp, NULL, screen, &dst);
+        }
+        SDL_Flip(screen);
+    }
 
-	return i;
+    return i;
 }
 
-int RunModeTests(SDL_Surface *screen)
+int
+RunModeTests(SDL_Surface * screen)
 {
-	Uint32 then, now;
-	Uint32 frames;
-	float seconds;
-	int i;
-	Uint8 r, g, b;
-	SDL_Surface *bmp, *bmpcc, *tmp;
-	SDL_Event event;
+    Uint32 then, now;
+    Uint32 frames;
+    float seconds;
+    int i;
+    Uint8 r, g, b;
+    SDL_Surface *bmp, *bmpcc, *tmp;
+    SDL_Event event;
 
-	while ( SDL_PollEvent(&event) ) {
-		if ( event.type == SDL_KEYDOWN )
-			return 0;
-	}
+    while (SDL_PollEvent(&event)) {
+        if (event.type == SDL_KEYDOWN)
+            return 0;
+    }
 
-	/* First test fills and screen update speed */
-	printf("Running color fill and fullscreen update test\n");
-	then = SDL_GetTicks();
-	frames = 0;
-	for ( i = 0; i < 256; ++i ) {
-		r = i;
-		g = 0;
-		b = 0;
-		SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, r, g, b));
-		SDL_Flip(screen);
-		++frames;
-	}
-	for ( i = 0; i < 256; ++i ) {
-		r = 0;
-		g = i;
-		b = 0;
-		SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, r, g, b));
-		SDL_Flip(screen);
-		++frames;
-	}
-	for ( i = 0; i < 256; ++i ) {
-		r = 0;
-		g = 0;
-		b = i;
-		SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, r, g, b));
-		SDL_Flip(screen);
-		++frames;
-	}
-	now = SDL_GetTicks();
-	seconds = (float)(now - then) / 1000.0f;
-	if ( seconds > 0.0f ) {
-		printf("%d fills and flips in %2.2f seconds, %2.2f FPS\n", frames, seconds, (float)frames / seconds);
-	} else {
-		printf("%d fills and flips in zero seconds!n", frames);
-	}
+    /* First test fills and screen update speed */
+    printf("Running color fill and fullscreen update test\n");
+    then = SDL_GetTicks();
+    frames = 0;
+    for (i = 0; i < 256; ++i) {
+        r = i;
+        g = 0;
+        b = 0;
+        SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, r, g, b));
+        SDL_Flip(screen);
+        ++frames;
+    }
+    for (i = 0; i < 256; ++i) {
+        r = 0;
+        g = i;
+        b = 0;
+        SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, r, g, b));
+        SDL_Flip(screen);
+        ++frames;
+    }
+    for (i = 0; i < 256; ++i) {
+        r = 0;
+        g = 0;
+        b = i;
+        SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, r, g, b));
+        SDL_Flip(screen);
+        ++frames;
+    }
+    now = SDL_GetTicks();
+    seconds = (float) (now - then) / 1000.0f;
+    if (seconds > 0.0f) {
+        printf("%d fills and flips in %2.2f seconds, %2.2f FPS\n", frames,
+               seconds, (float) frames / seconds);
+    } else {
+        printf("%d fills and flips in zero seconds!n", frames);
+    }
 
-        /* clear the screen after fill test */
-        SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 0, 0));
-	SDL_Flip(screen);
+    /* clear the screen after fill test */
+    SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 0, 0));
+    SDL_Flip(screen);
 
-	while ( SDL_PollEvent(&event) ) {
-		if ( event.type == SDL_KEYDOWN )
-			return 0;
-	}
+    while (SDL_PollEvent(&event)) {
+        if (event.type == SDL_KEYDOWN)
+            return 0;
+    }
 
-        /* run the generic blit test */
-	bmp = SDL_LoadBMP("sample.bmp");
-	if ( ! bmp ) {
-		printf("Couldn't load sample.bmp: %s\n", SDL_GetError());
-		return 0;
-	}
-	printf("Running freshly loaded blit test: %dx%d at %d bpp, flags: ",
-		bmp->w, bmp->h, bmp->format->BitsPerPixel);
-	PrintFlags(bmp->flags);
-	printf("\n");
-	then = SDL_GetTicks();
-	frames = RunBlitTests(screen, bmp, NUM_BLITS);
-	now = SDL_GetTicks();
-	seconds = (float)(now - then) / 1000.0f;
-	if ( seconds > 0.0f ) {
-		printf("%d blits / %d updates in %2.2f seconds, %2.2f FPS\n", NUM_BLITS*frames, frames, seconds, (float)frames / seconds);
-	} else {
-		printf("%d blits / %d updates in zero seconds!\n", NUM_BLITS*frames, frames);
-	}
+    /* run the generic blit test */
+    bmp = SDL_LoadBMP("sample.bmp");
+    if (!bmp) {
+        printf("Couldn't load sample.bmp: %s\n", SDL_GetError());
+        return 0;
+    }
+    printf("Running freshly loaded blit test: %dx%d at %d bpp, flags: ",
+           bmp->w, bmp->h, bmp->format->BitsPerPixel);
+    PrintFlags(bmp->flags);
+    printf("\n");
+    then = SDL_GetTicks();
+    frames = RunBlitTests(screen, bmp, NUM_BLITS);
+    now = SDL_GetTicks();
+    seconds = (float) (now - then) / 1000.0f;
+    if (seconds > 0.0f) {
+        printf("%d blits / %d updates in %2.2f seconds, %2.2f FPS\n",
+               NUM_BLITS * frames, frames, seconds, (float) frames / seconds);
+    } else {
+        printf("%d blits / %d updates in zero seconds!\n",
+               NUM_BLITS * frames, frames);
+    }
 
-        /* clear the screen after blit test */
-        SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 0, 0));
-	SDL_Flip(screen);
+    /* clear the screen after blit test */
+    SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 0, 0));
+    SDL_Flip(screen);
 
-	while ( SDL_PollEvent(&event) ) {
-		if ( event.type == SDL_KEYDOWN )
-			return 0;
-	}
+    while (SDL_PollEvent(&event)) {
+        if (event.type == SDL_KEYDOWN)
+            return 0;
+    }
 
-        /* run the colorkeyed blit test */
-	bmpcc = SDL_LoadBMP("sample.bmp");
-	if ( ! bmpcc ) {
-		printf("Couldn't load sample.bmp: %s\n", SDL_GetError());
-		return 0;
-	}
-	printf("Running freshly loaded cc blit test: %dx%d at %d bpp, flags: ",
-		bmpcc->w, bmpcc->h, bmpcc->format->BitsPerPixel);
-        SDL_SetColorKey(bmpcc, SDL_SRCCOLORKEY | SDL_RLEACCEL, *(Uint8 *)bmpcc->pixels);
+    /* run the colorkeyed blit test */
+    bmpcc = SDL_LoadBMP("sample.bmp");
+    if (!bmpcc) {
+        printf("Couldn't load sample.bmp: %s\n", SDL_GetError());
+        return 0;
+    }
+    printf("Running freshly loaded cc blit test: %dx%d at %d bpp, flags: ",
+           bmpcc->w, bmpcc->h, bmpcc->format->BitsPerPixel);
+    SDL_SetColorKey(bmpcc, SDL_SRCCOLORKEY | SDL_RLEACCEL,
+                    *(Uint8 *) bmpcc->pixels);
 
-	PrintFlags(bmpcc->flags);
-	printf("\n");
-	then = SDL_GetTicks();
-	frames = RunBlitTests(screen, bmpcc, NUM_BLITS);
-	now = SDL_GetTicks();
-	seconds = (float)(now - then) / 1000.0f;
-	if ( seconds > 0.0f ) {
-		printf("%d cc blits / %d updates in %2.2f seconds, %2.2f FPS\n", NUM_BLITS*frames, frames, seconds, (float)frames / seconds);
-	} else {
-		printf("%d cc blits / %d updates in zero seconds!\n", NUM_BLITS*frames, frames);
-	}
+    PrintFlags(bmpcc->flags);
+    printf("\n");
+    then = SDL_GetTicks();
+    frames = RunBlitTests(screen, bmpcc, NUM_BLITS);
+    now = SDL_GetTicks();
+    seconds = (float) (now - then) / 1000.0f;
+    if (seconds > 0.0f) {
+        printf("%d cc blits / %d updates in %2.2f seconds, %2.2f FPS\n",
+               NUM_BLITS * frames, frames, seconds, (float) frames / seconds);
+    } else {
+        printf("%d cc blits / %d updates in zero seconds!\n",
+               NUM_BLITS * frames, frames);
+    }
 
-        /* clear the screen after cc blit test */
-        SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 0, 0));
-	SDL_Flip(screen);
+    /* clear the screen after cc blit test */
+    SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 0, 0));
+    SDL_Flip(screen);
 
-	while ( SDL_PollEvent(&event) ) {
-		if ( event.type == SDL_KEYDOWN )
-			return 0;
-	}
+    while (SDL_PollEvent(&event)) {
+        if (event.type == SDL_KEYDOWN)
+            return 0;
+    }
 
-        /* run the generic blit test */
-	tmp = bmp;
-	bmp = SDL_DisplayFormat(bmp);
-	SDL_FreeSurface(tmp);
-	if ( ! bmp ) {
-		printf("Couldn't convert sample.bmp: %s\n", SDL_GetError());
-		return 0;
-	}
-	printf("Running display format blit test: %dx%d at %d bpp, flags: ",
-		bmp->w, bmp->h, bmp->format->BitsPerPixel);
-	PrintFlags(bmp->flags);
-	printf("\n");
-	then = SDL_GetTicks();
-	frames = RunBlitTests(screen, bmp, NUM_BLITS);
-	now = SDL_GetTicks();
-	seconds = (float)(now - then) / 1000.0f;
-	if ( seconds > 0.0f ) {
-		printf("%d blits / %d updates in %2.2f seconds, %2.2f FPS\n", NUM_BLITS*frames, frames, seconds, (float)frames / seconds);
-	} else {
-		printf("%d blits / %d updates in zero seconds!\n", NUM_BLITS*frames, frames);
-	}
+    /* run the generic blit test */
+    tmp = bmp;
+    bmp = SDL_DisplayFormat(bmp);
+    SDL_FreeSurface(tmp);
+    if (!bmp) {
+        printf("Couldn't convert sample.bmp: %s\n", SDL_GetError());
+        return 0;
+    }
+    printf("Running display format blit test: %dx%d at %d bpp, flags: ",
+           bmp->w, bmp->h, bmp->format->BitsPerPixel);
+    PrintFlags(bmp->flags);
+    printf("\n");
+    then = SDL_GetTicks();
+    frames = RunBlitTests(screen, bmp, NUM_BLITS);
+    now = SDL_GetTicks();
+    seconds = (float) (now - then) / 1000.0f;
+    if (seconds > 0.0f) {
+        printf("%d blits / %d updates in %2.2f seconds, %2.2f FPS\n",
+               NUM_BLITS * frames, frames, seconds, (float) frames / seconds);
+    } else {
+        printf("%d blits / %d updates in zero seconds!\n",
+               NUM_BLITS * frames, frames);
+    }
 
-        /* clear the screen after blit test */
-        SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 0, 0));
-	SDL_Flip(screen);
+    /* clear the screen after blit test */
+    SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 0, 0));
+    SDL_Flip(screen);
 
-	while ( SDL_PollEvent(&event) ) {
-		if ( event.type == SDL_KEYDOWN )
-			return 0;
-	}
+    while (SDL_PollEvent(&event)) {
+        if (event.type == SDL_KEYDOWN)
+            return 0;
+    }
 
-        /* run the colorkeyed blit test */
-	tmp = bmpcc;
-	bmpcc = SDL_DisplayFormat(bmpcc);
-	SDL_FreeSurface(tmp);
-	if ( ! bmpcc ) {
-		printf("Couldn't convert sample.bmp: %s\n", SDL_GetError());
-		return 0;
-	}
-	printf("Running display format cc blit test: %dx%d at %d bpp, flags: ",
-		bmpcc->w, bmpcc->h, bmpcc->format->BitsPerPixel);
-	PrintFlags(bmpcc->flags);
-	printf("\n");
-	then = SDL_GetTicks();
-	frames = RunBlitTests(screen, bmpcc, NUM_BLITS);
-	now = SDL_GetTicks();
-	seconds = (float)(now - then) / 1000.0f;
-	if ( seconds > 0.0f ) {
-		printf("%d cc blits / %d updates in %2.2f seconds, %2.2f FPS\n", NUM_BLITS*frames, frames, seconds, (float)frames / seconds);
-	} else {
-		printf("%d cc blits / %d updates in zero seconds!\n", NUM_BLITS*frames, frames);
-	}
+    /* run the colorkeyed blit test */
+    tmp = bmpcc;
+    bmpcc = SDL_DisplayFormat(bmpcc);
+    SDL_FreeSurface(tmp);
+    if (!bmpcc) {
+        printf("Couldn't convert sample.bmp: %s\n", SDL_GetError());
+        return 0;
+    }
+    printf("Running display format cc blit test: %dx%d at %d bpp, flags: ",
+           bmpcc->w, bmpcc->h, bmpcc->format->BitsPerPixel);
+    PrintFlags(bmpcc->flags);
+    printf("\n");
+    then = SDL_GetTicks();
+    frames = RunBlitTests(screen, bmpcc, NUM_BLITS);
+    now = SDL_GetTicks();
+    seconds = (float) (now - then) / 1000.0f;
+    if (seconds > 0.0f) {
+        printf("%d cc blits / %d updates in %2.2f seconds, %2.2f FPS\n",
+               NUM_BLITS * frames, frames, seconds, (float) frames / seconds);
+    } else {
+        printf("%d cc blits / %d updates in zero seconds!\n",
+               NUM_BLITS * frames, frames);
+    }
 
-        /* clear the screen after cc blit test */
-        SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 0, 0));
-	SDL_Flip(screen);
+    /* clear the screen after cc blit test */
+    SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 0, 0));
+    SDL_Flip(screen);
 
-	while ( SDL_PollEvent(&event) ) {
-		if ( event.type == SDL_KEYDOWN )
-			return 0;
-	}
+    while (SDL_PollEvent(&event)) {
+        if (event.type == SDL_KEYDOWN)
+            return 0;
+    }
 
-        /* run the alpha blit test only if screen bpp>8 */
-        if (bmp->format->BitsPerPixel>8)
-        {
-		SDL_FreeSurface(bmp);
-                bmp = SDL_LoadBMP("sample.bmp");
-		SDL_SetAlpha(bmp, SDL_SRCALPHA, 85); /* 85 - 33% alpha */
-		tmp = bmp;
-		bmp = SDL_DisplayFormat(bmp);
-		SDL_FreeSurface(tmp);
-		if ( ! bmp ) {
-			printf("Couldn't convert sample.bmp: %s\n", SDL_GetError());
-			return 0;
-		}
-		printf("Running display format alpha blit test: %dx%d at %d bpp, flags: ",
-			bmp->w, bmp->h, bmp->format->BitsPerPixel);
-		PrintFlags(bmp->flags);
-		printf("\n");
-		then = SDL_GetTicks();
-		frames = RunBlitTests(screen, bmp, NUM_BLITS);
-		now = SDL_GetTicks();
-		seconds = (float)(now - then) / 1000.0f;
-		if ( seconds > 0.0f ) {
-			printf("%d alpha blits / %d updates in %2.2f seconds, %2.2f FPS\n", NUM_BLITS*frames, frames, seconds, (float)frames / seconds);
-		} else {
-			printf("%d alpha blits / %d updates in zero seconds!\n", NUM_BLITS*frames, frames);
-		}
-	}
+    /* run the alpha blit test only if screen bpp>8 */
+    if (bmp->format->BitsPerPixel > 8) {
+        SDL_FreeSurface(bmp);
+        bmp = SDL_LoadBMP("sample.bmp");
+        SDL_SetAlpha(bmp, SDL_SRCALPHA, 85);    /* 85 - 33% alpha */
+        tmp = bmp;
+        bmp = SDL_DisplayFormat(bmp);
+        SDL_FreeSurface(tmp);
+        if (!bmp) {
+            printf("Couldn't convert sample.bmp: %s\n", SDL_GetError());
+            return 0;
+        }
+        printf
+            ("Running display format alpha blit test: %dx%d at %d bpp, flags: ",
+             bmp->w, bmp->h, bmp->format->BitsPerPixel);
+        PrintFlags(bmp->flags);
+        printf("\n");
+        then = SDL_GetTicks();
+        frames = RunBlitTests(screen, bmp, NUM_BLITS);
+        now = SDL_GetTicks();
+        seconds = (float) (now - then) / 1000.0f;
+        if (seconds > 0.0f) {
+            printf
+                ("%d alpha blits / %d updates in %2.2f seconds, %2.2f FPS\n",
+                 NUM_BLITS * frames, frames, seconds,
+                 (float) frames / seconds);
+        } else {
+            printf("%d alpha blits / %d updates in zero seconds!\n",
+                   NUM_BLITS * frames, frames);
+        }
+    }
 
-        /* clear the screen after alpha blit test */
-        SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 0, 0));
-	SDL_Flip(screen);
+    /* clear the screen after alpha blit test */
+    SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 0, 0));
+    SDL_Flip(screen);
 
-	while ( SDL_PollEvent(&event) ) {
-		if ( event.type == SDL_KEYDOWN )
-			return 0;
-	}
+    while (SDL_PollEvent(&event)) {
+        if (event.type == SDL_KEYDOWN)
+            return 0;
+    }
 
-        /* run the cc+alpha blit test only if screen bpp>8 */
-        if (bmp->format->BitsPerPixel>8)
-        {
-		SDL_FreeSurface(bmpcc);
-                bmpcc = SDL_LoadBMP("sample.bmp");
-		SDL_SetAlpha(bmpcc, SDL_SRCALPHA, 85); /* 85 - 33% alpha */
-                SDL_SetColorKey(bmpcc, SDL_SRCCOLORKEY | SDL_RLEACCEL, *(Uint8 *)bmpcc->pixels);
-		tmp = bmpcc;
-		bmpcc = SDL_DisplayFormat(bmpcc);
-		SDL_FreeSurface(tmp);
-		if ( ! bmpcc ) {
-			printf("Couldn't convert sample.bmp: %s\n", SDL_GetError());
-			return 0;
-		}
-		printf("Running display format cc+alpha blit test: %dx%d at %d bpp, flags: ",
-			bmpcc->w, bmpcc->h, bmpcc->format->BitsPerPixel);
-		PrintFlags(bmpcc->flags);
-		printf("\n");
-		then = SDL_GetTicks();
-		frames = RunBlitTests(screen, bmpcc, NUM_BLITS);
-		now = SDL_GetTicks();
-		seconds = (float)(now - then) / 1000.0f;
-		if ( seconds > 0.0f ) {
-			printf("%d cc+alpha blits / %d updates in %2.2f seconds, %2.2f FPS\n", NUM_BLITS*frames, frames, seconds, (float)frames / seconds);
-		} else {
-			printf("%d cc+alpha blits / %d updates in zero seconds!\n", NUM_BLITS*frames, frames);
-		}
-	}
+    /* run the cc+alpha blit test only if screen bpp>8 */
+    if (bmp->format->BitsPerPixel > 8) {
+        SDL_FreeSurface(bmpcc);
+        bmpcc = SDL_LoadBMP("sample.bmp");
+        SDL_SetAlpha(bmpcc, SDL_SRCALPHA, 85);  /* 85 - 33% alpha */
+        SDL_SetColorKey(bmpcc, SDL_SRCCOLORKEY | SDL_RLEACCEL,
+                        *(Uint8 *) bmpcc->pixels);
+        tmp = bmpcc;
+        bmpcc = SDL_DisplayFormat(bmpcc);
+        SDL_FreeSurface(tmp);
+        if (!bmpcc) {
+            printf("Couldn't convert sample.bmp: %s\n", SDL_GetError());
+            return 0;
+        }
+        printf
+            ("Running display format cc+alpha blit test: %dx%d at %d bpp, flags: ",
+             bmpcc->w, bmpcc->h, bmpcc->format->BitsPerPixel);
+        PrintFlags(bmpcc->flags);
+        printf("\n");
+        then = SDL_GetTicks();
+        frames = RunBlitTests(screen, bmpcc, NUM_BLITS);
+        now = SDL_GetTicks();
+        seconds = (float) (now - then) / 1000.0f;
+        if (seconds > 0.0f) {
+            printf
+                ("%d cc+alpha blits / %d updates in %2.2f seconds, %2.2f FPS\n",
+                 NUM_BLITS * frames, frames, seconds,
+                 (float) frames / seconds);
+        } else {
+            printf("%d cc+alpha blits / %d updates in zero seconds!\n",
+                   NUM_BLITS * frames, frames);
+        }
+    }
 
-	SDL_FreeSurface(bmpcc);
-	SDL_FreeSurface(bmp);
+    SDL_FreeSurface(bmpcc);
+    SDL_FreeSurface(bmp);
 
-	while ( SDL_PollEvent(&event) ) {
-		if ( event.type == SDL_KEYDOWN )
-			return 0;
-	}
-	return 1;
+    while (SDL_PollEvent(&event)) {
+        if (event.type == SDL_KEYDOWN)
+            return 0;
+    }
+    return 1;
 }
 
-void RunVideoTests()
+void
+RunVideoTests()
 {
-	static const struct {
-		int w, h, bpp;
-	} mode_list[] = {
-		{ 640, 480, 8 }, { 640, 480, 16 }, { 640, 480, 32 },
-		{ 800, 600, 8 }, { 800, 600, 16 }, { 800, 600, 32 },
-		{ 1024, 768, 8 }, { 1024, 768, 16 }, { 1024, 768, 32 }
-	};
-	static const Uint32 flags[] = {
-		(SDL_SWSURFACE),
-		(SDL_SWSURFACE | SDL_FULLSCREEN),
-		(SDL_HWSURFACE | SDL_FULLSCREEN),
-		(SDL_HWSURFACE | SDL_FULLSCREEN | SDL_DOUBLEBUF)
-	};
-	int i, j;
-	SDL_Surface *screen;
+    static const struct
+    {
+        int w, h, bpp;
+    } mode_list[] = {
+        {
+        640, 480, 8}, {
+        640, 480, 16}, {
+        640, 480, 32}, {
+        800, 600, 8}, {
+        800, 600, 16}, {
+        800, 600, 32}, {
+        1024, 768, 8}, {
+        1024, 768, 16}, {
+        1024, 768, 32}
+    };
+    static const Uint32 flags[] = {
+        (SDL_SWSURFACE),
+        (SDL_SWSURFACE | SDL_FULLSCREEN),
+        (SDL_HWSURFACE | SDL_FULLSCREEN),
+        (SDL_HWSURFACE | SDL_FULLSCREEN | SDL_DOUBLEBUF)
+    };
+    int i, j;
+    SDL_Surface *screen;
 
-	/* Test out several different video mode combinations */
-	SDL_WM_SetCaption("SDL Video Benchmark", "vidtest");
-	SDL_ShowCursor(0);
-	for ( i = 0; i < SDL_TABLESIZE(mode_list); ++i ) {
-		for ( j = 0; j < SDL_TABLESIZE(flags); ++j ) {
-			printf("===================================\n");
-			printf("Setting video mode: %dx%d at %d bpp, flags: ",
-			                          mode_list[i].w,
-			                          mode_list[i].h,
-			                          mode_list[i].bpp);
-			PrintFlags(flags[j]);
-			printf("\n");
-			screen = SDL_SetVideoMode(mode_list[i].w,
-			                          mode_list[i].h,
-			                          mode_list[i].bpp,
-			                          flags[j]);
-			if ( ! screen ) {
-				printf("Setting video mode failed: %s\n", SDL_GetError());
-				continue;
-			}
-			if ( (screen->flags & FLAG_MASK) != flags[j] ) {
-				printf("Flags didn't match: ");
-				PrintFlags(screen->flags);
-				printf("\n");
-				continue;
-			}
-			if ( ! RunModeTests(screen) ) {
-				return;
-			}
-		}
-	}
+    /* Test out several different video mode combinations */
+    SDL_WM_SetCaption("SDL Video Benchmark", "vidtest");
+    SDL_ShowCursor(0);
+    for (i = 0; i < SDL_TABLESIZE(mode_list); ++i) {
+        for (j = 0; j < SDL_TABLESIZE(flags); ++j) {
+            printf("===================================\n");
+            printf("Setting video mode: %dx%d at %d bpp, flags: ",
+                   mode_list[i].w, mode_list[i].h, mode_list[i].bpp);
+            PrintFlags(flags[j]);
+            printf("\n");
+            screen = SDL_SetVideoMode(mode_list[i].w,
+                                      mode_list[i].h,
+                                      mode_list[i].bpp, flags[j]);
+            if (!screen) {
+                printf("Setting video mode failed: %s\n", SDL_GetError());
+                continue;
+            }
+            if ((screen->flags & FLAG_MASK) != flags[j]) {
+                printf("Flags didn't match: ");
+                PrintFlags(screen->flags);
+                printf("\n");
+                continue;
+            }
+            if (!RunModeTests(screen)) {
+                return;
+            }
+        }
+    }
 }
+#endif
 
-int main(int argc, char *argv[])
+int
+main(int argc, char *argv[])
 {
-	const SDL_VideoInfo *info;
-	int i;
-	SDL_Rect **modes;
-	char driver[128];
+    const SDL_VideoInfo *info;
+    int i, d, n;
+    const char *driver;
+    const SDL_DisplayMode *mode;
+    int bpp;
+    Uint32 Rmask, Gmask, Bmask, Amask;
+    int nmodes;
+
+    /* Print available video drivers */
+    n = SDL_GetNumVideoDrivers();
+    if (n == 0) {
+        printf("No built-in video drivers\n");
+    } else {
+        printf("Built-in video drivers:");
+        for (i = 0; i < n; ++i) {
+            if (i > 0) {
+                printf(",");
+            }
+            printf(" %s", SDL_GetVideoDriver(i));
+        }
+        printf("\n");
+    }
 
-	if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) {
-		fprintf(stderr,
-			"Couldn't initialize SDL: %s\n", SDL_GetError());
-		exit(1);
-	}
-	if ( SDL_VideoDriverName(driver, sizeof(driver)) ) {
-		printf("Video driver: %s\n", driver);
-	}
-	info = SDL_GetVideoInfo();
-	printf(
-"Current display: %dx%d, %d bits-per-pixel\n",
-		info->current_w, info->current_h, info->vfmt->BitsPerPixel);
-	if ( info->vfmt->palette == NULL ) {
-		printf("	Red Mask = 0x%.8x\n", info->vfmt->Rmask);
-		printf("	Green Mask = 0x%.8x\n", info->vfmt->Gmask);
-		printf("	Blue Mask = 0x%.8x\n", info->vfmt->Bmask);
-	}
-	/* Print available fullscreen video modes */
-	modes = SDL_ListModes(NULL, SDL_FULLSCREEN);
-	if ( modes == (SDL_Rect **)0 ) {
-		printf("No available fullscreen video modes\n");
-	} else
-	if ( modes == (SDL_Rect **)-1 ) {
-		printf("No special fullscreen video modes\n");
-	} else {
-		printf("Fullscreen video modes:\n");
-		for ( i=0; modes[i]; ++i ) {
-			printf("\t%dx%dx%d\n", modes[i]->w, modes[i]->h, info->vfmt->BitsPerPixel);
-		}
-	}
-	if ( info->wm_available ) {
-		printf("A window manager is available\n");
-	}
-	if ( info->hw_available ) {
-		printf("Hardware surfaces are available (%dK video memory)\n",
-			info->video_mem);
-	}
-	if ( info->blit_hw ) {
-		printf(
-"Copy blits between hardware surfaces are accelerated\n");
-	}
-	if ( info->blit_hw_CC ) {
-		printf(
-"Colorkey blits between hardware surfaces are accelerated\n");
-	}
-	if ( info->blit_hw_A ) {
-		printf(
-"Alpha blits between hardware surfaces are accelerated\n");
-	}
-	if ( info->blit_sw ) {
-		printf(
-"Copy blits from software surfaces to hardware surfaces are accelerated\n");
-	}
-	if ( info->blit_sw_CC ) {
-		printf(
-"Colorkey blits from software surfaces to hardware surfaces are accelerated\n");
-	}
-	if ( info->blit_sw_A ) {
-		printf(
-"Alpha blits from software surfaces to hardware surfaces are accelerated\n");
-	}
-	if ( info->blit_fill ) {
-		printf(
-"Color fills on hardware surfaces are accelerated\n");
-	}
+    if (SDL_Init(SDL_INIT_VIDEO) < 0) {
+        fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError());
+        exit(1);
+    }
+    driver = SDL_GetCurrentVideoDriver();
+    if (driver) {
+        printf("Video driver: %s\n", driver);
+    }
+    printf("Number of displays: %d\n", SDL_GetNumVideoDisplays());
+    for (d = 0; d < SDL_GetNumVideoDisplays(); ++d) {
+        printf("Display %d:\n", d);
+        SDL_SelectVideoDisplay(d);
+
+        mode = SDL_GetDesktopDisplayMode();
+        SDL_PixelFormatEnumToMasks(mode->format, &bpp, &Rmask, &Gmask, &Bmask,
+                                   &Amask);
+        printf("  Current mode: %dx%d@%dHz, %d bits-per-pixel\n", mode->w,
+               mode->h, mode->refresh_rate, bpp);
+        if (Rmask || Gmask || Bmask) {
+            printf("      Red Mask = 0x%.8x\n", Rmask);
+            printf("      Green Mask = 0x%.8x\n", Gmask);
+            printf("      Blue Mask = 0x%.8x\n", Bmask);
+            if (Amask)
+                printf("      Alpha Mask = 0x%.8x\n", Amask);
+        }
 
-	if ( argv[1] && (strcmp(argv[1], "-benchmark") == 0) ) {
-		RunVideoTests();
-	}
+        /* Print available fullscreen video modes */
+        nmodes = SDL_GetNumDisplayModes();
+        if (nmodes == 0) {
+            printf("No available fullscreen video modes\n");
+        } else {
+            printf("  Fullscreen video modes:\n");
+            for (i = 0; i < nmodes; ++i) {
+                mode = SDL_GetDisplayMode(i);
+                SDL_PixelFormatEnumToMasks(mode->format, &bpp, &Rmask,
+                                           &Gmask, &Bmask, &Amask);
+                printf("    Mode %d: %dx%d@%dHz, %d bits-per-pixel\n", i,
+                       mode->w, mode->h, mode->refresh_rate, bpp);
+                if (Rmask || Gmask || Bmask) {
+                    printf("        Red Mask = 0x%.8x\n", Rmask);
+                    printf("        Green Mask = 0x%.8x\n", Gmask);
+                    printf("        Blue Mask = 0x%.8x\n", Bmask);
+                    if (Amask)
+                        printf("        Alpha Mask = 0x%.8x\n", Amask);
+                }
+            }
+        }
+    }
 
-	SDL_Quit();
-	return(0);
+    info = SDL_GetVideoInfo();
+    if (info->wm_available) {
+        printf("A window manager is available\n");
+    }
+    if (info->hw_available) {
+        printf("Hardware surfaces are available (%dK video memory)\n",
+               info->video_mem);
+    }
+    if (info->blit_hw) {
+        printf("Copy blits between hardware surfaces are accelerated\n");
+    }
+    if (info->blit_hw_CC) {
+        printf("Colorkey blits between hardware surfaces are accelerated\n");
+    }
+    if (info->blit_hw_A) {
+        printf("Alpha blits between hardware surfaces are accelerated\n");
+    }
+    if (info->blit_sw) {
+        printf
+            ("Copy blits from software surfaces to hardware surfaces are accelerated\n");
+    }
+    if (info->blit_sw_CC) {
+        printf
+            ("Colorkey blits from software surfaces to hardware surfaces are accelerated\n");
+    }
+    if (info->blit_sw_A) {
+        printf
+            ("Alpha blits from software surfaces to hardware surfaces are accelerated\n");
+    }
+    if (info->blit_fill) {
+        printf("Color fills on hardware surfaces are accelerated\n");
+    }
+#if 0
+    if (argv[1] && (strcmp(argv[1], "-benchmark") == 0)) {
+        RunVideoTests();
+    }
+#endif
+
+    SDL_Quit();
+    return (0);
 }