From ad42e7c89528412b6f5be4da92d98022bb9dd4ef Mon Sep 17 00:00:00 2001 From: Bradley Bell Date: Thu, 20 May 2004 05:16:21 +0000 Subject: [PATCH] add anisotropic texture filtering suport (d1x r1.33, r1.32, r1.23, r1.32) --- ChangeLog | 4 ++++ arch/ogl/gr.c | 19 ++++++++++++++++--- arch/ogl/ogl.c | 10 ++++++++-- include/ogl_init.h | 8 ++++++++ main/inferno.c | 3 ++- 5 files changed, 38 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index a8f524c0..98a82c20 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2004-05-19 Matthew Mueller + * 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) diff --git a/arch/ogl/gr.c b/arch/ogl/gr.c index 92a1fcb5..008fdd79 100644 --- a/arch/ogl/gr.c +++ b/arch/ogl/gr.c @@ -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; diff --git a/arch/ogl/ogl.c b/arch/ogl/ogl.c index fa3c9707..5957ae0a 100644 --- a/arch/ogl/ogl.c +++ b/arch/ogl/ogl.c @@ -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); } diff --git a/include/ogl_init.h b/include/ogl_init.h index bcf60a70..b00a232c 100644 --- a/include/ogl_init.h +++ b/include/ogl_init.h @@ -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; diff --git a/main/inferno.c b/main/inferno.c index 4c17c09a..4262b4a5 100644 --- a/main/inferno.c +++ b/main/inferno.c @@ -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 %s\n", "set maximum degree of anisotropy to "); 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 -- 2.39.2