diff options
Diffstat (limited to 'src/gl_main.c')
-rw-r--r-- | src/gl_main.c | 214 |
1 files changed, 3 insertions, 211 deletions
diff --git a/src/gl_main.c b/src/gl_main.c index dd8cde8..fc5247d 100644 --- a/src/gl_main.c +++ b/src/gl_main.c @@ -33,15 +33,6 @@ statCounters_t c; int registration_sequence; cvar_t *gl_partscale; -#if USE_JPG || USE_PNG -cvar_t *gl_screenshot_format; -#endif -#if USE_JPG -cvar_t *gl_screenshot_quality; -#endif -#if USE_PNG -cvar_t *gl_screenshot_compression; -#endif #if USE_CELSHADING cvar_t *gl_celshading; #endif @@ -633,176 +624,7 @@ void R_EndFrame( void ) { // qglFinish(); } -/* -============================================================================== - - SCREEN SHOTS - -============================================================================== -*/ - -#if USE_TGA || USE_JPG || USE_PNG -static void make_screenshot( const char *name, const char *ext, - img_save_t func, GLenum format, int param ) -{ - char buffer[MAX_OSPATH]; - byte *pixels; - qerror_t ret; - qhandle_t f; - int i; - - if( name && *name ) { - // save to user supplied name - f = FS_EasyOpenFile( buffer, sizeof( buffer ), FS_MODE_WRITE, - SCREENSHOTS_DIRECTORY "/", name, ext ); - if( !f ) { - return; - } - } else { - // find a file name to save it to - for( i = 0; i < 1000; i++ ) { - Q_snprintf( buffer, sizeof( buffer ), SCREENSHOTS_DIRECTORY "/quake%03d%s", i, ext ); - ret = FS_FOpenFile( buffer, &f, FS_MODE_WRITE|FS_FLAG_EXCL ); - if( f ) { - break; - } - if( ret != Q_ERR_EXIST ) { - Com_EPrintf( "Couldn't exclusively open %s for writing: %s\n", - buffer, Q_ErrorString( ret ) ); - return; - } - } - - if( i == 1000 ) { - Com_EPrintf( "All screenshot slots are full.\n" ); - return; - } - } - - pixels = FS_AllocTempMem( gl_config.vidWidth * gl_config.vidHeight * 3 ); - - qglReadPixels( 0, 0, gl_config.vidWidth, gl_config.vidHeight, format, - GL_UNSIGNED_BYTE, pixels ); - - ret = func( f, buffer, pixels, gl_config.vidWidth, gl_config.vidHeight, param ); - - FS_FreeFile( pixels ); - - FS_FCloseFile( f ); - - if( ret < 0 ) { - Com_EPrintf( "Couldn't write %s: %s\n", buffer, Q_ErrorString( ret ) ); - } else { - Com_Printf( "Wrote %s\n", buffer ); - } -} -#endif - -/* -================== -GL_ScreenShot_f - -Standard function to take a screenshot. Saves in default format unless user -overrides format with a second argument. Screenshot name can't be -specified. This function is always compiled in to give a meaningful warning -if no formats are available. -================== -*/ -static void GL_ScreenShot_f( void ) { -#if USE_JPG || USE_PNG - const char *s; - - if( Cmd_Argc() > 2 ) { - Com_Printf( "Usage: %s [format]\n", Cmd_Argv( 0 ) ); - return; - } - - if( Cmd_Argc() > 1 ) { - s = Cmd_Argv( 1 ); - } else { - s = gl_screenshot_format->string; - } - -#if USE_JPG - if( *s == 'j' ) { - make_screenshot( NULL, ".jpg", IMG_SaveJPG, GL_RGB, - gl_screenshot_quality->integer ); - return; - } -#endif - -#if USE_PNG - if( *s == 'p' ) { - make_screenshot( NULL, ".png", IMG_SavePNG, GL_RGB, - gl_screenshot_compression->integer ); - return; - } -#endif -#endif - -#if USE_TGA - make_screenshot( NULL, ".tga", IMG_SaveTGA, GL_BGR, 0 ); -#else - Com_Printf( "Can't take screenshot, TGA format not available.\n" ); -#endif -} - -/* -================== -GL_ScreenShotXXX_f - -Specialized function to take a screenshot in specified format. Screenshot name -can be also specified, as well as quality and compression options. -================== -*/ -#if USE_TGA -static void GL_ScreenShotTGA_f( void ) { - if( Cmd_Argc() > 2 ) { - Com_Printf( "Usage: %s [name]\n", Cmd_Argv( 0 ) ); - return; - } - - make_screenshot( Cmd_Argv( 1 ), ".tga", IMG_SaveTGA, GL_BGR, 0 ); -} -#endif - -#if USE_JPG -static void GL_ScreenShotJPG_f( void ) { - int quality; - - if( Cmd_Argc() > 3 ) { - Com_Printf( "Usage: %s [name] [quality]\n", Cmd_Argv( 0 ) ); - return; - } - - if( Cmd_Argc() > 2 ) { - quality = atoi( Cmd_Argv( 2 ) ); - } else { - quality = gl_screenshot_quality->integer; - } - - make_screenshot( Cmd_Argv( 1 ), ".jpg", IMG_SaveJPG, GL_RGB, quality ); -} -#endif - -#if USE_PNG -static void GL_ScreenShotPNG_f( void ) { - int compression; - - if( Cmd_Argc() > 3 ) { - Com_Printf( "Usage: %s [name] [compression]\n", Cmd_Argv( 0 ) ); - return; - } - - if( Cmd_Argc() > 2 ) { - compression = atoi( Cmd_Argv( 2 ) ); - } else { - compression = gl_screenshot_compression->integer; - } - - make_screenshot( Cmd_Argv( 1 ), ".png", IMG_SavePNG, GL_RGB, compression ); -} -#endif +// ============================================================================== static void GL_Strings_f( void ) { Com_Printf( "GL_VENDOR: %s\n", gl_config.vendorString ); @@ -818,41 +640,12 @@ static size_t GL_ViewCluster_m( char *buffer, size_t size ) { return Q_scnprintf( buffer, size, "%d", glr.viewcluster1 ); } -// ============================================================================== - -static const cmdreg_t gl_cmd[] = { - { "screenshot", GL_ScreenShot_f }, -#if USE_TGA - { "screenshottga", GL_ScreenShotTGA_f }, -#endif -#if USE_JPG - { "screenshotjpg", GL_ScreenShotJPG_f }, -#endif -#if USE_PNG - { "screenshotpng", GL_ScreenShotPNG_f }, -#endif - { "strings", GL_Strings_f }, - - { NULL } -}; - static void gl_novis_changed( cvar_t *self ) { glr.viewcluster1 = glr.viewcluster2 = -2; } static void GL_Register( void ) { gl_partscale = Cvar_Get( "gl_partscale", "2", 0 ); -#if USE_JPG - gl_screenshot_format = Cvar_Get( "gl_screenshot_format", "jpg", 0 ); -#elif USE_PNG - gl_screenshot_format = Cvar_Get( "gl_screenshot_format", "png", 0 ); -#endif -#if USE_JPG - gl_screenshot_quality = Cvar_Get( "gl_screenshot_quality", "100", 0 ); -#endif -#if USE_PNG - gl_screenshot_compression = Cvar_Get( "gl_screenshot_compression", "6", 0 ); -#endif #if USE_CELSHADING gl_celshading = Cvar_Get( "gl_celshading", "0", 0 ); #endif @@ -892,14 +685,13 @@ static void GL_Register( void ) { gl_showerrors = Cvar_Get( "gl_showerrors", "1", 0 ); gl_fragment_program = Cvar_Get( "gl_fragment_program", "1", 0 ); gl_vertex_buffer_object = Cvar_Get( "gl_vertex_buffer_object", "1", CVAR_FILES ); - - Cmd_Register( gl_cmd ); + Cmd_AddCommand( "strings", GL_Strings_f ); Cmd_AddMacro( "gl_viewcluster", GL_ViewCluster_m ); } static void GL_Unregister( void ) { - Cmd_Deregister( gl_cmd ); + Cmd_RemoveCommand( "strings" ); } static qboolean GL_SetupExtensions( void ) { |