?? testgfxprimitives.c
字號:
}}void BenchmarkAAPolygon(SDL_Surface *screen){ int i,j; int repeat; Uint32 time1, time2; char titletext[256]; /* Create random points */ srand(time(NULL)); InitRandomPoints(); /* Draw A=255 */ repeat=5; SetClip(screen,0,60,WIDTH/2,60+(HEIGHT-80)/2); time1=SDL_GetTicks(); for (j=0; j<repeat; j++) { for (i=0; i<NUM_RANDOM; i += 3) { aapolygonRGBA(screen, &rx1[i], &ry1[i], 3, rr[i], rg[i], rb[i], 255); } } time2=SDL_GetTicks(); /* Results */ SetClip(screen,0,0,WIDTH-1,HEIGHT-1); sprintf (titletext, "%.0f per sec",1000.0*(float)(((NUM_RANDOM-3)/3)*repeat)/(float)(time2-time1)); stringRGBA (screen, WIDTH/4-4*strlen(titletext),30-4,titletext,255,255,255,255); /* Draw A=various */ repeat=2; SetClip(screen,WIDTH/2,60,WIDTH,60+(HEIGHT-80)/2); time1=SDL_GetTicks(); for (j=0; j<repeat; j++) { for (i=0; i<NUM_RANDOM; i += 3) { aapolygonRGBA(screen, &rx2[i], &ry1[i], 3, rr[i], rg[i], rb[i], ra[i]); } } time2=SDL_GetTicks(); /* Results */ SetClip(screen,0,0,WIDTH-1,HEIGHT-1); sprintf (titletext, "%.0f per sec",1000.0*(float)(((NUM_RANDOM-3)/3)*repeat)/(float)(time2-time1)); stringRGBA (screen, 3*WIDTH/4-4*strlen(titletext),30-4,titletext,255,255,255,255);}void TestFilledPolygon(SDL_Surface *screen){ int i; char r,g,b; /* Create random points */ srand(time(NULL)); InitRandomPoints(); /* Draw A=255 */ SetClip(screen,0,60,WIDTH/2,60+(HEIGHT-80)/2); for (i=0; i<(NUM_RANDOM-3); i += 3) { filledPolygonRGBA(screen, &rx1[i], &ry1[i], 3, rr[i], rg[i], rb[i], 255); } /* Draw A=various */ SetClip(screen,WIDTH/2,60,WIDTH,60+(HEIGHT-80)/2); for (i=0; i<(NUM_RANDOM-3); i += 3) { filledPolygonRGBA(screen, &rx2[i], &ry1[i], 3, rr[i], rg[i], rb[i], ra[i]); } /* Draw A=various */ SetClip(screen,WIDTH/2,80+(HEIGHT-80)/2,WIDTH,HEIGHT); for (i=0; i<(NUM_RANDOM-3); i += 3) { filledPolygonRGBA(screen, &rx2[i], &ry2[i], 3, rr[i], rg[i], rb[i], ra[i]); } /* Draw Colortest */ SetClip(screen,0,80+(HEIGHT-80)/2,WIDTH/2,HEIGHT); for (i=0; i<(NUM_RANDOM-3); i += 3) { if (rx1[i] < (WIDTH/6)) { r=255; g=0; b=0; } else if (rx1[i] < (WIDTH/3) ) { r=0; g=255; b=0; } else { r=0; g=0; b=255; } rx1[i+1]=rx1[i]+rr1[i]; rx1[i+2]=rx1[i]; ry2[i+1]=ry2[i]; ry2[i+2]=ry2[i]+rr2[i]; filledPolygonRGBA(screen, &rx1[i], &ry2[i], 3, r, g, b, 255); }}void BenchmarkFilledPolygon(SDL_Surface *screen){ int i,j; int repeat; Uint32 time1, time2; char titletext[256]; /* Create random points */ srand(time(NULL)); InitRandomPoints(); /* Draw A=255 */ repeat=20; SetClip(screen,0,60,WIDTH/2,60+(HEIGHT-80)/2); time1=SDL_GetTicks(); for (j=0; j<repeat; j++) { for (i=0; i<NUM_RANDOM; i += 3) { filledPolygonRGBA(screen, &rx1[i], &ry1[i], 3, rr[i], rg[i], rb[i], 255); } } time2=SDL_GetTicks(); /* Results */ SetClip(screen,0,0,WIDTH-1,HEIGHT-1); sprintf (titletext, "%.0f per sec",1000.0*(float)(((NUM_RANDOM-3)/3)*repeat)/(float)(time2-time1)); stringRGBA (screen, WIDTH/4-4*strlen(titletext),30-4,titletext,255,255,255,255); /* Draw A=various */ repeat=5; SetClip(screen,WIDTH/2,60,WIDTH,60+(HEIGHT-80)/2); time1=SDL_GetTicks(); for (j=0; j<repeat; j++) { for (i=0; i<NUM_RANDOM; i += 3) { filledPolygonRGBA(screen, &rx2[i], &ry1[i], 3, rr[i], rg[i], rb[i], ra[i]); } } time2=SDL_GetTicks(); /* Results */ SetClip(screen,0,0,WIDTH-1,HEIGHT-1); sprintf (titletext, "%.0f per sec",1000.0*(float)(((NUM_RANDOM-3)/3)*repeat)/(float)(time2-time1)); stringRGBA (screen, 3*WIDTH/4-4*strlen(titletext),30-4,titletext,255,255,255,255);}void TestBezier(SDL_Surface *screen){ int i; char r,g,b; /* Create random points */ srand(time(NULL)); InitRandomPoints(); /* Draw A=255 */ SetClip(screen,0,60,WIDTH/2,60+(HEIGHT-80)/2); for (i=0; i<(NUM_RANDOM-3); i += 3) { bezierRGBA(screen, &rx1[i], &ry1[i], 3, 100, rr[i], rg[i], rb[i], 255); } /* Draw A=various */ SetClip(screen,WIDTH/2,60,WIDTH,60+(HEIGHT-80)/2); for (i=0; i<(NUM_RANDOM-3); i += 3) { bezierRGBA(screen, &rx2[i], &ry1[i], 3, 100, rr[i], rg[i], rb[i], ra[i]); } /* Draw A=various */ SetClip(screen,WIDTH/2,80+(HEIGHT-80)/2,WIDTH,HEIGHT); for (i=0; i<(NUM_RANDOM-3); i += 3) { bezierRGBA(screen, &rx2[i], &ry2[i], 3, 100, rr[i], rg[i], rb[i], ra[i]); } /* Draw Colortest */ SetClip(screen,0,80+(HEIGHT-80)/2,WIDTH/2,HEIGHT); for (i=0; i<(NUM_RANDOM-3); i += 3) { if (rx1[i] < (WIDTH/6)) { r=255; g=0; b=0; } else if (rx1[i] < (WIDTH/3) ) { r=0; g=255; b=0; } else { r=0; g=0; b=255; } rx1[i+1]=rx1[i]+rr1[i]; rx1[i+2]=rx1[i]; ry2[i+1]=ry2[i]; ry2[i+2]=ry2[i]+rr2[i]; bezierRGBA(screen, &rx1[i], &ry2[i], 3, 100, r, g, b, 255); }}void BenchmarkBezier(SDL_Surface *screen){ int i,j; int repeat; Uint32 time1, time2; char titletext[256]; /* Create random points */ srand(time(NULL)); InitRandomPoints(); /* Draw A=255 */ repeat=20; SetClip(screen,0,60,WIDTH/2,60+(HEIGHT-80)/2); time1=SDL_GetTicks(); for (j=0; j<repeat; j++) { for (i=0; i<NUM_RANDOM; i += 3) { bezierRGBA(screen, &rx1[i], &ry1[i], 3, 100, rr[i], rg[i], rb[i], 255); } } time2=SDL_GetTicks(); /* Results */ SetClip(screen,0,0,WIDTH-1,HEIGHT-1); sprintf (titletext, "%.0f per sec",1000.0*(float)(((NUM_RANDOM-3)/3)*repeat)/(float)(time2-time1)); stringRGBA (screen, WIDTH/4-4*strlen(titletext),30-4,titletext,255,255,255,255); /* Draw A=various */ repeat=10; SetClip(screen,WIDTH/2,60,WIDTH,60+(HEIGHT-80)/2); time1=SDL_GetTicks(); for (j=0; j<repeat; j++) { for (i=0; i<NUM_RANDOM; i += 3) { bezierRGBA(screen, &rx2[i], &ry1[i], 3, 100, rr[i], rg[i], rb[i], ra[i]); } } time2=SDL_GetTicks(); /* Results */ SetClip(screen,0,0,WIDTH-1,HEIGHT-1); sprintf (titletext, "%.0f per sec",1000.0*(float)(((NUM_RANDOM-3)/3)*repeat)/(float)(time2-time1)); stringRGBA (screen, 3*WIDTH/4-4*strlen(titletext),30-4,titletext,255,255,255,255);}/* ======== Main Program ======= */int main(int argc, char *argv[]){ const SDL_VideoInfo *info; SDL_Surface *screen; Uint8 video_bpp; Uint32 videoflags; int done; SDL_Event event; int oldprim, curprim; /* Initialize SDL */ if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) { fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError()); exit(1); } atexit(SDL_Quit); /* Alpha blending doesn't work well at 8-bit color */ info = SDL_GetVideoInfo(); if ( info->vfmt->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("TestGfxPrimitives","TestGfxPrimitives"); /* 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; /* --- Pie */ case 15: ClearScreen(screen, "Pie"); TestPie(screen); BenchmarkPie(screen); /* Next primitive */ oldprim=curprim; break; /* --- Filled Pie */ case 16: ClearScreen(screen, "Filled Pie"); TestFilledPie(screen); BenchmarkFilledPie(screen); /* Next primitive */ oldprim=curprim; break; /* --- Polygon */ case 17: ClearScreen(screen, "Polygon"); TestPolygon(screen); BenchmarkPolygon(screen); /* Next primitive */ oldprim=curprim; break; /* --- AA-Polygon */ case 18: ClearScreen(screen, "AA-Polygon"); TestAAPolygon(screen); BenchmarkAAPolygon(screen); /* Next primitive */ oldprim=curprim; break; /* ---- Filled Polygon */ case 19: ClearScreen(screen, "Filled Polygon"); TestFilledPolygon(screen); BenchmarkFilledPolygon(screen); /* Next primitive */ oldprim=curprim; break; /* ---- Bezier Curve */ case 20: 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); } /* 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);}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -