123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498 |
- /*
- Copyright (C) 1997-2001 Id Software, Inc.
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version 2
- of the License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
- #include "../wolfiphone.h"
- viddef_t viddef;
- float gldepthmin, gldepthmax;
- glconfig_t gl_config;
- glstate_t gl_state;
- //
- // view origin
- //
- vec3_t vup;
- vec3_t vpn;
- vec3_t vright;
- vec3_t r_origin;
- cvar_t *r_norefresh;
- cvar_t *r_speeds;
- cvar_t *r_novis;
- cvar_t *r_nocull;
- cvar_t *r_lefthand;
- cvar_t *gl_nosubimage;
- cvar_t *gl_vertex_arrays;
- cvar_t *gl_ext_swapinterval;
- cvar_t *gl_ext_palettedtexture;
- cvar_t *gl_ext_multitexture;
- cvar_t *gl_ext_pointparameters;
- cvar_t *gl_ext_compiled_vertex_array;
- //cvar_t *gl_ext_TextureCompressionS3TC;
- cvar_t *gl_bitdepth;
- cvar_t *gl_drawbuffer;
- cvar_t *gl_driver;
- cvar_t *gl_lightmap;
- cvar_t *gl_shadows;
- cvar_t *gl_mode;
- cvar_t *gl_dynamic;
- cvar_t *gl_modulate;
- cvar_t *gl_nobind;
- cvar_t *gl_round_down;
- cvar_t *gl_picmip;
- cvar_t *gl_skymip;
- cvar_t *gl_showtris;
- cvar_t *gl_ztrick;
- cvar_t *gl_finish;
- cvar_t *gl_clear;
- cvar_t *gl_cull;
- cvar_t *gl_polyblend;
- cvar_t *gl_flashblend;
- cvar_t *gl_playermip;
- cvar_t *gl_saturatelighting;
- cvar_t *gl_swapinterval;
- cvar_t *gl_texturemode;
- cvar_t *r_fullscreen;
- cvar_t *vid_gamma;
- cvar_t *r_ref;
- /*
- -----------------------------------------------------------------------------
- Function:
- Parameters:
- Returns:
- Notes:
- -----------------------------------------------------------------------------
- */
- PUBLIC void MYgluPerspective( GLdouble fovy, GLdouble aspect,
- GLdouble zNear, GLdouble zFar )
- {
- GLdouble xmin, xmax, ymin, ymax;
- ymax = zNear * tan( fovy * M_PI / 360.0 );
- ymin = -ymax;
- xmin = ymin * aspect;
- xmax = ymax * aspect;
- xmin += -( 2 * 0 ) / zNear;
- xmax += -( 2 * 0 ) / zNear;
- pfglFrustum( xmin, xmax, ymin, ymax, zNear, zFar );
- }
- /*
- -----------------------------------------------------------------------------
- Function:
- Parameters:
- Returns:
- Notes:
- -----------------------------------------------------------------------------
- */
- PRIVATE void R_ScreenShot_f( void )
- {
- W8 *buffer;
- char picname[ 80 ];
- char checkname[ MAX_OSPATH ];
- int i;
- FILE *f;
- // create the scrnshots directory if it doesn't exist
- my_snprintf( checkname, sizeof( checkname ), "%s/scrnshot", FS_Gamedir() );
- FS_CreateDirectory( checkname );
- //
- // find a file name to save it to
- //
- my_strlcpy( picname, "scrn00.tga", sizeof( picname ) );
- for( i = 0 ; i <= 99 ; ++i )
- {
- picname[ 4 ] = i / 10 + '0';
- picname[ 5 ] = i % 10 + '0';
- my_snprintf( checkname, sizeof( checkname ), "%s/scrnshot/%s", FS_Gamedir(), picname );
- f = fopen( checkname, "rb" );
- if( ! f )
- {
- break; // file doesn't exist
- }
- fclose( f );
- }
- if( i == 100 )
- {
- Com_Printf( "R_ScreenShot_f: Couldn't create a file\n" );
- return;
- }
- buffer = MM_MALLOC( viddef.width * viddef.height * 3 );
-
- pfglReadPixels( 0, 0, viddef.width, viddef.height, GL_RGB, GL_UNSIGNED_BYTE, buffer );
-
- WriteTGA( checkname, 24, viddef.width, viddef.height, buffer, 1, 1 );
-
- MM_FREE( buffer );
- Com_Printf( "Wrote %s\n", picname );
- }
- /*
- -----------------------------------------------------------------------------
- Function:
- Parameters:
- Returns:
- Notes:
- -----------------------------------------------------------------------------
- */
- PRIVATE void R_Strings_f( void )
- {
- Com_Printf( "GL_VENDOR: %s\n", gl_config.vendor_string );
- Com_Printf( "GL_RENDERER: %s\n", gl_config.renderer_string );
- Com_Printf( "GL_VERSION: %s\n", gl_config.version_string );
- Com_Printf( "GL_EXTENSIONS: %s\n", gl_config.extensions_string );
- }
- /*
- -----------------------------------------------------------------------------
- Function:
- Parameters:
- Returns:
- Notes:
- -----------------------------------------------------------------------------
- */
- PRIVATE void R_Register( void )
- {
- gl_round_down = Cvar_Get ("gl_round_down", "1", CVAR_INIT);
-
- r_lefthand = Cvar_Get( "hand", "0", CVAR_USERINFO | CVAR_ARCHIVE );
- r_norefresh = Cvar_Get ("r_norefresh", "0", CVAR_INIT);
- r_novis = Cvar_Get ("r_novis", "0", CVAR_INIT);
- r_nocull = Cvar_Get ("r_nocull", "0", CVAR_INIT);
- r_speeds = Cvar_Get ("r_speeds", "0", CVAR_INIT);
- gl_nosubimage = Cvar_Get( "gl_nosubimage", "0", CVAR_INIT );
- gl_modulate = Cvar_Get ("gl_modulate", "1", CVAR_ARCHIVE );
- gl_bitdepth = Cvar_Get( "gl_bitdepth", "0", CVAR_INIT );
- gl_mode = Cvar_Get( "gl_mode", "0", CVAR_ARCHIVE );
- gl_lightmap = Cvar_Get ("gl_lightmap", "0", CVAR_INIT);
- gl_dynamic = Cvar_Get ("gl_dynamic", "1", CVAR_INIT);
- gl_nobind = Cvar_Get ("gl_nobind", "0", CVAR_INIT);
- gl_picmip = Cvar_Get ("gl_picmip", "0", CVAR_INIT);
- gl_skymip = Cvar_Get ("gl_skymip", "0", CVAR_INIT);
- gl_showtris = Cvar_Get( "gl_showtris", "0", CVAR_INIT );
- gl_ztrick = Cvar_Get( "gl_ztrick", "0", CVAR_INIT );
- gl_finish = Cvar_Get( "gl_finish", "0", CVAR_ARCHIVE );
- gl_clear = Cvar_Get( "gl_clear", "0", CVAR_INIT );
- gl_cull = Cvar_Get( "gl_cull", "1", CVAR_INIT );
- gl_polyblend = Cvar_Get( "gl_polyblend", "1", CVAR_INIT );
- gl_flashblend = Cvar_Get( "gl_flashblend", "0", CVAR_INIT );
- gl_playermip = Cvar_Get( "gl_playermip", "0", CVAR_INIT );
- gl_driver = Cvar_Get( "gl_driver", OPENGL_DLL_NAME, CVAR_ARCHIVE );
- gl_vertex_arrays = Cvar_Get( "gl_vertex_arrays", "0", CVAR_ARCHIVE );
- gl_ext_swapinterval = Cvar_Get( "gl_ext_swapinterval", "1", CVAR_ARCHIVE );
- gl_ext_palettedtexture = Cvar_Get( "gl_ext_palettedtexture", "1", CVAR_ARCHIVE );
- gl_ext_multitexture = Cvar_Get( "gl_ext_multitexture", "1", CVAR_ARCHIVE );
- gl_ext_pointparameters = Cvar_Get( "gl_ext_pointparameters", "1", CVAR_ARCHIVE );
- gl_ext_compiled_vertex_array = Cvar_Get( "gl_ext_compiled_vertex_array", "1", CVAR_ARCHIVE );
- gl_drawbuffer = Cvar_Get( "gl_drawbuffer", "GL_BACK", CVAR_INIT );
- gl_swapinterval = Cvar_Get( "gl_swapinterval", "1", CVAR_ARCHIVE );
- // gl_saturatelighting = Cvar_Get( "gl_saturatelighting", "0", CVAR_INIT );
- r_fullscreen = Cvar_Get( "r_fullscreen", "0", CVAR_ARCHIVE );
- vid_gamma = Cvar_Get( "vid_gamma", "1.0", CVAR_ARCHIVE );
- r_ref = Cvar_Get( "r_ref", "gl", CVAR_ARCHIVE );
- Cmd_AddCommand( "screenshot", R_ScreenShot_f );
- Cmd_AddCommand( "r_strings", R_Strings_f );
- }
- /*
- -----------------------------------------------------------------------------
- Function:
- Parameters:
- Returns:
- Notes:
- -----------------------------------------------------------------------------
- */
- PUBLIC void R_Init()
- {
- char renderer_buffer[ 1000 ];
- char vendor_buffer[ 1000 ];
- int err;
- int a, b;
- Com_Printf( "\n------ Display Initialization ------\n" );
- Com_Printf( "Initializing OpenGL Subsystem\n" );
-
- R_Register();
- // set our "safe" modes
- gl_state.prev_mode = 0;
- viddef.width = 480;
- viddef.height = 320;
- // get various GL strings
- gl_config.vendor_string = (char *)pfglGetString( GL_VENDOR );
- Com_Printf( "GL_VENDOR: %s\n", gl_config.vendor_string );
-
- gl_config.renderer_string = (char *)pfglGetString( GL_RENDERER );
- Com_Printf( "GL_RENDERER: %s\n", gl_config.renderer_string );
-
- gl_config.version_string = (char *)pfglGetString( GL_VERSION );
- Com_Printf( "GL_VERSION: %s\n", gl_config.version_string );
-
- gl_config.extensions_string = (char *)pfglGetString( GL_EXTENSIONS );
- Com_Printf( "GL_EXTENSIONS: %s\n", gl_config.extensions_string );
- my_strlcpy( renderer_buffer, gl_config.renderer_string, sizeof( renderer_buffer ) );
- (void)my_strlwr( renderer_buffer );
- my_strlcpy( vendor_buffer, gl_config.vendor_string, sizeof( vendor_buffer ) );
- (void)my_strlwr( vendor_buffer );
- sscanf( gl_config.version_string, "%d.%d", &a, &b );
- if( a >= 1 && b >= 2 )
- {
- gl_config.Version_1_2 = true;
- }
- pfglGetIntegerv( GL_MAX_TEXTURE_SIZE, &glMaxTexSize );
- Com_Printf( "GL_MAX_TEXTURE_SIZE: %d\n", glMaxTexSize);
- GL_SetDefaultState();
- TM_Init();
- Font_Init();
- err = pfglGetError();
- if( err != GL_NO_ERROR )
- {
- Com_Printf( "glGetError() = 0x%x\n", err );
- }
- }
- /*
- -----------------------------------------------------------------------------
- Function:
- Parameters:
- Returns:
- Notes:
- -----------------------------------------------------------------------------
- */
- PUBLIC void R_Shutdown( void )
- {
- // Cmd_RemoveCommand ("modellist");
- // Cmd_RemoveCommand ("screenshot");
- // Cmd_RemoveCommand ("imagelist");
- // Cmd_RemoveCommand ("gl_strings");
- // Mod_FreeAll ();
- TM_Shutdown();
- /*
- ** shut down OS specific OpenGL stuff like contexts, etc.
- */
- GLimp_Shutdown();
- /*
- ** shutdown our OpenGL subsystem
- */
- #ifndef IPHONE
- OpenGL_Shutdown();
- #endif
- }
- /*
- -----------------------------------------------------------------------------
- Function:
- Parameters:
- Returns:
- Notes:
- -----------------------------------------------------------------------------
- */
- PUBLIC void R_EndFrame( void )
- {
- GLimp_EndFrame();
- }
- /*
- -----------------------------------------------------------------------------
- Function:
- Parameters:
- Returns:
- Notes:
- -----------------------------------------------------------------------------
- */
- PUBLIC void R_AppActivate( _boolean active )
- {
- GLimp_AppActivate( active );
- }
- /*
- -----------------------------------------------------------------------------
- Function:
- Parameters:
- Returns:
- Notes:
- -----------------------------------------------------------------------------
- */
- PUBLIC void GL_UpdateSwapInterval( void )
- {
- if ( gl_swapinterval->modified )
- {
- gl_swapinterval->modified = false;
- #ifdef _WIN32
- if ( pfwglSwapIntervalEXT )
- {
- pfwglSwapIntervalEXT( FloatToInt( gl_swapinterval->value ) );
- }
- #endif
- }
- }
- /*
- -----------------------------------------------------------------------------
- Function: PrintGLError -Print OpenGL error message.
- Parameters: err -[in] Error code.
- from -[in] function name that produced the error.
- Returns: Nothing.
- Notes:
- -----------------------------------------------------------------------------
- */
- PUBLIC void PrintGLError( W32 err, const char *from )
- {
- if( err == GL_NO_ERROR )
- {
- return;
- }
- if( from != "" )
- {
- Com_Printf( "\n\n\nGL Error: %s\n", from );
- }
- switch( err )
- {
- case GL_NO_ERROR:
- Com_Printf( "GL_NO_ERROR:\nNo error has been recorded. The value of this symbolic constant is guaranteed to be zero.\n" );
- break;
- case GL_INVALID_ENUM:
- Com_Printf( "GL_INVALID_ENUM:\nAn unacceptable value is specified for an enumerated argument. The offending function is ignored, having no side effect other than to set the error flag.\n" );
- break;
- case GL_INVALID_VALUE:
- Com_Printf( "GL_INVALID_VALUE:\nA numeric argument is out of range. The offending function is ignored, having no side effect other than to set the error flag.\n" );
- break;
- case GL_INVALID_OPERATION:
- Com_Printf( "GL_INVALID_OPERATION:\nThe specified operation is not allowed in the current state. The offending function is ignored, having no side effect other than to set the error flag.\n" );
- break;
- case GL_STACK_OVERFLOW:
- Com_Printf( "GL_STACK_OVERFLOW:\nThis function would cause a stack overflow. The offending function is ignored, having no side effect other than to set the error flag.\n" );
- break;
- case GL_STACK_UNDERFLOW:
- Com_Printf( "GL_STACK_UNDERFLOW:\nThis function would cause a stack underflow. The offending function is ignored, having no side effect other than to set the error flag.\n" );
- break;
- case GL_OUT_OF_MEMORY:
- Com_Printf( "GL_OUT_OF_MEMORY:\nThere is not enough memory left to execute the function. The state of OpenGL is undefined, except for the state of the error flags, after this error is recorded.\n" );
- break;
- default:
- Com_Printf( "Unknown GL error flag 0x%x\n", err );
- }
- }
|