aboutsummaryrefslogtreecommitdiffstats
path: root/code/renderer
diff options
context:
space:
mode:
authortma <tma@edf5b092-35ff-0310-97b2-ce42778d08ea>2006-04-22 22:14:15 +0000
committertma <tma@edf5b092-35ff-0310-97b2-ce42778d08ea>2006-04-22 22:14:15 +0000
commit005094d39f4371eb7fa09671ab6b067c0caf0c22 (patch)
tree3ce1bfcd93ba4324d75ee8ca149d0cf190cbe8e0 /code/renderer
parent5aa090003b6c47a4d10f11975d7f22a2827956b0 (diff)
downloadioquake3-aero-005094d39f4371eb7fa09671ab6b067c0caf0c22.tar.gz
ioquake3-aero-005094d39f4371eb7fa09671ab6b067c0caf0c22.zip
* Anisotropic texture filtering (from Echon)
git-svn-id: svn://svn.icculus.org/quake3/trunk@719 edf5b092-35ff-0310-97b2-ce42778d08ea
Diffstat (limited to 'code/renderer')
-rw-r--r--code/renderer/tr_image.c7
-rw-r--r--code/renderer/tr_init.c6
-rw-r--r--code/renderer/tr_local.h3
-rw-r--r--code/renderer/tr_types.h3
4 files changed, 19 insertions, 0 deletions
diff --git a/code/renderer/tr_image.c b/code/renderer/tr_image.c
index c227388..88d0ec2 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 bf234b4..7300978 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 0fecbcd..6fe7ee9 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 12b526e..4ed880a 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