--- src/engine/rendergl.cpp 2006-04-24 14:20:25.000000000 -0500 +++ src/engine/rendergl.cpp 2006-04-24 18:50:02.000000000 -0500 @@ -79,6 +79,24 @@ return SDL_GL_GetProcAddress(name); } +bool hasAF = false; +float AFscale = 1.0; +float maxAF = 1.0; + +void afscale(char* f_str) +{ + float scale = strtof(f_str, NULL); + if(scale > maxAF) + AFscale = maxAF; + else if(scale < 1.0) + AFscale = 1.0; + else + AFscale = scale; + conoutf("anisotropic filtering scale set to %.1f", AFscale); +} + +COMMAND(afscale, ARG_1STR); + void gl_init(int w, int h) { #define fogvalues 0.5f, 0.6f, 0.7f, 1.0f @@ -148,6 +166,17 @@ glEnable(GL_FRAGMENT_PROGRAM_ARB); }; + if(!strstr(exts, "GL_EXT_texture_filter_anisotropic")) + { + conoutf("WARNING: no anisotropic filtering support"); + } + else + { + hasAF = true; + conoutf("using anisotropic filtering for textures"); + glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &maxAF); + } + purgetextures(); if(!(qsphere = gluNewQuadric())) fatal("glu sphere"); @@ -187,6 +216,7 @@ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, clamp ? GL_CLAMP_TO_EDGE : GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, mipit ? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR); + if(hasAF) {glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, AFscale);}//should this go here or in afscale? glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); int mode = bpp==24 ? GL_RGB : GL_RGBA; if(mipit) { if(gluBuild2DMipmaps(GL_TEXTURE_2D, mode, w, h, mode, GL_UNSIGNED_BYTE, pixels)) fatal("could not build mipmaps"); }