diff --git a/README b/README index e4b35056..bb62da5c 100644 --- a/README +++ b/README @@ -92,34 +92,43 @@ The defaults for these variables differ depending on the target platform. ------------------------------------------------------------------ Console ----- New cvars - cl_autoRecordDemo - record a new demo on each map change - cl_aviFrameRate - the framerate to use when capturing video - cl_aviMotionJpeg - use the mjpeg codec when capturing video + cl_autoRecordDemo - record a new demo on each map change + cl_aviFrameRate - the framerate to use when capturing video + cl_aviMotionJpeg - use the mjpeg codec when capturing video - s_useOpenAL - use the OpenAL sound backend if available - s_alPrecache - cache OpenAL sounds before use - s_alGain - the value of AL_GAIN for each source - s_alSources - the total number of sources (memory) to allocate - s_alDopplerFactor - the value passed to alDopplerFactor - s_alDopplerSpeed - the value passed to alDopplerVelocity - s_alMinDistance - the value of AL_REFERENCE_DISTANCE for each source - s_alRolloff - the value of AL_ROLLOFF_FACTOR for each source - s_alMaxSpeakerDistance - ET_SPEAKERS beyond this distance are culled - s_alDriver - which OpenAL library to use + s_useOpenAL - use the OpenAL sound backend if available + s_alPrecache - cache OpenAL sounds before use + s_alGain - the value of AL_GAIN for each source + s_alSources - the total number of sources (memory) to + allocate + s_alDopplerFactor - the value passed to alDopplerFactor + s_alDopplerSpeed - the value passed to alDopplerVelocity + s_alMinDistance - the value of AL_REFERENCE_DISTANCE for + each source + s_alRolloff - the value of AL_ROLLOFF_FACTOR for each + source + s_alMaxSpeakerDistance - ET_SPEAKERS beyond this distance are + culled + s_alDriver - which OpenAL library to use - s_sdlBits - SDL bit resolution - s_sdlSpeed - SDL sample rate - s_sdlChannels - SDL number of channels - s_sdlDevSamps - SDL DMA buffer size override - s_sdlMixSamps - SDL mix buffer size override + s_sdlBits - SDL bit resolution + s_sdlSpeed - SDL sample rate + s_sdlChannels - SDL number of channels + s_sdlDevSamps - SDL DMA buffer size override + s_sdlMixSamps - SDL mix buffer size override - ttycon_ansicolor - enable use of ANSI escape codes in the tty - r_GLlibCoolDownMsec - wait for some milliseconds to close GL library - com_altivec - enable use of altivec on PowerPC systems - s_backend - read only, indicates the current sound backend - in_shiftedKeys - non-SDL Linux only. Enables binding to shifted keys - cl_consoleHistory - read only, stores the console history - cl_platformSensitivity - read only, indicates the mouse input scaling + ttycon_ansicolor - enable use of ANSI escape codes in the tty + r_GLlibCoolDownMsec - wait for some milliseconds to close GL + library + com_altivec - enable use of altivec on PowerPC systems + s_backend - read only, indicates the current sound + backend + in_shiftedKeys - non-SDL Linux only. Enables binding to + shifted keys + cl_consoleHistory - read only, stores the console history + cl_platformSensitivity - read only, indicates the mouse input + scaling + r_ext_texture_filter_anisotropic - anisotropic texture filtering New commands video [filename] - start video capture (use with demo command) diff --git a/code/renderer/tr_image.c b/code/renderer/tr_image.c index c227388c..88d0ec28 100644 --- a/code/renderer/tr_image.c +++ b/code/renderer/tr_image.c @@ -699,11 +699,18 @@ done: if (mipmap) { + if ( glConfig.textureFilterAnisotropic ) + qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, + (GLint)Com_Clamp( 1, glConfig.maxAnisotropy, r_ext_max_anisotropy->integer ) ); + qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min); qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max); } else { + if ( glConfig.textureFilterAnisotropic ) + qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1 ); + qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); } diff --git a/code/renderer/tr_init.c b/code/renderer/tr_init.c index bf234b49..7300978a 100644 --- a/code/renderer/tr_init.c +++ b/code/renderer/tr_init.c @@ -81,6 +81,8 @@ cvar_t *r_ext_gamma_control; cvar_t *r_ext_multitexture; cvar_t *r_ext_compiled_vertex_array; cvar_t *r_ext_texture_env_add; +cvar_t *r_ext_texture_filter_anisotropic; +cvar_t *r_ext_max_anisotropy; cvar_t *r_ignoreGLErrors; cvar_t *r_logFile; @@ -910,6 +912,10 @@ void R_Register( void ) r_ext_texture_env_add = ri.Cvar_Get( "r_ext_texture_env_add", "1", CVAR_ARCHIVE | CVAR_LATCH); #endif + r_ext_texture_filter_anisotropic = ri.Cvar_Get( "r_ext_texture_filter_anisotropic", + "0", CVAR_ARCHIVE | CVAR_LATCH ); + r_ext_max_anisotropy = ri.Cvar_Get( "r_ext_max_anisotropy", "2", CVAR_ARCHIVE | CVAR_LATCH ); + r_picmip = ri.Cvar_Get ("r_picmip", "1", CVAR_ARCHIVE | CVAR_LATCH ); r_roundImagesDown = ri.Cvar_Get ("r_roundImagesDown", "1", CVAR_ARCHIVE | CVAR_LATCH ); r_colorMipLevels = ri.Cvar_Get ("r_colorMipLevels", "0", CVAR_LATCH ); diff --git a/code/renderer/tr_local.h b/code/renderer/tr_local.h index 0fecbcd3..6fe7ee9f 100644 --- a/code/renderer/tr_local.h +++ b/code/renderer/tr_local.h @@ -1041,6 +1041,9 @@ extern cvar_t *r_ext_multitexture; extern cvar_t *r_ext_compiled_vertex_array; extern cvar_t *r_ext_texture_env_add; +extern cvar_t *r_ext_texture_filter_anisotropic; +extern cvar_t *r_ext_max_anisotropy; + extern cvar_t *r_nobind; // turns off binding to appropriate textures extern cvar_t *r_singleShader; // make most world faces use default shader extern cvar_t *r_roundImagesDown; diff --git a/code/renderer/tr_types.h b/code/renderer/tr_types.h index 12b526e2..4ed880ae 100644 --- a/code/renderer/tr_types.h +++ b/code/renderer/tr_types.h @@ -200,6 +200,9 @@ typedef struct { qboolean isFullscreen; qboolean stereoEnabled; qboolean smpActive; // dual processor + + qboolean textureFilterAnisotropic; + int maxAnisotropy; } glconfig_t; // FIXME: VM should be OS agnostic .. in theory diff --git a/code/unix/linux_glimp.c b/code/unix/linux_glimp.c index 44ffeb37..16a0edae 100644 --- a/code/unix/linux_glimp.c +++ b/code/unix/linux_glimp.c @@ -1323,6 +1323,30 @@ static void GLW_InitExtensions( void ) ri.Printf( PRINT_ALL, "...GL_EXT_compiled_vertex_array not found\n" ); } + glConfig.textureFilterAnisotropic = qfalse; + if ( strstr( glConfig.extensions_string, "GL_EXT_texture_filter_anisotropic" ) ) + { + if ( r_ext_texture_filter_anisotropic->integer ) { + qglGetIntegerv( GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &glConfig.maxAnisotropy ); + if ( glConfig.maxAnisotropy <= 0 ) { + ri.Printf( PRINT_ALL, "...GL_EXT_texture_filter_anisotropic not properly supported!\n" ); + glConfig.maxAnisotropy = 0; + } + else + { + ri.Printf( PRINT_ALL, "...using GL_EXT_texture_filter_anisotropic (max: %i)\n", glConfig.maxAnisotropy ); + glConfig.textureFilterAnisotropic = qtrue; + } + } + else + { + ri.Printf( PRINT_ALL, "...ignoring GL_EXT_texture_filter_anisotropic\n" ); + } + } + else + { + ri.Printf( PRINT_ALL, "...GL_EXT_texture_filter_anisotropic not found\n" ); + } } static void GLW_InitGamma(void) diff --git a/code/unix/sdl_glimp.c b/code/unix/sdl_glimp.c index 771bb239..0c6f8dcb 100644 --- a/code/unix/sdl_glimp.c +++ b/code/unix/sdl_glimp.c @@ -802,6 +802,30 @@ static void GLW_InitExtensions( void ) ri.Printf( PRINT_ALL, "...GL_EXT_compiled_vertex_array not found\n" ); } + glConfig.textureFilterAnisotropic = qfalse; + if ( strstr( glConfig.extensions_string, "GL_EXT_texture_filter_anisotropic" ) ) + { + if ( r_ext_texture_filter_anisotropic->integer ) { + qglGetIntegerv( GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &glConfig.maxAnisotropy ); + if ( glConfig.maxAnisotropy <= 0 ) { + ri.Printf( PRINT_ALL, "...GL_EXT_texture_filter_anisotropic not properly supported!\n" ); + glConfig.maxAnisotropy = 0; + } + else + { + ri.Printf( PRINT_ALL, "...using GL_EXT_texture_filter_anisotropic (max: %i)\n", glConfig.maxAnisotropy ); + glConfig.textureFilterAnisotropic = qtrue; + } + } + else + { + ri.Printf( PRINT_ALL, "...ignoring GL_EXT_texture_filter_anisotropic\n" ); + } + } + else + { + ri.Printf( PRINT_ALL, "...GL_EXT_texture_filter_anisotropic not found\n" ); + } } static void GLW_InitGamma( void ) diff --git a/code/win32/win_glimp.c b/code/win32/win_glimp.c index 4f97f042..f9b1289f 100644 --- a/code/win32/win_glimp.c +++ b/code/win32/win_glimp.c @@ -1111,6 +1111,31 @@ static void GLW_InitExtensions( void ) { ri.Printf( PRINT_ALL, "...WGL_3DFX_gamma_control not found\n" ); } + + glConfig.textureFilterAnisotropic = qfalse; + if ( strstr( glConfig.extensions_string, "GL_EXT_texture_filter_anisotropic" ) ) + { + if ( r_ext_texture_filter_anisotropic->integer ) { + qglGetIntegerv( GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &glConfig.maxAnisotropy ); + if ( glConfig.maxAnisotropy <= 0 ) { + ri.Printf( PRINT_ALL, "...GL_EXT_texture_filter_anisotropic not properly supported!\n" ); + glConfig.maxAnisotropy = 0; + } + else + { + ri.Printf( PRINT_ALL, "...using GL_EXT_texture_filter_anisotropic (max: %i)\n", glConfig.maxAnisotropy ); + glConfig.textureFilterAnisotropic = qtrue; + } + } + else + { + ri.Printf( PRINT_ALL, "...ignoring GL_EXT_texture_filter_anisotropic\n" ); + } + } + else + { + ri.Printf( PRINT_ALL, "...GL_EXT_texture_filter_anisotropic not found\n" ); + } } /*