add anisotropic texture filtering suport (d1x r1.33, r1.32, r1.23, r1.32)

This commit is contained in:
Bradley Bell 2004-05-20 05:16:21 +00:00
parent 730b28ef61
commit ad42e7c895
5 changed files with 38 additions and 6 deletions

View file

@ -1,5 +1,9 @@
2004-05-19 Matthew Mueller <donut@dakotacom.net>
* arch/ogl/gr.c, arch/ogl/ogl.c, include/ogl_init.h,
main/inferno.c: add anisotropic texture filtering suport (d1x
r1.33, r1.32, r1.23, r1.32)
* arch/ogl/ogl.c: make RENDERSTATS show size of color/depth buffer
too (d1x r1.31)

View file

@ -1,4 +1,4 @@
/* $Id: gr.c,v 1.22 2004-05-20 03:31:31 btb Exp $ */
/* $Id: gr.c,v 1.23 2004-05-20 05:15:55 btb Exp $ */
/*
*
* OGL video functions. - Added 9/15/99 Matthew Mueller
@ -163,6 +163,8 @@ const char *gl_vendor,*gl_renderer,*gl_version,*gl_extensions;
void ogl_get_verinfo(void)
{
int t, arb_max_textures = -1, sgi_max_textures = -1;
float anisotropic_max = 0;
gl_vendor=glGetString(GL_VENDOR);
gl_renderer=glGetString(GL_RENDERER);
gl_version=glGetString(GL_VERSION);
@ -193,6 +195,10 @@ void ogl_get_verinfo(void)
#endif
ogl_nv_texture_env_combine4_ok = (strstr(gl_extensions, "GL_NV_texture_env_combine4") != 0);
ogl_ext_texture_filter_anisotropic_ok = (strstr(gl_extensions, "GL_EXT_texture_filter_anisotropic") != 0);
if (ogl_ext_texture_filter_anisotropic_ok)
glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &anisotropic_max);
//add driver specific hacks here. whee.
if ((stricmp(gl_renderer,"Mesa NVIDIA RIVA 1.0\n")==0 || stricmp(gl_renderer,"Mesa NVIDIA RIVA 1.2\n")==0) && stricmp(gl_version,"1.2 Mesa 3.0")==0){
ogl_intensity4_ok=0;//ignores alpha, always black background instead of transparent.
@ -242,7 +248,7 @@ void ogl_get_verinfo(void)
}
con_printf(CON_VERBOSE, "gl_arb_multitexture:%i(%i units) gl_sgis_multitexture:%i(%i units) gl_nv_texture_env_combine4:%i\n", ogl_arb_multitexture_ok, arb_max_textures, ogl_sgis_multitexture_ok, sgi_max_textures, ogl_nv_texture_env_combine4_ok);
con_printf(CON_VERBOSE, "gl_intensity4:%i gl_luminance4_alpha4:%i gl_rgba2:%i gl_readpixels:%i gl_gettexlevelparam:%i gl_setgammaramp_ok:%i\n",ogl_intensity4_ok,ogl_luminance4_alpha4_ok,ogl_rgba2_ok,ogl_readpixels_ok,ogl_gettexlevelparam_ok, ogl_setgammaramp_ok);
con_printf(CON_VERBOSE, "gl_intensity4:%i gl_luminance4_alpha4:%i gl_rgba2:%i gl_readpixels:%i gl_gettexlevelparam:%i gl_setgammaramp_ok:%i gl_ext_texture_filter_anisotropic:%i(%f max)\n", ogl_intensity4_ok, ogl_luminance4_alpha4_ok, ogl_rgba2_ok, ogl_readpixels_ok, ogl_gettexlevelparam_ok, ogl_setgammaramp_ok, ogl_ext_texture_filter_anisotropic_ok, anisotropic_max);
}
@ -428,7 +434,14 @@ int gr_init()
GL_texminfilt=ogl_atotexfilti(Args[t+1],1);
}
GL_needmipmaps=ogl_testneedmipmaps(GL_texminfilt);
mprintf((0,"gr_init: texmagfilt:%x texminfilt:%x needmipmaps=%i\n",GL_texmagfilt,GL_texminfilt,GL_needmipmaps));
if ((t = FindArg("-gl_anisotropy")) || (t = FindArg("-gl_anisotropic")))
{
GL_texanisofilt=atof(Args[t + 1]);
}
mprintf((0,"gr_init: texmagfilt:%x texminfilt:%x needmipmaps=%i anisotropic:%f\n",GL_texmagfilt,GL_texminfilt,GL_needmipmaps,GL_texanisofilt));
if ((t=FindArg("-gl_vidmem"))){
ogl_mem_target=atoi(Args[t+1])*1024*1024;

View file

@ -1,4 +1,4 @@
/* $Id: ogl.c,v 1.19 2004-05-20 05:02:53 btb Exp $ */
/* $Id: ogl.c,v 1.20 2004-05-20 05:16:00 btb Exp $ */
/*
*
* Graphics support functions for OpenGL.
@ -65,6 +65,7 @@ unsigned char *ogl_pal=gr_palette;
int GL_texmagfilt=GL_NEAREST;
int GL_texminfilt=GL_NEAREST;
float GL_texanisofilt = 0;
int GL_needmipmaps=0;
int last_width=-1,last_height=-1;
@ -87,6 +88,7 @@ int ogl_arb_multitexture_ok=0;
int ogl_sgis_multitexture_ok=0;
#endif
int ogl_nv_texture_env_combine4_ok = 0;
int ogl_ext_texture_filter_anisotropic_ok = 0;
int sphereh=0;
int cross_lh[2]={0,0};
@ -1517,7 +1519,11 @@ void ogl_loadtexture(unsigned char * data, int dxo,int dyo, ogl_texture *tex)
if (tex->wantmip){
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_texmagfilt);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_texminfilt);
}else{
if (ogl_ext_texture_filter_anisotropic_ok && GL_texanisofilt)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, GL_texanisofilt);
}
else
{
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
}

View file

@ -98,8 +98,16 @@ extern int ogl_gettexlevelparam_ok;
#endif
extern int ogl_nv_texture_env_combine4_ok;
#ifndef GL_EXT_texture_filter_anisotropic
#define GL_EXT_texture_filter_anisotropic 1
#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE
#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF
#endif
extern int ogl_ext_texture_filter_anisotropic_ok;
extern int gl_initialized;
extern int GL_texmagfilt,GL_texminfilt,GL_needmipmaps;
extern float GL_texanisofilt;
extern int gl_reticle;
extern int active_texture_unit;

View file

@ -1,4 +1,4 @@
/* $Id: inferno.c,v 1.75 2004-05-20 01:29:17 btb Exp $ */
/* $Id: inferno.c,v 1.76 2004-05-20 05:16:21 btb Exp $ */
/*
THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
@ -1031,6 +1031,7 @@ void print_commandline_help()
printf(" -gl_mipmap %s\n", "set gl texture filters to \"standard\" (bilinear) mipmapping");
printf(" -gl_trilinear %s\n", "set gl texture filters to trilinear mipmapping");
printf( " -gl_simple %s\n","set gl texture filters to gl_nearest for \"original\" look. (default)");
printf(" -gl_anisotropy <f> %s\n", "set maximum degree of anisotropy to <f>");
printf( " -gl_alttexmerge %s\n","use new texmerge, usually uses less ram (default)");
printf( " -gl_stdtexmerge %s\n","use old texmerge, uses more ram, but _might_ be a bit faster");
#ifdef GR_SUPPORTS_FULLSCREEN_TOGGLE