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

📄 testgl.c

📁 网络MPEG4IP流媒体开发源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
		y = 0;		delta_y = -delta_y;	} else	if ( (y+h) > screen->h ) {		y = screen->h-h;		delta_y = -delta_y;	}	dst.x = x;	dst.y = y;	dst.w = w;	dst.h = h;	SDL_BlitSurface(global_image, NULL, screen, &dst);	/* Show the image on the screen */	SDL_UpdateRects(screen, 1, &dst);}int RunGLTest( int argc, char* argv[],               int logo, int slowly, int bpp, float gamma, int noframe ){	int i;	int rgb_size[3];	int w = 640;	int h = 480;	int done = 0;	int frames;	Uint32 start_time, this_time;        float color[8][3]= {{ 1.0,  1.0,  0.0}, 			    { 1.0,  0.0,  0.0},			    { 0.0,  0.0,  0.0},			    { 0.0,  1.0,  0.0},			    { 0.0,  1.0,  1.0},			    { 1.0,  1.0,  1.0},			    { 1.0,  0.0,  1.0},			    { 0.0,  0.0,  1.0}};	float cube[8][3]= {{ 0.5,  0.5, -0.5}, 			   { 0.5, -0.5, -0.5},			   {-0.5, -0.5, -0.5},			   {-0.5,  0.5, -0.5},			   {-0.5,  0.5,  0.5},			   { 0.5,  0.5,  0.5},			   { 0.5, -0.5,  0.5},			   {-0.5, -0.5,  0.5}};	Uint32 video_flags;	int value;	if( SDL_Init( SDL_INIT_VIDEO ) < 0 ) {		fprintf(stderr,"Couldn't initialize SDL: %s\n",SDL_GetError());		exit( 1 );	}	/* See if we should detect the display depth */	if ( bpp == 0 ) {		if ( SDL_GetVideoInfo()->vfmt->BitsPerPixel <= 8 ) {			bpp = 8;		} else {			bpp = 16;  /* More doesn't seem to work */		}	}	/* Set the flags we want to use for setting the video mode */	if ( logo && USE_DEPRECATED_OPENGLBLIT ) {		video_flags = SDL_OPENGLBLIT;	} else {		video_flags = SDL_OPENGL;	}	for ( i=1; argv[i]; ++i ) {		if ( strcmp(argv[1], "-fullscreen") == 0 ) {			video_flags |= SDL_FULLSCREEN;		}	}        if (noframe) {           video_flags |= SDL_NOFRAME;        }	/* Initialize the display */	switch (bpp) {	    case 8:		rgb_size[0] = 3;		rgb_size[1] = 3;		rgb_size[2] = 2;		break;	    case 15:	    case 16:		rgb_size[0] = 5;		rgb_size[1] = 5;		rgb_size[2] = 5;		break;            default:		rgb_size[0] = 8;		rgb_size[1] = 8;		rgb_size[2] = 8;		break;	}	SDL_GL_SetAttribute( SDL_GL_RED_SIZE, rgb_size[0] );	SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, rgb_size[1] );	SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, rgb_size[2] );	SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 16 );	SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );	if ( SDL_SetVideoMode( w, h, bpp, video_flags ) == NULL ) {		fprintf(stderr, "Couldn't set GL mode: %s\n", SDL_GetError());		SDL_Quit();		exit(1);	}	printf("Screen BPP: %d\n", SDL_GetVideoSurface()->format->BitsPerPixel);	printf("\n");	printf( "Vendor     : %s\n", glGetString( GL_VENDOR ) );	printf( "Renderer   : %s\n", glGetString( GL_RENDERER ) );	printf( "Version    : %s\n", glGetString( GL_VERSION ) );	printf( "Extensions : %s\n", glGetString( GL_EXTENSIONS ) );	printf("\n");	SDL_GL_GetAttribute( SDL_GL_RED_SIZE, &value );	printf( "SDL_GL_RED_SIZE: requested %d, got %d\n", rgb_size[0],value);	SDL_GL_GetAttribute( SDL_GL_GREEN_SIZE, &value );	printf( "SDL_GL_GREEN_SIZE: requested %d, got %d\n", rgb_size[1],value);	SDL_GL_GetAttribute( SDL_GL_BLUE_SIZE, &value );	printf( "SDL_GL_BLUE_SIZE: requested %d, got %d\n", rgb_size[2],value);	SDL_GL_GetAttribute( SDL_GL_DEPTH_SIZE, &value );	printf( "SDL_GL_DEPTH_SIZE: requested %d, got %d\n", bpp, value );	SDL_GL_GetAttribute( SDL_GL_DOUBLEBUFFER, &value );	printf( "SDL_GL_DOUBLEBUFFER: requested 1, got %d\n", value );	/* Set the window manager title bar */	SDL_WM_SetCaption( "SDL GL test", "testgl" );	/* Set the gamma for the window */	if ( gamma != 0.0 ) {		SDL_SetGamma(gamma, gamma, gamma);	}	glViewport( 0, 0, w, h );	glMatrixMode( GL_PROJECTION );	glLoadIdentity( );	glOrtho( -2.0, 2.0, -2.0, 2.0, -20.0, 20.0 );	glMatrixMode( GL_MODELVIEW );	glLoadIdentity( );	glEnable(GL_DEPTH_TEST);	glDepthFunc(GL_LESS);	glShadeModel(GL_SMOOTH);	/* Loop until done. */	start_time = SDL_GetTicks();	frames = 0;	while( !done ) {		GLenum gl_error;		char* sdl_error;		SDL_Event event;		/* Do our drawing, too. */		glClearColor( 0.0, 0.0, 0.0, 1.0 );		glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);		glBegin( GL_QUADS );#ifdef SHADED_CUBE			glColor3fv(color[0]);			glVertex3fv(cube[0]);			glColor3fv(color[1]);			glVertex3fv(cube[1]);			glColor3fv(color[2]);			glVertex3fv(cube[2]);			glColor3fv(color[3]);			glVertex3fv(cube[3]);						glColor3fv(color[3]);			glVertex3fv(cube[3]);			glColor3fv(color[4]);			glVertex3fv(cube[4]);			glColor3fv(color[7]);			glVertex3fv(cube[7]);			glColor3fv(color[2]);			glVertex3fv(cube[2]);						glColor3fv(color[0]);			glVertex3fv(cube[0]);			glColor3fv(color[5]);			glVertex3fv(cube[5]);			glColor3fv(color[6]);			glVertex3fv(cube[6]);			glColor3fv(color[1]);			glVertex3fv(cube[1]);						glColor3fv(color[5]);			glVertex3fv(cube[5]);			glColor3fv(color[4]);			glVertex3fv(cube[4]);			glColor3fv(color[7]);			glVertex3fv(cube[7]);			glColor3fv(color[6]);			glVertex3fv(cube[6]);			glColor3fv(color[5]);			glVertex3fv(cube[5]);			glColor3fv(color[0]);			glVertex3fv(cube[0]);			glColor3fv(color[3]);			glVertex3fv(cube[3]);			glColor3fv(color[4]);			glVertex3fv(cube[4]);			glColor3fv(color[6]);			glVertex3fv(cube[6]);			glColor3fv(color[1]);			glVertex3fv(cube[1]);			glColor3fv(color[2]);			glVertex3fv(cube[2]);			glColor3fv(color[7]);			glVertex3fv(cube[7]);#else // flat cube			glColor3f(1.0, 0.0, 0.0);			glVertex3fv(cube[0]);			glVertex3fv(cube[1]);			glVertex3fv(cube[2]);			glVertex3fv(cube[3]);						glColor3f(0.0, 1.0, 0.0);			glVertex3fv(cube[3]);			glVertex3fv(cube[4]);			glVertex3fv(cube[7]);			glVertex3fv(cube[2]);						glColor3f(0.0, 0.0, 1.0);			glVertex3fv(cube[0]);			glVertex3fv(cube[5]);			glVertex3fv(cube[6]);			glVertex3fv(cube[1]);						glColor3f(0.0, 1.0, 1.0);			glVertex3fv(cube[5]);			glVertex3fv(cube[4]);			glVertex3fv(cube[7]);			glVertex3fv(cube[6]);			glColor3f(1.0, 1.0, 0.0);			glVertex3fv(cube[5]);			glVertex3fv(cube[0]);			glVertex3fv(cube[3]);			glVertex3fv(cube[4]);			glColor3f(1.0, 0.0, 1.0);			glVertex3fv(cube[6]);			glVertex3fv(cube[1]);			glVertex3fv(cube[2]);			glVertex3fv(cube[7]);#endif /* SHADED_CUBE */		glEnd( );				glMatrixMode(GL_MODELVIEW);		glRotatef(5.0, 1.0, 1.0, 1.0);		/* Draw 2D logo onto the 3D display */		if ( logo ) {			if ( USE_DEPRECATED_OPENGLBLIT ) {				DrawLogoBlit();			} else {				DrawLogoTexture();			}		}		SDL_GL_SwapBuffers( );		/* Check for error conditions. */		gl_error = glGetError( );		if( gl_error != GL_NO_ERROR ) {			fprintf( stderr, "testgl: OpenGL error: %d\n", gl_error );		}		sdl_error = SDL_GetError( );		if( sdl_error[0] != '\0' ) {			fprintf(stderr, "testgl: SDL error '%s'\n", sdl_error);			SDL_ClearError();		}		/* Allow the user to see what's happening */		if ( slowly ) {			SDL_Delay( 20 );		}		/* Check if there's a pending event. */		while( SDL_PollEvent( &event ) ) {			done = HandleEvent(&event);		}		++frames;	}	/* Print out the frames per second */	this_time = SDL_GetTicks();	if ( this_time != start_time ) {		printf("%2.2f FPS\n",			((float)frames/(this_time-start_time))*1000.0);	}	if ( global_image ) {	   	SDL_FreeSurface(global_image);		global_image = NULL;	}	if ( global_texture ) {		glDeleteTextures( 1, &global_texture );		global_texture = 0;	}	/* Destroy our GL context, etc. */	SDL_Quit( );	return(0);}int main(int argc, char *argv[]){	int i, logo;	int numtests;	int bpp = 0;	int slowly;	float gamma = 0.0;	int noframe = 0;	logo = 0;	slowly = 0;	numtests = 1;	for ( i=1; argv[i]; ++i ) {		if ( strcmp(argv[i], "-twice") == 0 ) {			++numtests;		}		if ( strcmp(argv[i], "-logo") == 0 ) {			logo = 1;			USE_DEPRECATED_OPENGLBLIT = SDL_FALSE;		}		if ( strcmp(argv[i], "-logoblit") == 0 ) {			logo = 1;			USE_DEPRECATED_OPENGLBLIT = SDL_TRUE;		}		if ( strcmp(argv[i], "-slow") == 0 ) {			slowly = 1;		}		if ( strcmp(argv[i], "-bpp") == 0 ) { 		       bpp = atoi(argv[++i]);		}		if ( strcmp(argv[i], "-gamma") == 0 ) { 		       gamma = (float)atof(argv[++i]);		}		if ( strcmp(argv[i], "-noframe") == 0 ) { 		       noframe = 1;		}		if ( strncmp(argv[i], "-h", 2) == 0 ) { 		       printf("Usage: %s [-twice] [-logo] [-slow] [-bpp n] [-gamma n] [-noframe]\n", 			      argv[0]);			exit(0);		}	}	for ( i=0; i<numtests; ++i ) { 		RunGLTest(argc, argv, logo, slowly, bpp, gamma, noframe);	}	return 0;}#else /* HAVE_OPENGL */int main(int argc, char *argv[]){	printf("No OpenGL support on this system\n");	return 1;}#endif /* HAVE_OPENGL */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -