/* TestGfxPrimitives Test graphics primitive routines for accuracy (visual) and speed. Copyright (C) A. Schiffler, June 2001, GPL */ #include #include #include #include #include #include "SDL.h" #include "SDL/SDL_gfxPrimitives.h" #define WIDTH 640 #define HEIGHT 480 #define NUM_RANDOM 512 /* Coordinates */ static Sint16 rx1[NUM_RANDOM], rx2[NUM_RANDOM], ry1[NUM_RANDOM], ry2[NUM_RANDOM]; /* Radii and offsets */ static Sint16 rr1[NUM_RANDOM], rr2[NUM_RANDOM]; /* Start and stop angles */ static Sint16 a1[NUM_RANDOM], a2[NUM_RANDOM]; /* RGB colors and alpha */ static char rr[NUM_RANDOM], rg[NUM_RANDOM], rb[NUM_RANDOM], ra[NUM_RANDOM]; /* Generate an array of random screen coordinates and RGBA values with an offset */ void InitRandomPoints() { int i; float af; for (i=0; iformat, 0,0,0,0); } else { color=SDL_MapRGBA(screen->format, 0,0,0,0); } /* Clear the screen */ SetClipNoBorder (screen,0,0,WIDTH-1,HEIGHT-1); SDL_FillRect (screen, NULL, color); /* Draw the colored area */ stepx=1.0/(WIDTH/2); stepy=1.0/((HEIGHT-80)/2); fx=0.0; for (x=WIDTH/2; xvfmt->BitsPerPixel > 8 ) { video_bpp = info->vfmt->BitsPerPixel; } else { video_bpp = 16; } videoflags = SDL_SWSURFACE | SDL_SRCALPHA | SDL_RESIZABLE; while ( argc > 1 ) { --argc; if ( strcmp(argv[argc-1], "-bpp") == 0 ) { video_bpp = atoi(argv[argc]); --argc; } else if ( strcmp(argv[argc], "-hw") == 0 ) { videoflags |= SDL_HWSURFACE; } else if ( strcmp(argv[argc], "-warp") == 0 ) { videoflags |= SDL_HWPALETTE; } else if ( strcmp(argv[argc], "-fullscreen") == 0 ) { videoflags |= SDL_FULLSCREEN; } else { fprintf(stderr, "Usage: %s [-bpp N] [-warp] [-hw] [-fullscreen]\n", argv[0]); exit(1); } } /* Set 640x480 video mode */ if ( (screen=SDL_SetVideoMode(WIDTH,HEIGHT,video_bpp,videoflags)) == NULL ) { fprintf(stderr, "Couldn't set %ix%i video mode: %s\n",WIDTH,HEIGHT,SDL_GetError()); exit(2); } /* Use alpha blending */ SDL_SetAlpha(screen, SDL_SRCALPHA, 0); /* Set title for window */ SDL_WM_SetCaption(title,title); /* Wait for a keystroke */ done = 0; oldprim = 0; curprim = 1; while ( !done ) { /* Draw on screen if primitive changes */ if (curprim != oldprim) { ClearScreen(screen, "Titletext"); /* Draw according to curprim setting */ switch (curprim) { /* Pixels */ case 1: ClearScreen(screen, "Pixel"); TestPixel(screen); BenchmarkPixel(screen); /* Next primitive */ oldprim=curprim; break; /* Horizontal Lines */ case 2: ClearScreen(screen, "Hline"); TestHline(screen); BenchmarkHline(screen); /* Next primitive */ oldprim=curprim; break; /* Vertical Lines */ case 3: ClearScreen(screen, "Vline"); TestVline(screen); BenchmarkVline(screen); /* Next primitive */ oldprim=curprim; break; /* Rectangles */ case 4: ClearScreen(screen, "Rectangle"); TestRectangle(screen); BenchmarkRectangle(screen); /* Next primitive */ oldprim=curprim; break; /* --- Box */ case 5: ClearScreen(screen, "Box"); TestBox(screen); BenchmarkBox(screen); /* Next primitive */ oldprim=curprim; break; /* --- 2x2 Box */ case 6: ClearScreen(screen, "2x2 Box"); TestBoxTwo(screen); BenchmarkBoxTwo(screen); /* Next primitive */ oldprim=curprim; break; /* --- Lines */ case 7: ClearScreen(screen, "Line"); TestLine(screen); BenchmarkLine(screen); /* Next primitive */ oldprim=curprim; break; /* --- AA Line */ case 8: ClearScreen(screen, "Anti-Aliased Line"); TestAALine(screen); BenchmarkAALine(screen); /* Next primitive */ oldprim=curprim; break; /* --- Circle */ case 9: ClearScreen(screen, "Circle"); TestCircle(screen); BenchmarkCircle(screen); /* Next primitive */ oldprim=curprim; break; /* --- AA Circle */ case 10: ClearScreen(screen, "AA Circle"); TestAACircle(screen); BenchmarkAACircle(screen); /* Next primitive */ oldprim=curprim; break; /* --- Filled Circle */ case 11: ClearScreen(screen, "Filled Circle"); TestFilledCircle(screen); BenchmarkFilledCircle(screen); /* Next primitive */ oldprim=curprim; break; /* --- Ellipse */ case 12: ClearScreen(screen, "Ellipse"); TestEllipse(screen); BenchmarkEllipse(screen); /* Next primitive */ oldprim=curprim; break; /* --- AA Ellipse */ case 13: ClearScreen(screen, "AA Ellipse"); TestAAEllipse(screen); BenchmarkAAEllipse(screen); /* Next primitive */ oldprim=curprim; break; /* --- Filled Ellipse */ case 14: ClearScreen(screen, "Filled Ellipse"); TestFilledEllipse(screen); BenchmarkFilledEllipse(screen); /* Next primitive */ oldprim=curprim; break; /* --- Arc */ case 15: ClearScreen(screen, "Arc"); TestArc(screen); BenchmarkArc(screen); /* Next primitive */ oldprim=curprim; break; /* --- Pie */ case 16: ClearScreen(screen, "Pie"); TestPie(screen); BenchmarkPie(screen); /* Next primitive */ oldprim=curprim; break; /* --- Filled Pie */ case 17: ClearScreen(screen, "Filled Pie"); TestFilledPie(screen); BenchmarkFilledPie(screen); /* Next primitive */ oldprim=curprim; break; /* --- Polygon */ case 18: ClearScreen(screen, "Polygon"); TestPolygon(screen); BenchmarkPolygon(screen); /* Next primitive */ oldprim=curprim; break; /* --- AA-Polygon */ case 19: ClearScreen(screen, "AA-Polygon"); TestAAPolygon(screen); BenchmarkAAPolygon(screen); /* Next primitive */ oldprim=curprim; break; /* ---- Filled Polygon */ case 20: ClearScreen(screen, "Filled Polygon"); TestFilledPolygon(screen); BenchmarkFilledPolygon(screen); /* Next primitive */ oldprim=curprim; break; /* ---- Textured Polygon */ case 21: ClearScreen(screen, "Textured Polygon"); TestTexturedPolygon(screen); BenchmarkTexturedPolygon(screen); /* Next primitive */ oldprim=curprim; break; /* ---- Bezier Curve */ case 22: ClearScreen(screen, "Bezier Curve"); TestBezier(screen); BenchmarkBezier(screen); /* Next primitive */ oldprim=curprim; break; /* --- Reset */ default: oldprim=0; curprim=1; break; } /* Show */ SDL_UpdateRect(screen, 0, 0, 0, 0); SDL_Flip(screen); } /* Slow down polling */ SDL_Delay(100); /* Check for events */ while ( SDL_PollEvent(&event) ) { switch (event.type) { case SDL_MOUSEBUTTONDOWN: if ( event.button.button == 1 ) { /* Switch to next graphics */ curprim++; } break; case SDL_KEYDOWN: /* Any keypress quits the app... */ case SDL_QUIT: done = 1; break; default: break; } } } return(0); }