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; |
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 */ |