⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testgfxprimitives.c

📁 sdl的gfx开发包
💻 C
📖 第 1 页 / 共 4 页
字号:
 }}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 + -