- Added r_mode -2 for using display resolution.

- Changed q3_ui's very high video settings use display resolution.
This commit is contained in:
Zack Middleton 2011-08-11 05:14:42 +00:00
parent 8e689739f4
commit 1609d1c42b
3 changed files with 41 additions and 8 deletions

View file

@ -297,7 +297,7 @@ static graphicsoptions_t s_graphicsoptions;
static InitialVideoOptions_s s_ivo_templates[] = static InitialVideoOptions_s s_ivo_templates[] =
{ {
{ {
6, qtrue, 3, 0, 2, 2, 1, 0, qtrue 6, qtrue, 3, 0, 2, 2, 1, 0, qtrue // Note: If r_availableModes is found, mode is changed to -2.
}, },
{ {
4, qtrue, 2, 0, 2, 1, 1, 0, qtrue // JDC: this was tq 3 4, qtrue, 2, 0, 2, 1, 1, 0, qtrue // JDC: this was tq 3
@ -372,6 +372,10 @@ static int GraphicsOptions_FindBuiltinResolution( int mode )
if( !resolutionsDetected ) if( !resolutionsDetected )
return mode; return mode;
// Display resolution
if( mode == 0 )
return -2;
if( mode < 0 ) if( mode < 0 )
return -1; return -1;
@ -396,6 +400,10 @@ static int GraphicsOptions_FindDetectedResolution( int mode )
if( !resolutionsDetected ) if( !resolutionsDetected )
return mode; return mode;
// Display resolution
if( mode == -2 )
return 0;
if( mode < 0 ) if( mode < 0 )
return -1; return -1;
@ -425,11 +433,16 @@ static void GraphicsOptions_GetAspectRatios( void )
char str[ sizeof(ratioBuf[0]) ]; char str[ sizeof(ratioBuf[0]) ];
// calculate resolution's aspect ratio // calculate resolution's aspect ratio
x = strchr( resolutions[r], 'x' ) + 1; x = strchr( resolutions[r], 'x' );
Q_strncpyz( str, resolutions[r], x-resolutions[r] ); if (x) {
w = atoi( str ); x++;
h = atoi( x ); Q_strncpyz( str, resolutions[r], x-resolutions[r] );
Com_sprintf( str, sizeof(str), "%.2f:1", (float)w / (float)h ); w = atoi( str );
h = atoi( x );
Com_sprintf( str, sizeof(str), "%.2f:1", (float)w / (float)h );
} else {
Q_strncpyz(str, "Unknown", sizeof(str));
}
// rename common ratios ("1.33:1" -> "4:3") // rename common ratios ("1.33:1" -> "4:3")
for( i = 0; knownRatios[i][0]; i++ ) { for( i = 0; knownRatios[i][0]; i++ ) {
@ -489,6 +502,13 @@ static void GraphicsOptions_GetResolutions( void )
{ {
char* s = resbuf; char* s = resbuf;
unsigned int i = 0; unsigned int i = 0;
// Add display resolution video mode
detectedResolutions[i++] = "Display Resolution";
// Use display resolution in "Very High Quality" template
s_ivo_templates[0].mode = -2;
while( s && i < ARRAY_LEN(detectedResolutions)-1 ) while( s && i < ARRAY_LEN(detectedResolutions)-1 )
{ {
detectedResolutions[i++] = s; detectedResolutions[i++] = s;

View file

@ -292,14 +292,17 @@ qboolean R_GetModeInfo( int *width, int *height, float *windowAspect, int mode )
vidmode_t *vm; vidmode_t *vm;
float pixelAspect; float pixelAspect;
if ( mode < -1 ) { if ( mode < -2 ) {
return qfalse; return qfalse;
} }
if ( mode >= s_numVidModes ) { if ( mode >= s_numVidModes ) {
return qfalse; return qfalse;
} }
if ( mode == -1 ) { if ( mode == -2 ) {
// Must set width and height to display size before calling this function!
pixelAspect = 1.0f;
} else if ( mode == -1 ) {
*width = r_customwidth->integer; *width = r_customwidth->integer;
*height = r_customheight->integer; *height = r_customheight->integer;
pixelAspect = r_customPixelAspect->value; pixelAspect = r_customPixelAspect->value;

View file

@ -248,6 +248,16 @@ static int GLimp_SetMode(int mode, qboolean fullscreen, qboolean noborder)
} }
} }
if( videoInfo->current_h > 0 ) {
glConfig.vidWidth = videoInfo->current_w;
glConfig.vidHeight = videoInfo->current_h;
} else {
glConfig.vidWidth = 480;
glConfig.vidHeight = 640;
ri.Printf( PRINT_ALL,
"Cannot determine display resolution, assuming 640x480\n" );
}
ri.Printf (PRINT_ALL, "...setting mode %d:", mode ); ri.Printf (PRINT_ALL, "...setting mode %d:", mode );
if ( !R_GetModeInfo( &glConfig.vidWidth, &glConfig.vidHeight, &glConfig.windowAspect, mode ) ) if ( !R_GetModeInfo( &glConfig.vidWidth, &glConfig.vidHeight, &glConfig.windowAspect, mode ) )