* Anisotropic texture filtering (from Echon)

This commit is contained in:
Tim Angus 2006-04-22 22:14:15 +00:00
parent 40d5eee8ef
commit 68b9eb3fba
8 changed files with 126 additions and 25 deletions

59
README
View file

@ -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)

View file

@ -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 );
}

View file

@ -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 );

View file

@ -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;

View file

@ -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

View file

@ -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)

View file

@ -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 )

View file

@ -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" );
}
}
/*