1
0
Fork 0
forked from fte/fteqw

Anisotropic Filtering

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@1655 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Lance 2005-12-01 11:40:45 +00:00
parent 96c5dd71ec
commit a42d9dac20

View file

@ -26,6 +26,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "glquake.h"
#include "shader.h"
#include <stdlib.h> // is this needed for atoi?
#include <stdio.h> // is this needed for atoi?
//#define GL_USE8BITTEX
int glx, gly, glwidth, glheight;
@ -105,6 +108,8 @@ int gl_alpha_format = 4;
int gl_filter_min = GL_LINEAR_MIPMAP_NEAREST;
int gl_filter_max = GL_LINEAR;
int gl_anisotropy_factor = 1;
int gl_anisotropy_factor_max = 0;
int texels;
@ -574,6 +579,61 @@ glmode_t modes[] = {
{"GL_LINEAR_MIPMAP_LINEAR", "ll", GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR}
};
// Control the anisotropy filtering. ~ Moodles
void GLDraw_Anisotropy_f (void)
{
gltexture_t *glt;
char *arg;
int param;
if (!gl_config.ext_texture_filter_anisotropic)
{
Con_Printf("Ignoring anisotropy (not supported)\n");
return;
}
qglGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &gl_anisotropy_factor_max); // im lazy
arg = Cmd_Argv(1);
param = atoi(arg); // I know this isn't gcc compatible, but im no lunix programmer so someone can fix it
if (Cmd_Argc() == 1)
{
Con_Printf("Maximum filtering factor: %d\n",gl_anisotropy_factor_max);
Con_Printf("0 = off, 1 = off, 2 and beyond = on\n");
//insert code that detects if user has forced AF through drivers
// because it has no effect if it is forced
if ((gl_anisotropy_factor == 0) || (gl_anisotropy_factor == 1))
{
Con_Printf("Anisotropic Filtering Factor: off\n");
}
else
{
Con_Printf("Current Anisotopic Filtering Factor: %d\n",gl_anisotropy_factor);
}
return;
}
gl_anisotropy_factor = param;
Con_Printf("Attempting to set Anisotopic Filtering Factor: %d\n",gl_anisotropy_factor);
/* change all the existing max anisotropy settings */
for (glt = gltextures; glt ; glt = glt->next) //redo anisotropic filtering when map is changed
{
if (glt->mipmap)
{
//qglBindTexture (GL_TEXTURE_2D, glt->texnum);
GL_Bind (glt->texnum);
qglTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT,gl_anisotropy_factor);
}
}
}
/*
===============
Draw_TextureMode_f
@ -1079,6 +1139,8 @@ void GLDraw_Init (void)
memset(scrap_allocated, 0, sizeof(scrap_allocated));
Cmd_AddRemCommand ("gl_texture_anisotropic_filtering", &GLDraw_Anisotropy_f);
GLDraw_ReInit();
R_BackendInit();
@ -1099,6 +1161,8 @@ void GLDraw_Init (void)
void GLDraw_DeInit (void)
{
Cmd_RemoveCommand("gl_texturemode");
Cmd_RemoveCommand ("gl_texture_anisotropic_filtering");
draw_disc = NULL;
if (uploadmemorybuffer)
@ -2996,6 +3060,10 @@ done:
if (gl_config.sgis_generate_mipmap&&mipmap)
qglTexParameterf(GL_TEXTURE_2D, GL_GENERATE_MIPMAP_SGIS, GL_FALSE);
if (gl_config.ext_texture_filter_anisotropic)
{
qglTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT,gl_anisotropy_factor); // without this, you could loose anisotropy on mapchange
}
if (mipmap)
{