diff -Naurw Irrlicht/CD3D8Driver.cpp Irrlicht/CD3D8Driver.cpp --- Irrlicht/CD3D8Driver.cpp 2005-09-21 19:37:04.000000000 +0200 +++ Irrlicht/CD3D8Driver.cpp 2005-10-31 11:02:08.000000000 +0100 @@ -1398,22 +1329,91 @@ pID3DDevice->SetMaterial(&mat); } - // Bilinear and/or trilinear - if ((resetAllRenderstates || lastmaterial.BilinearFilter != material.BilinearFilter - || lastmaterial.TrilinearFilter != material.TrilinearFilter)) - { - if (material.BilinearFilter || material.TrilinearFilter) + // Anisotropic or Bilinear and/or trilinear + if (resetAllRenderstates || lastmaterial.BilinearFilter != material.BilinearFilter + || lastmaterial.TrilinearFilter != material.TrilinearFilter + || lastmaterial.AnisotropicFilter != material.AnisotropicFilter ) + { + if( material.BilinearFilter || material.TrilinearFilter || material.AnisotropicFilter ) + { + if( material.AnisotropicFilter ) + { + u32 anisotropyLevel = material.AnisotropyLevel > Caps.MaxAnisotropy ? Caps.MaxAnisotropy : material.AnisotropyLevel; + + pID3DDevice->SetTextureStageState( 0, D3DTSS_MAGFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetTextureStageState( 0, D3DTSS_MINFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetTextureStageState( 0, D3DTSS_MIPFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetTextureStageState( 0, D3DTSS_MAXANISOTROPY, anisotropyLevel ); + + pID3DDevice->SetTextureStageState( 1, D3DTSS_MAGFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetTextureStageState( 1, D3DTSS_MINFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetTextureStageState( 1, D3DTSS_MIPFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetTextureStageState( 1, D3DTSS_MAXANISOTROPY, anisotropyLevel ); + + pID3DDevice->SetTextureStageState( 2, D3DTSS_MAGFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetTextureStageState( 2, D3DTSS_MINFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetTextureStageState( 2, D3DTSS_MIPFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetTextureStageState( 2, D3DTSS_MAXANISOTROPY, anisotropyLevel ); + + pID3DDevice->SetTextureStageState( 3, D3DTSS_MAGFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetTextureStageState( 3, D3DTSS_MINFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetTextureStageState( 3, D3DTSS_MIPFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetTextureStageState( 3, D3DTSS_MAXANISOTROPY, anisotropyLevel ); + + pID3DDevice->SetTextureStageState( 4, D3DTSS_MAGFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetTextureStageState( 4, D3DTSS_MINFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetTextureStageState( 4, D3DTSS_MIPFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetTextureStageState( 4, D3DTSS_MAXANISOTROPY, anisotropyLevel ); + + pID3DDevice->SetTextureStageState( 5, D3DTSS_MAGFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetTextureStageState( 5, D3DTSS_MINFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetTextureStageState( 5, D3DTSS_MIPFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetTextureStageState( 5, D3DTSS_MAXANISOTROPY, anisotropyLevel ); + + pID3DDevice->SetTextureStageState( 6, D3DTSS_MAGFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetTextureStageState( 6, D3DTSS_MINFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetTextureStageState( 6, D3DTSS_MIPFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetTextureStageState( 6, D3DTSS_MAXANISOTROPY, anisotropyLevel ); + + pID3DDevice->SetTextureStageState( 7, D3DTSS_MAGFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetTextureStageState( 7, D3DTSS_MINFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetTextureStageState( 7, D3DTSS_MIPFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetTextureStageState( 7, D3DTSS_MAXANISOTROPY, anisotropyLevel ); + } + else { - //TODO: anisotropic filtering - pID3DDevice->SetTextureStageState (0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR); pID3DDevice->SetTextureStageState (0, D3DTSS_MINFILTER, D3DTEXF_LINEAR); - pID3DDevice->SetTextureStageState (0, D3DTSS_MIPFILTER, Material.TrilinearFilter ? D3DTEXF_LINEAR : D3DTEXF_POINT); + pID3DDevice->SetTextureStageState( 0, D3DTSS_MIPFILTER, material.TrilinearFilter ? D3DTEXF_LINEAR : D3DTEXF_POINT ); pID3DDevice->SetTextureStageState (1, D3DTSS_MAGFILTER, D3DTEXF_LINEAR); pID3DDevice->SetTextureStageState (1, D3DTSS_MINFILTER, D3DTEXF_LINEAR); - pID3DDevice->SetTextureStageState (1, D3DTSS_MIPFILTER, Material.TrilinearFilter ? D3DTEXF_LINEAR : D3DTEXF_POINT); + pID3DDevice->SetTextureStageState( 1, D3DTSS_MIPFILTER, material.TrilinearFilter ? D3DTEXF_LINEAR : D3DTEXF_POINT ); + pID3DDevice->SetTextureStageState( 2, D3DTSS_MAGFILTER, D3DTEXF_LINEAR ); + pID3DDevice->SetTextureStageState( 2, D3DTSS_MINFILTER, D3DTEXF_LINEAR ); + pID3DDevice->SetTextureStageState( 2, D3DTSS_MIPFILTER, material.TrilinearFilter ? D3DTEXF_LINEAR : D3DTEXF_POINT ); + + pID3DDevice->SetTextureStageState( 3, D3DTSS_MAGFILTER, D3DTEXF_LINEAR ); + pID3DDevice->SetTextureStageState( 3, D3DTSS_MINFILTER, D3DTEXF_LINEAR ); + pID3DDevice->SetTextureStageState( 3, D3DTSS_MIPFILTER, material.TrilinearFilter ? D3DTEXF_LINEAR : D3DTEXF_POINT ); + + pID3DDevice->SetTextureStageState( 4, D3DTSS_MAGFILTER, D3DTEXF_LINEAR ); + pID3DDevice->SetTextureStageState( 4, D3DTSS_MINFILTER, D3DTEXF_LINEAR ); + pID3DDevice->SetTextureStageState( 4, D3DTSS_MIPFILTER, material.TrilinearFilter ? D3DTEXF_LINEAR : D3DTEXF_POINT ); + + pID3DDevice->SetTextureStageState( 5, D3DTSS_MAGFILTER, D3DTEXF_LINEAR ); + pID3DDevice->SetTextureStageState( 5, D3DTSS_MINFILTER, D3DTEXF_LINEAR ); + pID3DDevice->SetTextureStageState( 5, D3DTSS_MIPFILTER, material.TrilinearFilter ? D3DTEXF_LINEAR : D3DTEXF_POINT ); + + pID3DDevice->SetTextureStageState( 6, D3DTSS_MAGFILTER, D3DTEXF_LINEAR ); + pID3DDevice->SetTextureStageState( 6, D3DTSS_MINFILTER, D3DTEXF_LINEAR ); + pID3DDevice->SetTextureStageState( 6, D3DTSS_MIPFILTER, material.TrilinearFilter ? D3DTEXF_LINEAR : D3DTEXF_POINT ); + + pID3DDevice->SetTextureStageState( 7, D3DTSS_MAGFILTER, D3DTEXF_LINEAR ); + pID3DDevice->SetTextureStageState( 7, D3DTSS_MINFILTER, D3DTEXF_LINEAR ); + pID3DDevice->SetTextureStageState( 7, D3DTSS_MIPFILTER, material.TrilinearFilter ? D3DTEXF_LINEAR : D3DTEXF_POINT ); + } } else { @@ -1427,6 +1427,36 @@ } } + + //// Bilinear and/or trilinear + //if ((resetAllRenderstates || lastmaterial.BilinearFilter != material.BilinearFilter + // || lastmaterial.TrilinearFilter != material.TrilinearFilter)) + //{ + // if (material.BilinearFilter || material.TrilinearFilter) + // { + // //TODO: anisotropic filtering + + // pID3DDevice->SetTextureStageState (0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR); + // pID3DDevice->SetTextureStageState (0, D3DTSS_MINFILTER, D3DTEXF_LINEAR); + // pID3DDevice->SetTextureStageState (0, D3DTSS_MIPFILTER, Material.TrilinearFilter ? D3DTEXF_LINEAR : D3DTEXF_POINT); + // + // pID3DDevice->SetTextureStageState (1, D3DTSS_MAGFILTER, D3DTEXF_LINEAR); + // pID3DDevice->SetTextureStageState (1, D3DTSS_MINFILTER, D3DTEXF_LINEAR); + // pID3DDevice->SetTextureStageState (1, D3DTSS_MIPFILTER, Material.TrilinearFilter ? D3DTEXF_LINEAR : D3DTEXF_POINT); + // + // } + // else + // { + // pID3DDevice->SetTextureStageState (0, D3DTSS_MINFILTER, D3DTEXF_POINT); + // pID3DDevice->SetTextureStageState (0, D3DTSS_MIPFILTER, D3DTEXF_NONE); + // pID3DDevice->SetTextureStageState (0, D3DTSS_MAGFILTER, D3DTEXF_POINT); + + // pID3DDevice->SetTextureStageState (1, D3DTSS_MINFILTER, D3DTEXF_POINT); + // pID3DDevice->SetTextureStageState (1, D3DTSS_MIPFILTER, D3DTEXF_NONE); + // pID3DDevice->SetTextureStageState (1, D3DTSS_MAGFILTER, D3DTEXF_POINT); + // } + //} + // fillmode if (resetAllRenderstates || lastmaterial.Wireframe != material.Wireframe) diff -Naurw Irrlicht/CD3D9Driver.cpp Irrlicht/CD3D9Driver.cpp --- Irrlicht/CD3D9Driver.cpp 2005-09-23 10:19:28.000000000 +0200 +++ Irrlicht/CD3D9Driver.cpp 2005-11-26 12:51:20.000000000 +0100 @@ -1378,15 +1302,59 @@ pID3DDevice->SetMaterial(&mat); } - // Bilinear and/or trilinear - if ((resetAllRenderstates || lastmaterial.BilinearFilter != material.BilinearFilter - || lastmaterial.TrilinearFilter != material.TrilinearFilter) - || !LastTextureMipMapsAvailable[0] || !LastTextureMipMapsAvailable[1]) - { - if (material.BilinearFilter || material.TrilinearFilter) + // Anisotropic or Bilinear and/or trilinear + if ( resetAllRenderstates || lastmaterial.BilinearFilter != material.BilinearFilter + || lastmaterial.TrilinearFilter != material.TrilinearFilter + || lastmaterial.AnisotropicFilter != material.AnisotropicFilter ) + { + if( material.BilinearFilter || material.TrilinearFilter || material.AnisotropicFilter ) + { + if( material.AnisotropicFilter ) + { + u32 anisotropyLevel = material.AnisotropyLevel > Caps.MaxAnisotropy ? Caps.MaxAnisotropy : material.AnisotropyLevel; + + pID3DDevice->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetSamplerState( 0, D3DSAMP_MIPFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetSamplerState( 0, D3DSAMP_MAXANISOTROPY, anisotropyLevel ); + + pID3DDevice->SetSamplerState( 1, D3DSAMP_MAGFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetSamplerState( 1, D3DSAMP_MINFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetSamplerState( 1, D3DSAMP_MIPFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetSamplerState( 1, D3DSAMP_MAXANISOTROPY, anisotropyLevel ); + + pID3DDevice->SetSamplerState( 2, D3DSAMP_MAGFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetSamplerState( 2, D3DSAMP_MINFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetSamplerState( 2, D3DSAMP_MIPFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetSamplerState( 2, D3DSAMP_MAXANISOTROPY, anisotropyLevel ); + + pID3DDevice->SetSamplerState( 3, D3DSAMP_MAGFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetSamplerState( 3, D3DSAMP_MINFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetSamplerState( 3, D3DSAMP_MIPFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetSamplerState( 3, D3DSAMP_MAXANISOTROPY, anisotropyLevel ); + + pID3DDevice->SetSamplerState( 4, D3DSAMP_MAGFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetSamplerState( 4, D3DSAMP_MINFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetSamplerState( 4, D3DSAMP_MIPFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetSamplerState( 4, D3DSAMP_MAXANISOTROPY, anisotropyLevel ); + + pID3DDevice->SetSamplerState( 5, D3DSAMP_MAGFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetSamplerState( 5, D3DSAMP_MINFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetSamplerState( 5, D3DSAMP_MIPFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetSamplerState( 5, D3DSAMP_MAXANISOTROPY, anisotropyLevel ); + + pID3DDevice->SetSamplerState( 6, D3DSAMP_MAGFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetSamplerState( 6, D3DSAMP_MINFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetSamplerState( 6, D3DSAMP_MIPFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetSamplerState( 6, D3DSAMP_MAXANISOTROPY, anisotropyLevel ); + + pID3DDevice->SetSamplerState( 7, D3DSAMP_MAGFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetSamplerState( 7, D3DSAMP_MINFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetSamplerState( 7, D3DSAMP_MIPFILTER, D3DTEXF_ANISOTROPIC ); + pID3DDevice->SetSamplerState( 7, D3DSAMP_MAXANISOTROPY, anisotropyLevel ); + } + else { - //TODO: anisotropic filtering - pID3DDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); pID3DDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); pID3DDevice->SetSamplerState(0, D3DSAMP_MIPFILTER, material.TrilinearFilter ? D3DTEXF_LINEAR : D3DTEXF_POINT); @@ -1395,6 +1363,30 @@ pID3DDevice->SetSamplerState(1, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); pID3DDevice->SetSamplerState(1, D3DSAMP_MIPFILTER, material.TrilinearFilter ? D3DTEXF_LINEAR : D3DTEXF_POINT); + pID3DDevice->SetSamplerState( 2, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR ); + pID3DDevice->SetSamplerState( 2, D3DSAMP_MINFILTER, D3DTEXF_LINEAR ); + pID3DDevice->SetSamplerState( 2, D3DSAMP_MIPFILTER, material.TrilinearFilter ? D3DTEXF_LINEAR : D3DTEXF_POINT ); + + pID3DDevice->SetSamplerState( 3, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR ); + pID3DDevice->SetSamplerState( 3, D3DSAMP_MINFILTER, D3DTEXF_LINEAR ); + pID3DDevice->SetSamplerState( 3, D3DSAMP_MIPFILTER, material.TrilinearFilter ? D3DTEXF_LINEAR : D3DTEXF_POINT ); + + pID3DDevice->SetSamplerState( 4, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR ); + pID3DDevice->SetSamplerState( 4, D3DSAMP_MINFILTER, D3DTEXF_LINEAR ); + pID3DDevice->SetSamplerState( 4, D3DSAMP_MIPFILTER, material.TrilinearFilter ? D3DTEXF_LINEAR : D3DTEXF_POINT ); + + pID3DDevice->SetSamplerState( 5, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR ); + pID3DDevice->SetSamplerState( 5, D3DSAMP_MINFILTER, D3DTEXF_LINEAR ); + pID3DDevice->SetSamplerState( 5, D3DSAMP_MIPFILTER, material.TrilinearFilter ? D3DTEXF_LINEAR : D3DTEXF_POINT ); + + pID3DDevice->SetSamplerState( 6, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR ); + pID3DDevice->SetSamplerState( 6, D3DSAMP_MINFILTER, D3DTEXF_LINEAR ); + pID3DDevice->SetSamplerState( 6, D3DSAMP_MIPFILTER, material.TrilinearFilter ? D3DTEXF_LINEAR : D3DTEXF_POINT ); + + pID3DDevice->SetSamplerState( 7, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR ); + pID3DDevice->SetSamplerState( 7, D3DSAMP_MINFILTER, D3DTEXF_LINEAR ); + pID3DDevice->SetSamplerState( 7, D3DSAMP_MIPFILTER, material.TrilinearFilter ? D3DTEXF_LINEAR : D3DTEXF_POINT ); + } } else { diff -Naurw ../../irrlicht-spintz-0.12/source/Irrlicht/COpenGLDriver.cpp Irrlicht/COpenGLDriver.cpp --- ../../irrlicht-spintz-0.12/source/Irrlicht/COpenGLDriver.cpp 2005-09-21 19:36:50.000000000 +0200 +++ Irrlicht/COpenGLDriver.cpp 2005-11-27 00:46:38.000000000 +0100 @@ -1790,11 +1773,40 @@ glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 0);//Material.Shininess); } - // bilinear - - if (resetAllRenderstates || lastmaterial.BilinearFilter != material.BilinearFilter) - glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, - Material.BilinearFilter ? GL_LINEAR : GL_NEAREST); + // bilinear, trilinear, anisotropic filtering + if( resetAllRenderstates || + lastmaterial.BilinearFilter != material.BilinearFilter || + lastmaterial.TrilinearFilter != material.TrilinearFilter || + lastmaterial.AnisotropicFilter != material.AnisotropicFilter ) + { + if( material.AnisotropicFilter ) + { + float maxAnisotropyLevel; + glGetFloatv( GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &maxAnisotropyLevel ); + float anisotropyLevel = (float)material.AnisotropyLevel; + anisotropyLevel = anisotropyLevel < maxAnisotropyLevel ? anisotropyLevel : maxAnisotropyLevel; + glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, anisotropyLevel ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST ); + } + else if( material.TrilinearFilter ) + { + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); + glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1.0f ); + } + else if( material.BilinearFilter ) + { + glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST ); + glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); + glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1.0f ); + } + else + { + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); + glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1.0f ); + } + } // fillmode diff -Naurw ../../irrlicht-spintz-0.12/source/Irrlicht/include/SMaterial.h Irrlicht/include/SMaterial.h --- ../../irrlicht-spintz-0.12/source/Irrlicht/include/SMaterial.h 2005-08-20 22:17:44.000000000 +0200 +++ Irrlicht/include/SMaterial.h 2005-11-26 13:07:20.000000000 +0100 @@ -213,6 +307,11 @@ //! the bilinear filtering flag is ignored. EMF_TRILINEAR_FILTER, + //! Anisotropic filtering + //! If this is enabled, bilinear and trilinear filtering + //! are ignored + EMF_ANISOTROPIC_FILTER, + //! Is fog enabled? Default: false EMF_FOG_ENABLE, @@ -239,8 +337,8 @@ MaterialType(EMT_SOLID), Wireframe(false), Lighting(true), ZBuffer(true), ZWriteEnable(true), BackfaceCulling(true), GouraudShading(true), Shininess(0.0f), MaterialTypeParam(0.0f), - BilinearFilter(true), TrilinearFilter(false), FogEnable(false), - NormalizeNormals(false) + BilinearFilter(true), TrilinearFilter(false), AnisotropicFilter(false), + AnisotropyLevel(0), FogEnable(false), NormalizeNormals(false) {} //! Type of the material. Specifies how everything is blended together @@ -300,6 +400,8 @@ EMT_TRANSPARENT_ALPHA_CHANNEL. */ f32 MaterialTypeParam; + u32 AnisotropyLevel; + //! Texture layer union. union { @@ -352,6 +476,8 @@ the bilinear filtering flag is ignored. */ bool TrilinearFilter; + bool AnisotropicFilter; + //! Is fog enabled? Default: false bool FogEnable; @@ -382,6 +508,7 @@ BackfaceCulling != b.BackfaceCulling || BilinearFilter != b.BilinearFilter || TrilinearFilter != b.TrilinearFilter || + AnisotropicFilter != b.AnisotropicFilter || FogEnable != b.FogEnable || NormalizeNormals != NormalizeNormals; } diff -Naurw ../../irrlicht-spintz-0.12/source/Irrlicht/COpenGLTexture.cpp Irrlicht/COpenGLTexture.cpp --- ../../irrlicht-spintz-0.12/source/Irrlicht/COpenGLTexture.cpp 2005-08-20 22:21:58.000000000 +0200 +++ Irrlicht/COpenGLTexture.cpp 2005-11-27 00:13:00.000000000 +0100 @@ -12,6 +12,9 @@ #include "glext.h" +//#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE +//#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF + namespace irr { namespace video