test/testgl.c
changeset 492 c59692dcdce0
parent 363 ca0b4ba5313e
child 655 9c42ee1b7d77
equal deleted inserted replaced
491:da6a7e859616 492:c59692dcdce0
    16 #define LOGO_FILE	"icon.bmp"
    16 #define LOGO_FILE	"icon.bmp"
    17 
    17 
    18 /* The SDL_OPENGLBLIT interface is deprecated.
    18 /* The SDL_OPENGLBLIT interface is deprecated.
    19    The code is still available for benchmark purposes though.
    19    The code is still available for benchmark purposes though.
    20 */
    20 */
       
    21 
    21 static SDL_bool USE_DEPRECATED_OPENGLBLIT = SDL_FALSE;
    22 static SDL_bool USE_DEPRECATED_OPENGLBLIT = SDL_FALSE;
       
    23 
       
    24 static SDL_Surface *global_image = NULL;
       
    25 static GLuint global_texture = 0;
    22 
    26 
    23 /**********************************************************************/
    27 /**********************************************************************/
    24 
    28 
    25 void HotKey_ToggleFullScreen(void)
    29 void HotKey_ToggleFullScreen(void)
    26 {
    30 {
   231 	SDL_FreeSurface(image); /* No longer needed */
   235 	SDL_FreeSurface(image); /* No longer needed */
   232 
   236 
   233 	return texture;
   237 	return texture;
   234 }
   238 }
   235 
   239 
       
   240 
   236 void DrawLogoTexture(void)
   241 void DrawLogoTexture(void)
   237 {
   242 {
   238 	static GLuint texture;
       
   239 	static GLfloat texMinX, texMinY;
   243 	static GLfloat texMinX, texMinY;
   240 	static GLfloat texMaxX, texMaxY;
   244 	static GLfloat texMaxX, texMaxY;
   241 	static int x = 0;
   245 	static int x = 0;
   242 	static int y = 0;
   246 	static int y = 0;
   243 	static int w, h;
   247 	static int w, h;
   245 	static int delta_y = 1;
   249 	static int delta_y = 1;
   246 	static Uint32 last_moved = 0;
   250 	static Uint32 last_moved = 0;
   247 
   251 
   248 	SDL_Surface *screen = SDL_GetVideoSurface();
   252 	SDL_Surface *screen = SDL_GetVideoSurface();
   249 
   253 
   250 	if ( ! texture ) {
   254 	if ( ! global_texture ) {
   251 		SDL_Surface *image;
   255 		SDL_Surface *image;
   252 		GLfloat texcoord[4];
   256 		GLfloat texcoord[4];
   253 
   257 
   254 		/* Load the image (could use SDL_image library here) */
   258 		/* Load the image (could use SDL_image library here) */
   255 		image = SDL_LoadBMP(LOGO_FILE);
   259 		image = SDL_LoadBMP(LOGO_FILE);
   258 		}
   262 		}
   259 		w = image->w;
   263 		w = image->w;
   260 		h = image->h;
   264 		h = image->h;
   261 
   265 
   262 		/* Convert the image into an OpenGL texture */
   266 		/* Convert the image into an OpenGL texture */
   263 		texture = SDL_GL_LoadTexture(image, texcoord);
   267 		global_texture = SDL_GL_LoadTexture(image, texcoord);
   264 
   268 
   265 		/* Make texture coordinates easy to understand */
   269 		/* Make texture coordinates easy to understand */
   266 		texMinX = texcoord[0];
   270 		texMinX = texcoord[0];
   267 		texMinY = texcoord[1];
   271 		texMinY = texcoord[1];
   268 		texMaxX = texcoord[2];
   272 		texMaxX = texcoord[2];
   270 
   274 
   271 		/* We don't need the original image anymore */
   275 		/* We don't need the original image anymore */
   272 		SDL_FreeSurface(image);
   276 		SDL_FreeSurface(image);
   273 
   277 
   274 		/* Make sure that the texture conversion is okay */
   278 		/* Make sure that the texture conversion is okay */
   275 		if ( ! texture ) {
   279 		if ( ! global_texture ) {
   276 			return;
   280 			return;
   277 		}
   281 		}
   278 	}
   282 	}
   279 
   283 
   280 	/* Move the image around */
   284 	/* Move the image around */
   297 		delta_y = -delta_y;
   301 		delta_y = -delta_y;
   298 	}
   302 	}
   299 
   303 
   300 	/* Show the image on the screen */
   304 	/* Show the image on the screen */
   301 	SDL_GL_Enter2DMode();
   305 	SDL_GL_Enter2DMode();
   302 	glBindTexture(GL_TEXTURE_2D, texture);
   306 	glBindTexture(GL_TEXTURE_2D, global_texture);
   303 	glBegin(GL_TRIANGLE_STRIP);
   307 	glBegin(GL_TRIANGLE_STRIP);
   304 	glTexCoord2f(texMinX, texMinY); glVertex2i(x,   y  );
   308 	glTexCoord2f(texMinX, texMinY); glVertex2i(x,   y  );
   305 	glTexCoord2f(texMaxX, texMinY); glVertex2i(x+w, y  );
   309 	glTexCoord2f(texMaxX, texMinY); glVertex2i(x+w, y  );
   306 	glTexCoord2f(texMinX, texMaxY); glVertex2i(x,   y+h);
   310 	glTexCoord2f(texMinX, texMaxY); glVertex2i(x,   y+h);
   307 	glTexCoord2f(texMaxX, texMaxY); glVertex2i(x+w, y+h);
   311 	glTexCoord2f(texMaxX, texMaxY); glVertex2i(x+w, y+h);
   310 }
   314 }
   311 
   315 
   312 /* This code is deprecated, but available for speed comparisons */
   316 /* This code is deprecated, but available for speed comparisons */
   313 void DrawLogoBlit(void)
   317 void DrawLogoBlit(void)
   314 {
   318 {
   315 	static SDL_Surface *image = NULL;
       
   316 	static GLuint texture;
       
   317 	static GLfloat texMinX, texMinY;
       
   318 	static GLfloat texMaxX, texMaxY;
       
   319 	static int x = 0;
   319 	static int x = 0;
   320 	static int y = 0;
   320 	static int y = 0;
   321 	static int w, h;
   321 	static int w, h;
   322 	static int delta_x = 1;
   322 	static int delta_x = 1;
   323 	static int delta_y = 1;
   323 	static int delta_y = 1;
   324 	static Uint32 last_moved = 0;
   324 	static Uint32 last_moved = 0;
   325 
   325 
   326 	SDL_Rect dst;
   326 	SDL_Rect dst;
   327 	SDL_Surface *screen = SDL_GetVideoSurface();
   327 	SDL_Surface *screen = SDL_GetVideoSurface();
   328 
   328 
   329 	if ( image == NULL ) {
   329 	if ( global_image == NULL ) {
   330 		SDL_Surface *temp;
   330 		SDL_Surface *temp;
   331 
   331 
   332 		/* Load the image (could use SDL_image library here) */
   332 		/* Load the image (could use SDL_image library here) */
   333 		temp = SDL_LoadBMP(LOGO_FILE);
   333 		temp = SDL_LoadBMP(LOGO_FILE);
   334 		if ( temp == NULL ) {
   334 		if ( temp == NULL ) {
   336 		}
   336 		}
   337 		w = temp->w;
   337 		w = temp->w;
   338 		h = temp->h;
   338 		h = temp->h;
   339 
   339 
   340 		/* Convert the image into the screen format */
   340 		/* Convert the image into the screen format */
   341 		image = SDL_CreateRGBSurface(
   341 		global_image = SDL_CreateRGBSurface(
   342 				SDL_SWSURFACE,
   342 				SDL_SWSURFACE,
   343 				w, h,
   343 				w, h,
   344 				screen->format->BitsPerPixel,
   344 				screen->format->BitsPerPixel,
   345 				screen->format->Rmask,
   345 				screen->format->Rmask,
   346 				screen->format->Gmask,
   346 				screen->format->Gmask,
   347 				screen->format->Bmask,
   347 				screen->format->Bmask,
   348 				screen->format->Amask);
   348 				screen->format->Amask);
   349 		if ( image ) {
   349 		if ( global_image ) {
   350 			SDL_BlitSurface(temp, NULL, image, NULL);
   350 			SDL_BlitSurface(temp, NULL, global_image, NULL);
   351 		}
   351 		}
   352 		SDL_FreeSurface(temp);
   352 		SDL_FreeSurface(temp);
   353 
   353 
   354 		/* Make sure that the texture conversion is okay */
   354 		/* Make sure that the texture conversion is okay */
   355 		if ( ! image ) {
   355 		if ( ! global_image ) {
   356 			return;
   356 			return;
   357 		}
   357 		}
   358 	}
   358 	}
   359 
   359 
   360 	/* Move the image around
   360 	/* Move the image around
   384 	}
   384 	}
   385 	dst.x = x;
   385 	dst.x = x;
   386 	dst.y = y;
   386 	dst.y = y;
   387 	dst.w = w;
   387 	dst.w = w;
   388 	dst.h = h;
   388 	dst.h = h;
   389 	SDL_BlitSurface(image, NULL, screen, &dst);
   389 	SDL_BlitSurface(global_image, NULL, screen, &dst);
   390 
   390 
   391 	/* Show the image on the screen */
   391 	/* Show the image on the screen */
   392 	SDL_UpdateRects(screen, 1, &dst);
   392 	SDL_UpdateRects(screen, 1, &dst);
   393 }
   393 }
   394 
   394 
   676 	if ( this_time != start_time ) {
   676 	if ( this_time != start_time ) {
   677 		printf("%2.2f FPS\n",
   677 		printf("%2.2f FPS\n",
   678 			((float)frames/(this_time-start_time))*1000.0);
   678 			((float)frames/(this_time-start_time))*1000.0);
   679 	}
   679 	}
   680 
   680 
       
   681 	if ( global_image ) {
       
   682 	   	SDL_FreeSurface(global_image);
       
   683 		global_image = NULL;
       
   684 	}
       
   685 	if ( global_texture ) {
       
   686 		glDeleteTextures( 1, &global_texture );
       
   687 		global_texture = 0;
       
   688 	}
       
   689 
   681 	/* Destroy our GL context, etc. */
   690 	/* Destroy our GL context, etc. */
   682 	SDL_Quit( );
   691 	SDL_Quit( );
   683 	return(0);
   692 	return(0);
   684 }
   693 }
   685 
   694 
   688 	int i, logo;
   697 	int i, logo;
   689 	int numtests;
   698 	int numtests;
   690 	int bpp = 0;
   699 	int bpp = 0;
   691 	int slowly;
   700 	int slowly;
   692 	float gamma = 0.0;
   701 	float gamma = 0.0;
   693         int noframe = 0;
   702 	int noframe = 0;
   694 
   703 
   695 	logo = 0;
   704 	logo = 0;
   696 	slowly = 0;
   705 	slowly = 0;
   697 	numtests = 1;
   706 	numtests = 1;
   698 	for ( i=1; argv[i]; ++i ) {
   707 	for ( i=1; argv[i]; ++i ) {
   725  			      argv[0]);
   734  			      argv[0]);
   726 			exit(0);
   735 			exit(0);
   727 		}
   736 		}
   728 	}
   737 	}
   729 	for ( i=0; i<numtests; ++i ) {
   738 	for ( i=0; i<numtests; ++i ) {
   730  	       RunGLTest(argc, argv, logo, slowly, bpp, gamma, noframe);
   739  		RunGLTest(argc, argv, logo, slowly, bpp, gamma, noframe);
   731 	}
   740 	}
   732 	return 0;
   741 	return 0;
   733 }
   742 }
   734 
   743 
   735 #else /* HAVE_OPENGL */
   744 #else /* HAVE_OPENGL */