SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
--HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%401938
This commit is contained in:
parent
91a32b77a2
commit
0f030a1802
686 changed files with 117556 additions and 98661 deletions
|
@ -15,27 +15,30 @@ static SDL_Surface *src = NULL;
|
|||
static int testSeconds = 10;
|
||||
|
||||
|
||||
static int percent(int val, int total)
|
||||
static int
|
||||
percent(int val, int total)
|
||||
{
|
||||
return((int) ((((float) val) / ((float) total)) * 100.0f));
|
||||
return ((int) ((((float) val) / ((float) total)) * 100.0f));
|
||||
}
|
||||
|
||||
static int randRange(int lo, int hi)
|
||||
static int
|
||||
randRange(int lo, int hi)
|
||||
{
|
||||
return(lo + (int) (((double) hi)*rand()/(RAND_MAX+1.0)));
|
||||
return (lo + (int) (((double) hi) * rand() / (RAND_MAX + 1.0)));
|
||||
}
|
||||
|
||||
static void copy_trunc_str(char *str, size_t strsize, const char *flagstr)
|
||||
static void
|
||||
copy_trunc_str(char *str, size_t strsize, const char *flagstr)
|
||||
{
|
||||
if ( (strlen(str) + strlen(flagstr)) >= (strsize - 1) )
|
||||
if ((strlen(str) + strlen(flagstr)) >= (strsize - 1))
|
||||
strcpy(str + (strsize - 5), " ...");
|
||||
else
|
||||
strcat(str, flagstr);
|
||||
}
|
||||
|
||||
static void __append_sdl_surface_flag(SDL_Surface *_surface, char *str,
|
||||
size_t strsize, Uint32 flag,
|
||||
const char *flagstr)
|
||||
static void
|
||||
__append_sdl_surface_flag(SDL_Surface * _surface, char *str,
|
||||
size_t strsize, Uint32 flag, const char *flagstr)
|
||||
{
|
||||
if (_surface->flags & flag)
|
||||
copy_trunc_str(str, strsize, flagstr);
|
||||
|
@ -45,22 +48,28 @@ static void __append_sdl_surface_flag(SDL_Surface *_surface, char *str,
|
|||
#define append_sdl_surface_flag(a, b, c, fl) __append_sdl_surface_flag(a, b, c, fl, " " #fl)
|
||||
#define print_tf_state(str, val) printf("%s: {%s}\n", str, (val) ? "true" : "false" )
|
||||
|
||||
static void output_videoinfo_details(void)
|
||||
static void
|
||||
output_videoinfo_details(void)
|
||||
{
|
||||
const SDL_VideoInfo *info = SDL_GetVideoInfo();
|
||||
printf("SDL_GetVideoInfo():\n");
|
||||
if (info == NULL)
|
||||
printf(" (null.)\n");
|
||||
else
|
||||
{
|
||||
else {
|
||||
print_tf_state(" hardware surface available", info->hw_available);
|
||||
print_tf_state(" window manager available", info->wm_available);
|
||||
print_tf_state(" accelerated hardware->hardware blits", info->blit_hw);
|
||||
print_tf_state(" accelerated hardware->hardware colorkey blits", info->blit_hw_CC);
|
||||
print_tf_state(" accelerated hardware->hardware alpha blits", info->blit_hw_A);
|
||||
print_tf_state(" accelerated software->hardware blits", info->blit_sw);
|
||||
print_tf_state(" accelerated software->hardware colorkey blits", info->blit_sw_CC);
|
||||
print_tf_state(" accelerated software->hardware alpha blits", info->blit_sw_A);
|
||||
print_tf_state(" accelerated hardware->hardware blits",
|
||||
info->blit_hw);
|
||||
print_tf_state(" accelerated hardware->hardware colorkey blits",
|
||||
info->blit_hw_CC);
|
||||
print_tf_state(" accelerated hardware->hardware alpha blits",
|
||||
info->blit_hw_A);
|
||||
print_tf_state(" accelerated software->hardware blits",
|
||||
info->blit_sw);
|
||||
print_tf_state(" accelerated software->hardware colorkey blits",
|
||||
info->blit_sw_CC);
|
||||
print_tf_state(" accelerated software->hardware alpha blits",
|
||||
info->blit_sw_A);
|
||||
print_tf_state(" accelerated color fills", info->blit_fill);
|
||||
printf(" video memory: (%d)\n", info->video_mem);
|
||||
}
|
||||
|
@ -68,63 +77,58 @@ static void output_videoinfo_details(void)
|
|||
printf("\n");
|
||||
}
|
||||
|
||||
static void output_surface_details(const char *name, SDL_Surface *surface)
|
||||
static void
|
||||
output_surface_details(const char *name, SDL_Surface * surface)
|
||||
{
|
||||
printf("Details for %s:\n", name);
|
||||
|
||||
if (surface == NULL)
|
||||
{
|
||||
if (surface == NULL) {
|
||||
printf("-WARNING- You've got a NULL surface!");
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
char f[256];
|
||||
printf(" width : %d\n", surface->w);
|
||||
printf(" height : %d\n", surface->h);
|
||||
printf(" depth : %d bits per pixel\n", surface->format->BitsPerPixel);
|
||||
printf(" depth : %d bits per pixel\n",
|
||||
surface->format->BitsPerPixel);
|
||||
printf(" pitch : %d\n", (int) surface->pitch);
|
||||
printf(" alpha : %d\n", (int) surface->format->alpha);
|
||||
printf(" colorkey : 0x%X\n", (unsigned int) surface->format->colorkey);
|
||||
printf(" colorkey : 0x%X\n",
|
||||
(unsigned int) surface->format->colorkey);
|
||||
|
||||
printf(" red bits : 0x%08X mask, %d shift, %d loss\n",
|
||||
(int) surface->format->Rmask,
|
||||
(int) surface->format->Rshift,
|
||||
(int) surface->format->Rloss);
|
||||
(int) surface->format->Rmask,
|
||||
(int) surface->format->Rshift, (int) surface->format->Rloss);
|
||||
printf(" green bits : 0x%08X mask, %d shift, %d loss\n",
|
||||
(int) surface->format->Gmask,
|
||||
(int) surface->format->Gshift,
|
||||
(int) surface->format->Gloss);
|
||||
(int) surface->format->Gmask,
|
||||
(int) surface->format->Gshift, (int) surface->format->Gloss);
|
||||
printf(" blue bits : 0x%08X mask, %d shift, %d loss\n",
|
||||
(int) surface->format->Bmask,
|
||||
(int) surface->format->Bshift,
|
||||
(int) surface->format->Bloss);
|
||||
(int) surface->format->Bmask,
|
||||
(int) surface->format->Bshift, (int) surface->format->Bloss);
|
||||
printf(" alpha bits : 0x%08X mask, %d shift, %d loss\n",
|
||||
(int) surface->format->Amask,
|
||||
(int) surface->format->Ashift,
|
||||
(int) surface->format->Aloss);
|
||||
(int) surface->format->Amask,
|
||||
(int) surface->format->Ashift, (int) surface->format->Aloss);
|
||||
|
||||
f[0] = '\0';
|
||||
|
||||
/*append_sdl_surface_flag(surface, f, sizeof (f), SDL_SWSURFACE);*/
|
||||
/*append_sdl_surface_flag(surface, f, sizeof (f), SDL_SWSURFACE); */
|
||||
if ((surface->flags & SDL_HWSURFACE) == 0)
|
||||
copy_trunc_str(f, sizeof (f), " SDL_SWSURFACE");
|
||||
copy_trunc_str(f, sizeof(f), " SDL_SWSURFACE");
|
||||
|
||||
append_sdl_surface_flag(surface, f, sizeof (f), SDL_HWSURFACE);
|
||||
append_sdl_surface_flag(surface, f, sizeof (f), SDL_ASYNCBLIT);
|
||||
append_sdl_surface_flag(surface, f, sizeof (f), SDL_ANYFORMAT);
|
||||
append_sdl_surface_flag(surface, f, sizeof (f), SDL_HWPALETTE);
|
||||
append_sdl_surface_flag(surface, f, sizeof (f), SDL_DOUBLEBUF);
|
||||
append_sdl_surface_flag(surface, f, sizeof (f), SDL_FULLSCREEN);
|
||||
append_sdl_surface_flag(surface, f, sizeof (f), SDL_OPENGL);
|
||||
append_sdl_surface_flag(surface, f, sizeof (f), SDL_OPENGLBLIT);
|
||||
append_sdl_surface_flag(surface, f, sizeof (f), SDL_RESIZABLE);
|
||||
append_sdl_surface_flag(surface, f, sizeof (f), SDL_NOFRAME);
|
||||
append_sdl_surface_flag(surface, f, sizeof (f), SDL_HWACCEL);
|
||||
append_sdl_surface_flag(surface, f, sizeof (f), SDL_SRCCOLORKEY);
|
||||
append_sdl_surface_flag(surface, f, sizeof (f), SDL_RLEACCELOK);
|
||||
append_sdl_surface_flag(surface, f, sizeof (f), SDL_RLEACCEL);
|
||||
append_sdl_surface_flag(surface, f, sizeof (f), SDL_SRCALPHA);
|
||||
append_sdl_surface_flag(surface, f, sizeof (f), SDL_PREALLOC);
|
||||
append_sdl_surface_flag(surface, f, sizeof(f), SDL_HWSURFACE);
|
||||
append_sdl_surface_flag(surface, f, sizeof(f), SDL_ASYNCBLIT);
|
||||
append_sdl_surface_flag(surface, f, sizeof(f), SDL_ANYFORMAT);
|
||||
append_sdl_surface_flag(surface, f, sizeof(f), SDL_HWPALETTE);
|
||||
append_sdl_surface_flag(surface, f, sizeof(f), SDL_DOUBLEBUF);
|
||||
append_sdl_surface_flag(surface, f, sizeof(f), SDL_FULLSCREEN);
|
||||
append_sdl_surface_flag(surface, f, sizeof(f), SDL_OPENGL);
|
||||
append_sdl_surface_flag(surface, f, sizeof(f), SDL_RESIZABLE);
|
||||
append_sdl_surface_flag(surface, f, sizeof(f), SDL_NOFRAME);
|
||||
append_sdl_surface_flag(surface, f, sizeof(f), SDL_HWACCEL);
|
||||
append_sdl_surface_flag(surface, f, sizeof(f), SDL_SRCCOLORKEY);
|
||||
append_sdl_surface_flag(surface, f, sizeof(f), SDL_RLEACCELOK);
|
||||
append_sdl_surface_flag(surface, f, sizeof(f), SDL_RLEACCEL);
|
||||
append_sdl_surface_flag(surface, f, sizeof(f), SDL_SRCALPHA);
|
||||
append_sdl_surface_flag(surface, f, sizeof(f), SDL_PREALLOC);
|
||||
|
||||
if (f[0] == '\0')
|
||||
strcpy(f, " (none)");
|
||||
|
@ -135,14 +139,16 @@ static void output_surface_details(const char *name, SDL_Surface *surface)
|
|||
printf("\n");
|
||||
}
|
||||
|
||||
static void output_details(void)
|
||||
static void
|
||||
output_details(void)
|
||||
{
|
||||
output_videoinfo_details();
|
||||
output_surface_details("Source Surface", src);
|
||||
output_surface_details("Destination Surface", dest);
|
||||
}
|
||||
|
||||
static Uint32 blit(SDL_Surface *dst, SDL_Surface *src, int x, int y)
|
||||
static Uint32
|
||||
blit(SDL_Surface * dst, SDL_Surface * src, int x, int y)
|
||||
{
|
||||
Uint32 start = 0;
|
||||
SDL_Rect srcRect;
|
||||
|
@ -152,39 +158,41 @@ static Uint32 blit(SDL_Surface *dst, SDL_Surface *src, int x, int y)
|
|||
srcRect.y = 0;
|
||||
dstRect.x = x;
|
||||
dstRect.y = y;
|
||||
dstRect.w = srcRect.w = src->w; /* SDL will clip as appropriate. */
|
||||
dstRect.w = srcRect.w = src->w; /* SDL will clip as appropriate. */
|
||||
dstRect.h = srcRect.h = src->h;
|
||||
|
||||
start = SDL_GetTicks();
|
||||
SDL_BlitSurface(src, &srcRect, dst, &dstRect);
|
||||
return(SDL_GetTicks() - start);
|
||||
return (SDL_GetTicks() - start);
|
||||
}
|
||||
|
||||
static void blitCentered(SDL_Surface *dst, SDL_Surface *src)
|
||||
static void
|
||||
blitCentered(SDL_Surface * dst, SDL_Surface * src)
|
||||
{
|
||||
int x = (dst->w - src->w) / 2;
|
||||
int y = (dst->h - src->h) / 2;
|
||||
blit(dst, src, x, y);
|
||||
}
|
||||
|
||||
static int atoi_hex(const char *str)
|
||||
static int
|
||||
atoi_hex(const char *str)
|
||||
{
|
||||
if (str == NULL)
|
||||
return 0;
|
||||
|
||||
if (strlen(str) > 2)
|
||||
{
|
||||
if (strlen(str) > 2) {
|
||||
int retval = 0;
|
||||
if ((str[0] == '0') && (str[1] == 'x'))
|
||||
sscanf(str + 2, "%X", &retval);
|
||||
return(retval);
|
||||
return (retval);
|
||||
}
|
||||
|
||||
return(atoi(str));
|
||||
return (atoi(str));
|
||||
}
|
||||
|
||||
|
||||
static int setup_test(int argc, char **argv)
|
||||
static int
|
||||
setup_test(int argc, char **argv)
|
||||
{
|
||||
const char *dumpfile = NULL;
|
||||
SDL_Surface *bmp = NULL;
|
||||
|
@ -213,8 +221,7 @@ static int setup_test(int argc, char **argv)
|
|||
int screenSurface = 0;
|
||||
int i = 0;
|
||||
|
||||
for (i = 1; i < argc; i++)
|
||||
{
|
||||
for (i = 1; i < argc; i++) {
|
||||
const char *arg = argv[i];
|
||||
|
||||
if (strcmp(arg, "--dstbpp") == 0)
|
||||
|
@ -256,63 +263,59 @@ static int setup_test(int argc, char **argv)
|
|||
else if (strcmp(arg, "--dumpfile") == 0)
|
||||
dumpfile = argv[++i];
|
||||
/* !!! FIXME: set colorkey. */
|
||||
else if (0) /* !!! FIXME: we handle some commandlines elsewhere now */
|
||||
{
|
||||
else if (0) { /* !!! FIXME: we handle some commandlines elsewhere now */
|
||||
fprintf(stderr, "Unknown commandline option: %s\n", arg);
|
||||
return(0);
|
||||
return (0);
|
||||
}
|
||||
}
|
||||
|
||||
if (SDL_Init(SDL_INIT_VIDEO) == -1)
|
||||
{
|
||||
if (SDL_Init(SDL_INIT_VIDEO) == -1) {
|
||||
fprintf(stderr, "SDL_Init failed: %s\n", SDL_GetError());
|
||||
return(0);
|
||||
return (0);
|
||||
}
|
||||
|
||||
bmp = SDL_LoadBMP("sample.bmp");
|
||||
if (bmp == NULL)
|
||||
{
|
||||
if (bmp == NULL) {
|
||||
fprintf(stderr, "SDL_LoadBMP failed: %s\n", SDL_GetError());
|
||||
SDL_Quit();
|
||||
return(0);
|
||||
return (0);
|
||||
}
|
||||
|
||||
if ((dstflags & SDL_HWSURFACE) == 0) dstflags |= SDL_SWSURFACE;
|
||||
if ((srcflags & SDL_HWSURFACE) == 0) srcflags |= SDL_SWSURFACE;
|
||||
if ((dstflags & SDL_HWSURFACE) == 0)
|
||||
dstflags |= SDL_SWSURFACE;
|
||||
if ((srcflags & SDL_HWSURFACE) == 0)
|
||||
srcflags |= SDL_SWSURFACE;
|
||||
|
||||
if (screenSurface)
|
||||
dest = SDL_SetVideoMode(dstw, dsth, dstbpp, dstflags);
|
||||
else
|
||||
{
|
||||
else {
|
||||
dest = SDL_CreateRGBSurface(dstflags, dstw, dsth, dstbpp,
|
||||
dstrmask, dstgmask, dstbmask, dstamask);
|
||||
}
|
||||
|
||||
if (dest == NULL)
|
||||
{
|
||||
if (dest == NULL) {
|
||||
fprintf(stderr, "dest surface creation failed: %s\n", SDL_GetError());
|
||||
SDL_Quit();
|
||||
return(0);
|
||||
return (0);
|
||||
}
|
||||
|
||||
src = SDL_CreateRGBSurface(srcflags, srcw, srch, srcbpp,
|
||||
srcrmask, srcgmask, srcbmask, srcamask);
|
||||
if (src == NULL)
|
||||
{
|
||||
if (src == NULL) {
|
||||
fprintf(stderr, "src surface creation failed: %s\n", SDL_GetError());
|
||||
SDL_Quit();
|
||||
return(0);
|
||||
return (0);
|
||||
}
|
||||
|
||||
/* handle alpha settings... */
|
||||
srcalphaflags = (src->flags&SDL_SRCALPHA) | (src->flags&SDL_RLEACCEL);
|
||||
dstalphaflags = (dest->flags&SDL_SRCALPHA) | (dest->flags&SDL_RLEACCEL);
|
||||
srcalphaflags = (src->flags & SDL_SRCALPHA) | (src->flags & SDL_RLEACCEL);
|
||||
dstalphaflags =
|
||||
(dest->flags & SDL_SRCALPHA) | (dest->flags & SDL_RLEACCEL);
|
||||
origsrcalphaflags = srcalphaflags;
|
||||
origdstalphaflags = dstalphaflags;
|
||||
srcalpha = src->format->alpha;
|
||||
dstalpha = dest->format->alpha;
|
||||
for (i = 1; i < argc; i++)
|
||||
{
|
||||
for (i = 1; i < argc; i++) {
|
||||
const char *arg = argv[i];
|
||||
|
||||
if (strcmp(arg, "--srcalpha") == 0)
|
||||
|
@ -336,9 +339,11 @@ static int setup_test(int argc, char **argv)
|
|||
else if (strcmp(arg, "--dstnorleaccel") == 0)
|
||||
dstalphaflags &= ~SDL_RLEACCEL;
|
||||
}
|
||||
if ((dstalphaflags != origdstalphaflags) || (dstalpha != dest->format->alpha))
|
||||
if ((dstalphaflags != origdstalphaflags)
|
||||
|| (dstalpha != dest->format->alpha))
|
||||
SDL_SetAlpha(dest, dstalphaflags, (Uint8) dstalpha);
|
||||
if ((srcalphaflags != origsrcalphaflags) || (srcalpha != src->format->alpha))
|
||||
if ((srcalphaflags != origsrcalphaflags)
|
||||
|| (srcalpha != src->format->alpha))
|
||||
SDL_SetAlpha(src, srcalphaflags, (Uint8) srcalpha);
|
||||
|
||||
/* set some sane defaults so we can see if the blit code is broken... */
|
||||
|
@ -349,15 +354,16 @@ static int setup_test(int argc, char **argv)
|
|||
SDL_FreeSurface(bmp);
|
||||
|
||||
if (dumpfile)
|
||||
SDL_SaveBMP(src, dumpfile); /* make sure initial convert is sane. */
|
||||
SDL_SaveBMP(src, dumpfile); /* make sure initial convert is sane. */
|
||||
|
||||
output_details();
|
||||
|
||||
return(1);
|
||||
return (1);
|
||||
}
|
||||
|
||||
|
||||
static void test_blit_speed(void)
|
||||
static void
|
||||
test_blit_speed(void)
|
||||
{
|
||||
Uint32 clearColor = SDL_MapRGB(dest->format, 0, 0, 0);
|
||||
Uint32 iterations = 0;
|
||||
|
@ -376,45 +382,43 @@ static void test_blit_speed(void)
|
|||
now = SDL_GetTicks();
|
||||
end = now + testms;
|
||||
|
||||
do
|
||||
{
|
||||
do {
|
||||
/* pump the event queue occasionally to keep OS happy... */
|
||||
if (now - last > 1000)
|
||||
{
|
||||
if (now - last > 1000) {
|
||||
last = now;
|
||||
while (SDL_PollEvent(&event)) { /* no-op. */ }
|
||||
while (SDL_PollEvent(&event)) { /* no-op. */
|
||||
}
|
||||
}
|
||||
|
||||
iterations++;
|
||||
elasped += blit(dest, src, randRange(0, wmax), randRange(0, hmax));
|
||||
if (isScreen)
|
||||
{
|
||||
SDL_Flip(dest); /* show it! */
|
||||
SDL_FillRect(dest, NULL, clearColor); /* blank it for next time! */
|
||||
if (isScreen) {
|
||||
SDL_Flip(dest); /* show it! */
|
||||
SDL_FillRect(dest, NULL, clearColor); /* blank it for next time! */
|
||||
}
|
||||
|
||||
now = SDL_GetTicks();
|
||||
} while (now < end);
|
||||
}
|
||||
while (now < end);
|
||||
|
||||
printf("Non-blitting crap accounted for %d percent of this run.\n",
|
||||
percent(testms - elasped, testms));
|
||||
percent(testms - elasped, testms));
|
||||
|
||||
printf("%d blits took %d ms (%d fps).\n",
|
||||
(int) iterations,
|
||||
(int) elasped,
|
||||
(int) (((float)iterations) / (((float)elasped) / 1000.0f)));
|
||||
(int) iterations,
|
||||
(int) elasped,
|
||||
(int) (((float) iterations) / (((float) elasped) / 1000.0f)));
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
int initialized = setup_test(argc, argv);
|
||||
if (initialized)
|
||||
{
|
||||
if (initialized) {
|
||||
test_blit_speed();
|
||||
SDL_Quit();
|
||||
}
|
||||
return(!initialized);
|
||||
return (!initialized);
|
||||
}
|
||||
|
||||
/* end of testblitspeed.c ... */
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue