test/testgl.c
changeset 933 4272450dd8d0
parent 910 4ab6d1fd028f
child 1265 670e74bf5cc8
equal deleted inserted replaced
932:66761191fc11 933:4272450dd8d0
    21 
    21 
    22 static SDL_bool USE_DEPRECATED_OPENGLBLIT = SDL_FALSE;
    22 static SDL_bool USE_DEPRECATED_OPENGLBLIT = SDL_FALSE;
    23 
    23 
    24 static SDL_Surface *global_image = NULL;
    24 static SDL_Surface *global_image = NULL;
    25 static GLuint global_texture = 0;
    25 static GLuint global_texture = 0;
       
    26 static GLuint cursor_texture = 0;
    26 
    27 
    27 /**********************************************************************/
    28 /**********************************************************************/
    28 
    29 
    29 void HotKey_ToggleFullScreen(void)
    30 void HotKey_ToggleFullScreen(void)
    30 {
    31 {
   235 	SDL_FreeSurface(image); /* No longer needed */
   236 	SDL_FreeSurface(image); /* No longer needed */
   236 
   237 
   237 	return texture;
   238 	return texture;
   238 }
   239 }
   239 
   240 
       
   241 void DrawLogoCursor(void)
       
   242 {
       
   243 	static GLfloat texMinX, texMinY;
       
   244 	static GLfloat texMaxX, texMaxY;
       
   245 	static int w, h;
       
   246 	int x, y;
       
   247 
       
   248 	SDL_Surface *screen = SDL_GetVideoSurface();
       
   249 
       
   250 	if ( ! cursor_texture ) {
       
   251 		SDL_Surface *image;
       
   252 		GLfloat texcoord[4];
       
   253 
       
   254 		/* Load the image (could use SDL_image library here) */
       
   255 		image = SDL_LoadBMP(LOGO_FILE);
       
   256 		if ( image == NULL ) {
       
   257 			return;
       
   258 		}
       
   259 		w = image->w;
       
   260 		h = image->h;
       
   261 
       
   262 		/* Convert the image into an OpenGL texture */
       
   263 		cursor_texture = SDL_GL_LoadTexture(image, texcoord);
       
   264 
       
   265 		/* Make texture coordinates easy to understand */
       
   266 		texMinX = texcoord[0];
       
   267 		texMinY = texcoord[1];
       
   268 		texMaxX = texcoord[2];
       
   269 		texMaxY = texcoord[3];
       
   270 
       
   271 		/* We don't need the original image anymore */
       
   272 		SDL_FreeSurface(image);
       
   273 
       
   274 		/* Make sure that the texture conversion is okay */
       
   275 		if ( ! cursor_texture ) {
       
   276 			return;
       
   277 		}
       
   278 	}
       
   279 
       
   280 	/* Move the image around */
       
   281 	SDL_GetMouseState(&x, &y);
       
   282 	x -= w/2;
       
   283 	y -= h/2;
       
   284 
       
   285 	/* Show the image on the screen */
       
   286 	SDL_GL_Enter2DMode();
       
   287 	glBindTexture(GL_TEXTURE_2D, cursor_texture);
       
   288 	glBegin(GL_TRIANGLE_STRIP);
       
   289 	glTexCoord2f(texMinX, texMinY); glVertex2i(x,   y  );
       
   290 	glTexCoord2f(texMaxX, texMinY); glVertex2i(x+w, y  );
       
   291 	glTexCoord2f(texMinX, texMaxY); glVertex2i(x,   y+h);
       
   292 	glTexCoord2f(texMaxX, texMaxY); glVertex2i(x+w, y+h);
       
   293 	glEnd();
       
   294 	SDL_GL_Leave2DMode();
       
   295 }
   240 
   296 
   241 void DrawLogoTexture(void)
   297 void DrawLogoTexture(void)
   242 {
   298 {
   243 	static GLfloat texMinX, texMinY;
   299 	static GLfloat texMinX, texMinY;
   244 	static GLfloat texMaxX, texMaxY;
   300 	static GLfloat texMaxX, texMaxY;
   391 	/* Show the image on the screen */
   447 	/* Show the image on the screen */
   392 	SDL_UpdateRects(screen, 1, &dst);
   448 	SDL_UpdateRects(screen, 1, &dst);
   393 }
   449 }
   394 
   450 
   395 int RunGLTest( int argc, char* argv[],
   451 int RunGLTest( int argc, char* argv[],
   396                int logo, int slowly, int bpp, float gamma, int noframe, int fsaa )
   452                int logo, int logocursor, int slowly, int bpp, float gamma, int noframe, int fsaa )
   397 {
   453 {
   398 	int i;
   454 	int i;
   399 	int rgb_size[3];
   455 	int rgb_size[3];
   400 	int w = 640;
   456 	int w = 640;
   401 	int h = 480;
   457 	int h = 480;
   650 				DrawLogoBlit();
   706 				DrawLogoBlit();
   651 			} else {
   707 			} else {
   652 				DrawLogoTexture();
   708 				DrawLogoTexture();
   653 			}
   709 			}
   654 		}
   710 		}
       
   711 		if ( logocursor ) {
       
   712 			DrawLogoCursor();
       
   713 		}
   655 
   714 
   656 		SDL_GL_SwapBuffers( );
   715 		SDL_GL_SwapBuffers( );
   657 
   716 
   658 		/* Check for error conditions. */
   717 		/* Check for error conditions. */
   659 		gl_error = glGetError( );
   718 		gl_error = glGetError( );
   694 	}
   753 	}
   695 	if ( global_texture ) {
   754 	if ( global_texture ) {
   696 		glDeleteTextures( 1, &global_texture );
   755 		glDeleteTextures( 1, &global_texture );
   697 		global_texture = 0;
   756 		global_texture = 0;
   698 	}
   757 	}
       
   758 	if ( cursor_texture ) {
       
   759 		glDeleteTextures( 1, &cursor_texture );
       
   760 		cursor_texture = 0;
       
   761 	}
   699 
   762 
   700 	/* Destroy our GL context, etc. */
   763 	/* Destroy our GL context, etc. */
   701 	SDL_Quit( );
   764 	SDL_Quit( );
   702 	return(0);
   765 	return(0);
   703 }
   766 }
   704 
   767 
   705 int main(int argc, char *argv[])
   768 int main(int argc, char *argv[])
   706 {
   769 {
   707 	int i, logo;
   770 	int i, logo, logocursor;
   708 	int numtests;
   771 	int numtests;
   709 	int bpp = 0;
   772 	int bpp = 0;
   710 	int slowly;
   773 	int slowly;
   711 	float gamma = 0.0;
   774 	float gamma = 0.0;
   712 	int noframe = 0;
   775 	int noframe = 0;
   725 		}
   788 		}
   726 		if ( strcmp(argv[i], "-logoblit") == 0 ) {
   789 		if ( strcmp(argv[i], "-logoblit") == 0 ) {
   727 			logo = 1;
   790 			logo = 1;
   728 			USE_DEPRECATED_OPENGLBLIT = SDL_TRUE;
   791 			USE_DEPRECATED_OPENGLBLIT = SDL_TRUE;
   729 		}
   792 		}
       
   793 		if ( strcmp(argv[i], "-logocursor") == 0 ) {
       
   794 			logocursor = 1;
       
   795 		}
   730 		if ( strcmp(argv[i], "-slow") == 0 ) {
   796 		if ( strcmp(argv[i], "-slow") == 0 ) {
   731 			slowly = 1;
   797 			slowly = 1;
   732 		}
   798 		}
   733 		if ( strcmp(argv[i], "-bpp") == 0 ) {
   799 		if ( strcmp(argv[i], "-bpp") == 0 ) {
   734  		       bpp = atoi(argv[++i]);
   800  		       bpp = atoi(argv[++i]);
   742 		if ( strcmp(argv[i], "-fsaa") == 0 ) {
   808 		if ( strcmp(argv[i], "-fsaa") == 0 ) {
   743  		       ++fsaa;
   809  		       ++fsaa;
   744 		}
   810 		}
   745 		if ( strncmp(argv[i], "-h", 2) == 0 ) {
   811 		if ( strncmp(argv[i], "-h", 2) == 0 ) {
   746  		       printf(
   812  		       printf(
   747 "Usage: %s [-twice] [-logo] [-slow] [-bpp n] [-gamma n] [-noframe] [-fsaa] [-fullscreen]\n",
   813 "Usage: %s [-twice] [-logo] [-logocursor] [-slow] [-bpp n] [-gamma n] [-noframe] [-fsaa] [-fullscreen]\n",
   748  			      argv[0]);
   814  			      argv[0]);
   749 			exit(0);
   815 			exit(0);
   750 		}
   816 		}
   751 	}
   817 	}
   752 	for ( i=0; i<numtests; ++i ) {
   818 	for ( i=0; i<numtests; ++i ) {
   753  		RunGLTest(argc, argv, logo, slowly, bpp, gamma, noframe, fsaa);
   819  		RunGLTest(argc, argv, logo, logocursor, slowly, bpp, gamma, noframe, fsaa);
   754 	}
   820 	}
   755 	return 0;
   821 	return 0;
   756 }
   822 }
   757 
   823 
   758 #else /* HAVE_OPENGL */
   824 #else /* HAVE_OPENGL */