Fixed #1: Implement anisotropic filtering for textures
This commit is contained in:
parent
100923cb6c
commit
40227ccec5
15 changed files with 116 additions and 2 deletions
|
@ -293,6 +293,11 @@ public:
|
||||||
*/
|
*/
|
||||||
virtual void forceDXTCCompression(bool dxtcComp)=0;
|
virtual void forceDXTCCompression(bool dxtcComp)=0;
|
||||||
|
|
||||||
|
/** if different from 0, enable anisotropic filter on textures. -1 enables max value.
|
||||||
|
* Default is 0.
|
||||||
|
*/
|
||||||
|
virtual void setAnisotropicFilter(sint filter)=0;
|
||||||
|
|
||||||
/** if !=1, force mostly all the textures (but TextureFonts lightmaps, interfaces etc..)
|
/** if !=1, force mostly all the textures (but TextureFonts lightmaps, interfaces etc..)
|
||||||
* to be divided by Divisor (2, 4, 8...)
|
* to be divided by Divisor (2, 4, 8...)
|
||||||
* Default is 1.
|
* Default is 1.
|
||||||
|
|
|
@ -471,6 +471,7 @@ public:
|
||||||
virtual void delete3dMouseListener (U3dMouseListener *listener);
|
virtual void delete3dMouseListener (U3dMouseListener *listener);
|
||||||
virtual TPolygonMode getPolygonMode ();
|
virtual TPolygonMode getPolygonMode ();
|
||||||
virtual void forceDXTCCompression(bool dxtcComp);
|
virtual void forceDXTCCompression(bool dxtcComp);
|
||||||
|
virtual void setAnisotropicFilter(sint filter);
|
||||||
virtual void forceTextureResize(uint divisor);
|
virtual void forceTextureResize(uint divisor);
|
||||||
virtual void forceNativeFragmentPrograms(bool nativeOnly);
|
virtual void forceNativeFragmentPrograms(bool nativeOnly);
|
||||||
virtual bool setMonitorColorProperties (const CMonitorColorProperties &properties);
|
virtual bool setMonitorColorProperties (const CMonitorColorProperties &properties);
|
||||||
|
|
|
@ -660,6 +660,11 @@ public:
|
||||||
*/
|
*/
|
||||||
virtual void forceDXTCCompression(bool dxtcComp)=0;
|
virtual void forceDXTCCompression(bool dxtcComp)=0;
|
||||||
|
|
||||||
|
/** if different from 0, enable anisotropic filter on textures. -1 enables max value.
|
||||||
|
* Default is 0.
|
||||||
|
*/
|
||||||
|
virtual void setAnisotropicFilter(sint filter)=0;
|
||||||
|
|
||||||
/** if !=1, force mostly all the textures (but TextureFonts lightmaps, interfaces etc..)
|
/** if !=1, force mostly all the textures (but TextureFonts lightmaps, interfaces etc..)
|
||||||
* to be divided by Divisor (2, 4, 8...)
|
* to be divided by Divisor (2, 4, 8...)
|
||||||
* Default is 1.
|
* Default is 1.
|
||||||
|
|
|
@ -33,7 +33,7 @@ namespace NL3D
|
||||||
{
|
{
|
||||||
|
|
||||||
// ***************************************************************************
|
// ***************************************************************************
|
||||||
const uint32 IDriver::InterfaceVersion = 0x6a; // added cursors methods
|
const uint32 IDriver::InterfaceVersion = 0x6b; // added anisotropic filter
|
||||||
|
|
||||||
// ***************************************************************************
|
// ***************************************************************************
|
||||||
IDriver::IDriver() : _SyncTexDrvInfos( "IDriver::_SyncTexDrvInfos" )
|
IDriver::IDriver() : _SyncTexDrvInfos( "IDriver::_SyncTexDrvInfos" )
|
||||||
|
|
|
@ -292,6 +292,11 @@ CDriverD3D::CDriverD3D()
|
||||||
_CurrIndexBufferFormat = CIndexBuffer::IndicesUnknownFormat;
|
_CurrIndexBufferFormat = CIndexBuffer::IndicesUnknownFormat;
|
||||||
_IsGeforce = false;
|
_IsGeforce = false;
|
||||||
_NonPowerOfTwoTexturesSupported = false;
|
_NonPowerOfTwoTexturesSupported = false;
|
||||||
|
_MaxAnisotropy = 0;
|
||||||
|
_AnisotropicMinSupported = false;
|
||||||
|
_AnisotropicMagSupported = false;
|
||||||
|
_AnisotropicMinCubeSupported = false;
|
||||||
|
_AnisotropicMagCubeSupported = false;
|
||||||
|
|
||||||
_FrustumLeft= -1.f;
|
_FrustumLeft= -1.f;
|
||||||
_FrustumRight= 1.f;
|
_FrustumRight= 1.f;
|
||||||
|
@ -1493,6 +1498,11 @@ bool CDriverD3D::setDisplay(nlWindow wnd, const GfxMode& mode, bool show, bool r
|
||||||
_MaxVertexIndex = caps.MaxVertexIndex;
|
_MaxVertexIndex = caps.MaxVertexIndex;
|
||||||
_IsGeforce = !(caps.DevCaps & D3DDEVCAPS_NPATCHES) && (caps.PixelShaderVersion >= D3DPS_VERSION(2, 0) || caps.PixelShaderVersion < D3DPS_VERSION(1, 4));
|
_IsGeforce = !(caps.DevCaps & D3DDEVCAPS_NPATCHES) && (caps.PixelShaderVersion >= D3DPS_VERSION(2, 0) || caps.PixelShaderVersion < D3DPS_VERSION(1, 4));
|
||||||
_NonPowerOfTwoTexturesSupported = !(caps.TextureCaps & D3DPTEXTURECAPS_POW2) || (caps.TextureCaps & D3DPTEXTURECAPS_NONPOW2CONDITIONAL);
|
_NonPowerOfTwoTexturesSupported = !(caps.TextureCaps & D3DPTEXTURECAPS_POW2) || (caps.TextureCaps & D3DPTEXTURECAPS_NONPOW2CONDITIONAL);
|
||||||
|
_MaxAnisotropy = caps.MaxAnisotropy;
|
||||||
|
_AnisotropicMinSupported = (caps.TextureFilterCaps & D3DPTFILTERCAPS_MINFANISOTROPIC) != 0;
|
||||||
|
_AnisotropicMagSupported = (caps.TextureFilterCaps & D3DPTFILTERCAPS_MAGFANISOTROPIC) != 0;
|
||||||
|
_AnisotropicMinCubeSupported = (caps.CubeTextureFilterCaps & D3DPTFILTERCAPS_MINFANISOTROPIC) != 0;
|
||||||
|
_AnisotropicMagCubeSupported = (caps.CubeTextureFilterCaps & D3DPTFILTERCAPS_MAGFANISOTROPIC) != 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1506,6 +1516,11 @@ bool CDriverD3D::setDisplay(nlWindow wnd, const GfxMode& mode, bool show, bool r
|
||||||
_MaxVertexIndex = 0xffff;
|
_MaxVertexIndex = 0xffff;
|
||||||
_IsGeforce = false;
|
_IsGeforce = false;
|
||||||
_NonPowerOfTwoTexturesSupported = false;
|
_NonPowerOfTwoTexturesSupported = false;
|
||||||
|
_MaxAnisotropy = 0;
|
||||||
|
_AnisotropicMinSupported = false;
|
||||||
|
_AnisotropicMagSupported = false;
|
||||||
|
_AnisotropicMinCubeSupported = false;
|
||||||
|
_AnisotropicMagCubeSupported = false;
|
||||||
}
|
}
|
||||||
// If 16 bits vertices only, build a vb for quads rendering
|
// If 16 bits vertices only, build a vb for quads rendering
|
||||||
if (_MaxVertexIndex <= 0xffff)
|
if (_MaxVertexIndex <= 0xffff)
|
||||||
|
@ -1607,6 +1622,7 @@ bool CDriverD3D::setDisplay(nlWindow wnd, const GfxMode& mode, bool show, bool r
|
||||||
|
|
||||||
// Init some variables
|
// Init some variables
|
||||||
_ForceDXTCCompression = false;
|
_ForceDXTCCompression = false;
|
||||||
|
_AnisotropicFilter = 0;
|
||||||
_ForceTextureResizePower = 0;
|
_ForceTextureResizePower = 0;
|
||||||
_FogEnabled = false;
|
_FogEnabled = false;
|
||||||
|
|
||||||
|
@ -2049,6 +2065,25 @@ void CDriverD3D::forceDXTCCompression(bool dxtcComp)
|
||||||
|
|
||||||
// ***************************************************************************
|
// ***************************************************************************
|
||||||
|
|
||||||
|
void CDriverD3D::setAnisotropicFilter(sint filter)
|
||||||
|
{
|
||||||
|
H_AUTO_D3D(CDriverD3D_setAnisotropicFilter);
|
||||||
|
|
||||||
|
// anisotropic filter not supported
|
||||||
|
if (_MaxAnisotropy < 2) return;
|
||||||
|
|
||||||
|
if (filter < 0 || filter > _MaxAnisotropy)
|
||||||
|
{
|
||||||
|
_AnisotropicFilter = _MaxAnisotropy;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_AnisotropicFilter = filter;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ***************************************************************************
|
||||||
|
|
||||||
void CDriverD3D::forceTextureResize(uint divisor)
|
void CDriverD3D::forceTextureResize(uint divisor)
|
||||||
{
|
{
|
||||||
H_AUTO_D3D(CDriverD3D_forceTextureResize);
|
H_AUTO_D3D(CDriverD3D_forceTextureResize);
|
||||||
|
|
|
@ -777,6 +777,7 @@ public:
|
||||||
virtual void disableHardwareVertexArrayAGP();
|
virtual void disableHardwareVertexArrayAGP();
|
||||||
virtual void disableHardwareTextureShader();
|
virtual void disableHardwareTextureShader();
|
||||||
virtual void forceDXTCCompression(bool dxtcComp);
|
virtual void forceDXTCCompression(bool dxtcComp);
|
||||||
|
virtual void setAnisotropicFilter(sint filter);
|
||||||
virtual void forceTextureResize(uint divisor);
|
virtual void forceTextureResize(uint divisor);
|
||||||
virtual void forceNativeFragmentPrograms(bool /* nativeOnly */) {} // ignored
|
virtual void forceNativeFragmentPrograms(bool /* nativeOnly */) {} // ignored
|
||||||
|
|
||||||
|
@ -1521,6 +1522,7 @@ public:
|
||||||
setSamplerState (stage, D3DSAMP_MAGFILTER, d3dtext->MagFilter);
|
setSamplerState (stage, D3DSAMP_MAGFILTER, d3dtext->MagFilter);
|
||||||
setSamplerState (stage, D3DSAMP_MINFILTER, d3dtext->MinFilter);
|
setSamplerState (stage, D3DSAMP_MINFILTER, d3dtext->MinFilter);
|
||||||
setSamplerState (stage, D3DSAMP_MIPFILTER, d3dtext->MipFilter);
|
setSamplerState (stage, D3DSAMP_MIPFILTER, d3dtext->MipFilter);
|
||||||
|
setSamplerState (stage, D3DSAMP_MAXANISOTROPY, _AnisotropicFilter);
|
||||||
|
|
||||||
// Profile, log the use of this texture
|
// Profile, log the use of this texture
|
||||||
if (_SumTextureMemoryUsed)
|
if (_SumTextureMemoryUsed)
|
||||||
|
@ -2205,6 +2207,11 @@ private:
|
||||||
bool _CubbedMipMapSupported;
|
bool _CubbedMipMapSupported;
|
||||||
bool _IsGeforce;
|
bool _IsGeforce;
|
||||||
bool _NonPowerOfTwoTexturesSupported;
|
bool _NonPowerOfTwoTexturesSupported;
|
||||||
|
uint _MaxAnisotropy;
|
||||||
|
bool _AnisotropicMinSupported;
|
||||||
|
bool _AnisotropicMagSupported;
|
||||||
|
bool _AnisotropicMinCubeSupported;
|
||||||
|
bool _AnisotropicMagCubeSupported;
|
||||||
uint _NbNeLTextureStages; // Number of texture stage for NeL (max IDRV_MAT_MAXTEXTURES)
|
uint _NbNeLTextureStages; // Number of texture stage for NeL (max IDRV_MAT_MAXTEXTURES)
|
||||||
uint _MaxVerticesByVertexBufferHard;
|
uint _MaxVerticesByVertexBufferHard;
|
||||||
uint _MaxLight;
|
uint _MaxLight;
|
||||||
|
@ -2411,6 +2418,7 @@ private:
|
||||||
bool _MustRestoreLight;
|
bool _MustRestoreLight;
|
||||||
D3DXMATRIX _D3DMatrixIdentity;
|
D3DXMATRIX _D3DMatrixIdentity;
|
||||||
DWORD _FogColor;
|
DWORD _FogColor;
|
||||||
|
uint _AnisotropicFilter;
|
||||||
|
|
||||||
// stencil buffer
|
// stencil buffer
|
||||||
bool _CurStencilTest;
|
bool _CurStencilTest;
|
||||||
|
|
|
@ -506,6 +506,19 @@ inline void CDriverD3D::setupTextureWrapMode(ITexture& tex)
|
||||||
d3dtext->MagFilter = RemapMagTextureFilterTypeNeL2D3D[tex.getMagFilter()];
|
d3dtext->MagFilter = RemapMagTextureFilterTypeNeL2D3D[tex.getMagFilter()];
|
||||||
d3dtext->MinFilter = RemapMinTextureFilterTypeNeL2D3D[tex.getMinFilter()];
|
d3dtext->MinFilter = RemapMinTextureFilterTypeNeL2D3D[tex.getMinFilter()];
|
||||||
d3dtext->MipFilter = RemapMipTextureFilterTypeNeL2D3D[tex.getMinFilter()];
|
d3dtext->MipFilter = RemapMipTextureFilterTypeNeL2D3D[tex.getMinFilter()];
|
||||||
|
|
||||||
|
// only enable for min filter, because it's never supported for mag filter
|
||||||
|
if (_AnisotropicFilter > 1 && tex.getMinFilter() > ITexture::NearestMipMapLinear)
|
||||||
|
{
|
||||||
|
if (tex.isTextureCube())
|
||||||
|
{
|
||||||
|
if (_AnisotropicMinCubeSupported) d3dtext->MinFilter = D3DTEXF_ANISOTROPIC;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (_AnisotropicMinSupported) d3dtext->MinFilter = D3DTEXF_ANISOTROPIC;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -305,6 +305,8 @@ CDriverGL::CDriverGL()
|
||||||
|
|
||||||
_NVTextureShaderEnabled = false;
|
_NVTextureShaderEnabled = false;
|
||||||
|
|
||||||
|
_AnisotropicFilter = 0.f;
|
||||||
|
|
||||||
// Compute the Flag which say if one texture has been changed in CMaterial.
|
// Compute the Flag which say if one texture has been changed in CMaterial.
|
||||||
_MaterialAllTextureTouchedFlag= 0;
|
_MaterialAllTextureTouchedFlag= 0;
|
||||||
for(i=0; i < IDRV_MAT_MAXTEXTURES; i++)
|
for(i=0; i < IDRV_MAT_MAXTEXTURES; i++)
|
||||||
|
|
|
@ -364,6 +364,7 @@ public:
|
||||||
virtual bool uploadTextureCube (ITexture& tex, NLMISC::CRect& rect, uint8 nNumMipMap, uint8 nNumFace);
|
virtual bool uploadTextureCube (ITexture& tex, NLMISC::CRect& rect, uint8 nNumMipMap, uint8 nNumFace);
|
||||||
|
|
||||||
virtual void forceDXTCCompression(bool dxtcComp);
|
virtual void forceDXTCCompression(bool dxtcComp);
|
||||||
|
virtual void setAnisotropicFilter(sint filter);
|
||||||
|
|
||||||
virtual void forceTextureResize(uint divisor);
|
virtual void forceTextureResize(uint divisor);
|
||||||
|
|
||||||
|
@ -955,6 +956,8 @@ private:
|
||||||
bool _NVTextureShaderEnabled;
|
bool _NVTextureShaderEnabled;
|
||||||
// Which stages support EMBM
|
// Which stages support EMBM
|
||||||
bool _StageSupportEMBM[IDRV_MAT_MAXTEXTURES];
|
bool _StageSupportEMBM[IDRV_MAT_MAXTEXTURES];
|
||||||
|
// Anisotropic filtering value
|
||||||
|
float _AnisotropicFilter;
|
||||||
|
|
||||||
// Prec settings for material.
|
// Prec settings for material.
|
||||||
CDriverGLStates _DriverGLStates;
|
CDriverGLStates _DriverGLStates;
|
||||||
|
|
|
@ -157,7 +157,7 @@ public:
|
||||||
NVTextureRectangle = false;
|
NVTextureRectangle = false;
|
||||||
EXTTextureRectangle = false;
|
EXTTextureRectangle = false;
|
||||||
EXTTextureFilterAnisotropic = false;
|
EXTTextureFilterAnisotropic = false;
|
||||||
EXTTextureFilterAnisotropicMaximum = 1.f;
|
EXTTextureFilterAnisotropicMaximum = 0.f;
|
||||||
ARBTextureRectangle = false;
|
ARBTextureRectangle = false;
|
||||||
ARBTextureNonPowerOfTwo = false;
|
ARBTextureNonPowerOfTwo = false;
|
||||||
ARBMultisample = false;
|
ARBMultisample = false;
|
||||||
|
|
|
@ -823,6 +823,9 @@ void CDriverGL::setupTextureBasicParameters(ITexture &tex)
|
||||||
#endif
|
#endif
|
||||||
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB,GL_TEXTURE_MAG_FILTER, translateMagFilterToGl(gltext));
|
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB,GL_TEXTURE_MAG_FILTER, translateMagFilterToGl(gltext));
|
||||||
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB,GL_TEXTURE_MIN_FILTER, translateMinFilterToGl(gltext));
|
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB,GL_TEXTURE_MIN_FILTER, translateMinFilterToGl(gltext));
|
||||||
|
|
||||||
|
if (_AnisotropicFilter > 1.f && gltext->MinFilter > ITexture::NearestMipMapLinear)
|
||||||
|
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAX_ANISOTROPY_EXT, _AnisotropicFilter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -831,6 +834,9 @@ void CDriverGL::setupTextureBasicParameters(ITexture &tex)
|
||||||
glTexParameteri(gltext->TextureMode,GL_TEXTURE_WRAP_T, translateWrapToGl(gltext->WrapT, _Extensions));
|
glTexParameteri(gltext->TextureMode,GL_TEXTURE_WRAP_T, translateWrapToGl(gltext->WrapT, _Extensions));
|
||||||
glTexParameteri(gltext->TextureMode,GL_TEXTURE_MAG_FILTER, translateMagFilterToGl(gltext));
|
glTexParameteri(gltext->TextureMode,GL_TEXTURE_MAG_FILTER, translateMagFilterToGl(gltext));
|
||||||
glTexParameteri(gltext->TextureMode,GL_TEXTURE_MIN_FILTER, translateMinFilterToGl(gltext));
|
glTexParameteri(gltext->TextureMode,GL_TEXTURE_MIN_FILTER, translateMinFilterToGl(gltext));
|
||||||
|
|
||||||
|
if (_AnisotropicFilter > 1.f && gltext->MinFilter > ITexture::NearestMipMapLinear)
|
||||||
|
glTexParameteri(gltext->TextureMode, GL_TEXTURE_MAX_ANISOTROPY_EXT, _AnisotropicFilter);
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
tex.clearFilterOrWrapModeTouched();
|
tex.clearFilterOrWrapModeTouched();
|
||||||
|
@ -2184,6 +2190,25 @@ void CDriverGL::forceDXTCCompression(bool dxtcComp)
|
||||||
_ForceDXTCCompression= dxtcComp;
|
_ForceDXTCCompression= dxtcComp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ***************************************************************************
|
||||||
|
void CDriverGL::setAnisotropicFilter(sint filtering)
|
||||||
|
{
|
||||||
|
H_AUTO_OGL(CDriverGL_setAnisotropicFiltering);
|
||||||
|
|
||||||
|
if (!_Extensions.EXTTextureFilterAnisotropic) return;
|
||||||
|
|
||||||
|
if (filtering < 0 || filtering > _Extensions.EXTTextureFilterAnisotropicMaximum)
|
||||||
|
{
|
||||||
|
// set maximum value for anisotropic filter
|
||||||
|
_AnisotropicFilter = _Extensions.EXTTextureFilterAnisotropicMaximum;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// set specified value for anisotropic filter
|
||||||
|
_AnisotropicFilter = filtering;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ***************************************************************************
|
// ***************************************************************************
|
||||||
void CDriverGL::forceTextureResize(uint divisor)
|
void CDriverGL::forceTextureResize(uint divisor)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1469,12 +1469,21 @@ UDriver::TPolygonMode CDriverUser::getPolygonMode ()
|
||||||
|
|
||||||
return umode;
|
return umode;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CDriverUser::forceDXTCCompression(bool dxtcComp)
|
void CDriverUser::forceDXTCCompression(bool dxtcComp)
|
||||||
{
|
{
|
||||||
NL3D_HAUTO_UI_DRIVER;
|
NL3D_HAUTO_UI_DRIVER;
|
||||||
|
|
||||||
_Driver->forceDXTCCompression(dxtcComp);
|
_Driver->forceDXTCCompression(dxtcComp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CDriverUser::setAnisotropicFilter(sint filter)
|
||||||
|
{
|
||||||
|
NL3D_HAUTO_UI_DRIVER;
|
||||||
|
|
||||||
|
_Driver->setAnisotropicFilter(filter);
|
||||||
|
}
|
||||||
|
|
||||||
void CDriverUser::forceTextureResize(uint divisor)
|
void CDriverUser::forceTextureResize(uint divisor)
|
||||||
{
|
{
|
||||||
NL3D_HAUTO_UI_DRIVER;
|
NL3D_HAUTO_UI_DRIVER;
|
||||||
|
|
|
@ -380,6 +380,7 @@ CClientConfig::CClientConfig()
|
||||||
ScreenAspectRatio = 0.f; // Default commmon Screen Aspect Ratio (no relation with the resolution) - 0.f = auto
|
ScreenAspectRatio = 0.f; // Default commmon Screen Aspect Ratio (no relation with the resolution) - 0.f = auto
|
||||||
FoV = 75.f; // Default value for the FoV.
|
FoV = 75.f; // Default value for the FoV.
|
||||||
ForceDXTC = false; // Default is no DXTC Compression.
|
ForceDXTC = false; // Default is no DXTC Compression.
|
||||||
|
AnisotropicFilter = 0; // Default is disabled (-1 = maximum value, 0 = disabled, 1+ = enabled)
|
||||||
DivideTextureSizeBy2= false; // Divide texture by 2
|
DivideTextureSizeBy2= false; // Divide texture by 2
|
||||||
DisableVtxProgram = false; // Disable Hardware Vertex Program.
|
DisableVtxProgram = false; // Disable Hardware Vertex Program.
|
||||||
DisableVtxAGP = false; // Disable Hardware Vertex AGP.
|
DisableVtxAGP = false; // Disable Hardware Vertex AGP.
|
||||||
|
@ -979,6 +980,8 @@ void CClientConfig::setValues()
|
||||||
READ_FLOAT_FV(FoV)
|
READ_FLOAT_FV(FoV)
|
||||||
// ForceDXTC
|
// ForceDXTC
|
||||||
READ_BOOL_FV(ForceDXTC)
|
READ_BOOL_FV(ForceDXTC)
|
||||||
|
// AnisotropicFilter
|
||||||
|
READ_INT_FV(AnisotropicFilter)
|
||||||
// DivideTextureSizeBy2
|
// DivideTextureSizeBy2
|
||||||
READ_BOOL_FV(DivideTextureSizeBy2)
|
READ_BOOL_FV(DivideTextureSizeBy2)
|
||||||
// DisableVtxProgram
|
// DisableVtxProgram
|
||||||
|
|
|
@ -230,6 +230,8 @@ struct CClientConfig
|
||||||
float FoV;
|
float FoV;
|
||||||
/// Force the DXTC Compression.
|
/// Force the DXTC Compression.
|
||||||
bool ForceDXTC;
|
bool ForceDXTC;
|
||||||
|
/// Set the anisotropic filter
|
||||||
|
sint AnisotropicFilter;
|
||||||
/// Divide texture size by 2
|
/// Divide texture size by 2
|
||||||
bool DivideTextureSizeBy2;
|
bool DivideTextureSizeBy2;
|
||||||
/// Disable Hardware Vertex Program.
|
/// Disable Hardware Vertex Program.
|
||||||
|
|
|
@ -1067,6 +1067,9 @@ void prelogInit()
|
||||||
// Init the DXTCCompression.
|
// Init the DXTCCompression.
|
||||||
Driver->forceDXTCCompression(ClientCfg.ForceDXTC);
|
Driver->forceDXTCCompression(ClientCfg.ForceDXTC);
|
||||||
|
|
||||||
|
// Set the anisotropic filter
|
||||||
|
Driver->setAnisotropicFilter(ClientCfg.AnisotropicFilter);
|
||||||
|
|
||||||
// Divide the texture size.
|
// Divide the texture size.
|
||||||
if (ClientCfg.DivideTextureSizeBy2)
|
if (ClientCfg.DivideTextureSizeBy2)
|
||||||
Driver->forceTextureResize(2);
|
Driver->forceTextureResize(2);
|
||||||
|
|
Loading…
Reference in a new issue