From 53c3adf2c2cdab9a6f300ad44fb5d701866951e7 Mon Sep 17 00:00:00 2001 From: Mauller <26652186+Mauller@users.noreply.github.com> Date: Sun, 8 Mar 2026 11:10:33 +0000 Subject: [PATCH 1/7] Remove XBOX conditional blocks and commented out code --- .../Source/WWVegas/WW3D2/texturefilter.cpp | 28 ------------------- 1 file changed, 28 deletions(-) diff --git a/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.cpp b/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.cpp index 7fb9b85a24e..cf92a35656a 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.cpp @@ -104,7 +104,6 @@ void TextureFilterClass::_Init_Filters(TextureFilterMode filter_type) { const D3DCAPS8& dx8caps=DX8Wrapper::Get_Current_Caps()->Get_DX8_Caps(); -#ifndef _XBOX _MinTextureFilters[0][FILTER_TYPE_NONE]=D3DTEXF_POINT; _MagTextureFilters[0][FILTER_TYPE_NONE]=D3DTEXF_POINT; _MipMapFilters[0][FILTER_TYPE_NONE]=D3DTEXF_NONE; @@ -116,21 +115,7 @@ void TextureFilterClass::_Init_Filters(TextureFilterMode filter_type) _MagTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_POINT; _MinTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_POINT; _MipMapFilters[0][FILTER_TYPE_BEST]=D3DTEXF_POINT; -#else - _MinTextureFilters[0][FILTER_TYPE_NONE]=D3DTEXF_ANISOTROPIC; - _MagTextureFilters[0][FILTER_TYPE_NONE]=D3DTEXF_ANISOTROPIC; - _MipMapFilters[0][FILTER_TYPE_NONE]=D3DTEXF_LINEAR; - _MinTextureFilters[0][FILTER_TYPE_FAST]=D3DTEXF_ANISOTROPIC; - _MagTextureFilters[0][FILTER_TYPE_FAST]=D3DTEXF_ANISOTROPIC; - _MipMapFilters[0][FILTER_TYPE_FAST]=D3DTEXF_LINEAR; - - _MagTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_ANISOTROPIC; - _MinTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_ANISOTROPIC; - _MipMapFilters[0][FILTER_TYPE_BEST]=D3DTEXF_LINEAR; -#endif - -#ifndef _XBOX if (dx8caps.TextureFilterCaps&D3DPTFILTERCAPS_MAGFLINEAR) _MagTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_LINEAR; if (dx8caps.TextureFilterCaps&D3DPTFILTERCAPS_MINFLINEAR) _MinTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_LINEAR; @@ -144,23 +129,10 @@ void TextureFilterClass::_Init_Filters(TextureFilterMode filter_type) if (filter_type==TEXTURE_FILTER_ANISOTROPIC || filter_type==TEXTURE_FILTER_TRILINEAR) { if (dx8caps.TextureFilterCaps&D3DPTFILTERCAPS_MIPFLINEAR) _MipMapFilters[0][FILTER_TYPE_BEST]=D3DTEXF_LINEAR; } -#endif // For stages above zero, set best filter to the same as the stage zero, except if anisotropic int i=1; for (;i Date: Sun, 8 Mar 2026 11:11:34 +0000 Subject: [PATCH 2/7] Fix default initialisation indentation and tabify --- .../Source/WWVegas/WW3D2/texturefilter.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.cpp b/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.cpp index cf92a35656a..aa1269753a6 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.cpp @@ -104,17 +104,17 @@ void TextureFilterClass::_Init_Filters(TextureFilterMode filter_type) { const D3DCAPS8& dx8caps=DX8Wrapper::Get_Current_Caps()->Get_DX8_Caps(); - _MinTextureFilters[0][FILTER_TYPE_NONE]=D3DTEXF_POINT; - _MagTextureFilters[0][FILTER_TYPE_NONE]=D3DTEXF_POINT; - _MipMapFilters[0][FILTER_TYPE_NONE]=D3DTEXF_NONE; + _MinTextureFilters[0][FILTER_TYPE_NONE]=D3DTEXF_POINT; + _MagTextureFilters[0][FILTER_TYPE_NONE]=D3DTEXF_POINT; + _MipMapFilters[0][FILTER_TYPE_NONE]=D3DTEXF_NONE; - _MinTextureFilters[0][FILTER_TYPE_FAST]=D3DTEXF_LINEAR; - _MagTextureFilters[0][FILTER_TYPE_FAST]=D3DTEXF_LINEAR; - _MipMapFilters[0][FILTER_TYPE_FAST]=D3DTEXF_POINT; + _MinTextureFilters[0][FILTER_TYPE_FAST]=D3DTEXF_LINEAR; + _MagTextureFilters[0][FILTER_TYPE_FAST]=D3DTEXF_LINEAR; + _MipMapFilters[0][FILTER_TYPE_FAST]=D3DTEXF_POINT; - _MagTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_POINT; - _MinTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_POINT; - _MipMapFilters[0][FILTER_TYPE_BEST]=D3DTEXF_POINT; + _MagTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_POINT; + _MinTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_POINT; + _MipMapFilters[0][FILTER_TYPE_BEST]=D3DTEXF_POINT; if (dx8caps.TextureFilterCaps&D3DPTFILTERCAPS_MAGFLINEAR) _MagTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_LINEAR; if (dx8caps.TextureFilterCaps&D3DPTFILTERCAPS_MINFLINEAR) _MinTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_LINEAR; From 629e145208ce8b84fa79a274e031eb7c5f0234c5 Mon Sep 17 00:00:00 2001 From: Mauller <26652186+Mauller@users.noreply.github.com> Date: Sun, 8 Mar 2026 11:16:05 +0000 Subject: [PATCH 3/7] Cleanup default initialisation and increase default best to anisotropic --- Core/Libraries/Source/WWVegas/WW3D2/texturefilter.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.cpp b/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.cpp index aa1269753a6..3421306c289 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.cpp @@ -104,17 +104,20 @@ void TextureFilterClass::_Init_Filters(TextureFilterMode filter_type) { const D3DCAPS8& dx8caps=DX8Wrapper::Get_Current_Caps()->Get_DX8_Caps(); + // TheSuperHackers @info Init zero stage filter defaults, point filtering is the lowest type for non mip filtering _MinTextureFilters[0][FILTER_TYPE_NONE]=D3DTEXF_POINT; _MagTextureFilters[0][FILTER_TYPE_NONE]=D3DTEXF_POINT; _MipMapFilters[0][FILTER_TYPE_NONE]=D3DTEXF_NONE; + // Bilinear _MinTextureFilters[0][FILTER_TYPE_FAST]=D3DTEXF_LINEAR; _MagTextureFilters[0][FILTER_TYPE_FAST]=D3DTEXF_LINEAR; _MipMapFilters[0][FILTER_TYPE_FAST]=D3DTEXF_POINT; - _MagTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_POINT; - _MinTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_POINT; - _MipMapFilters[0][FILTER_TYPE_BEST]=D3DTEXF_POINT; + // Anisotropic - MipMap interlayer filtering only goes up to linear + _MinTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_ANISOTROPIC; + _MagTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_ANISOTROPIC; + _MipMapFilters[0][FILTER_TYPE_BEST]=D3DTEXF_LINEAR; if (dx8caps.TextureFilterCaps&D3DPTFILTERCAPS_MAGFLINEAR) _MagTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_LINEAR; if (dx8caps.TextureFilterCaps&D3DPTFILTERCAPS_MINFLINEAR) _MinTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_LINEAR; From af35f8bdaa574cfd683548f73f8d9bcec9b51e08 Mon Sep 17 00:00:00 2001 From: Mauller <26652186+Mauller@users.noreply.github.com> Date: Sun, 8 Mar 2026 11:19:06 +0000 Subject: [PATCH 4/7] Implement new texture filtering mode handling --- .../Source/WWVegas/WW3D2/texturefilter.cpp | 104 ++++++++++++++++-- .../Source/WWVegas/WW3D2/texturefilter.h | 2 + .../Libraries/Source/WWVegas/WW3D2/ww3d.cpp | 3 +- .../Libraries/Source/WWVegas/WW3D2/ww3d.cpp | 3 +- 4 files changed, 98 insertions(+), 14 deletions(-) diff --git a/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.cpp b/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.cpp index 3421306c289..d6e46c4c605 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.cpp @@ -119,18 +119,100 @@ void TextureFilterClass::_Init_Filters(TextureFilterMode filter_type) _MagTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_ANISOTROPIC; _MipMapFilters[0][FILTER_TYPE_BEST]=D3DTEXF_LINEAR; - if (dx8caps.TextureFilterCaps&D3DPTFILTERCAPS_MAGFLINEAR) _MagTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_LINEAR; - if (dx8caps.TextureFilterCaps&D3DPTFILTERCAPS_MINFLINEAR) _MinTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_LINEAR; + // TheSuperHackers @feature Mauller 08/03/2026 Add full support for all texture filtering modes; + // None, Point, Bilinear, Trilinear, Anisotropic. + BOOL FilterSupported = false; + switch (filter_type) { - // Set anisotropic filtering only if requested and available - if (filter_type==TEXTURE_FILTER_ANISOTROPIC) { - if (dx8caps.TextureFilterCaps&D3DPTFILTERCAPS_MAGFANISOTROPIC) _MagTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_ANISOTROPIC; - if (dx8caps.TextureFilterCaps&D3DPTFILTERCAPS_MINFANISOTROPIC) _MinTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_ANISOTROPIC; - } + case TEXTURE_FILTER_NONE: + + _MinTextureFilters[0][FILTER_TYPE_FAST]=D3DTEXF_POINT; + _MagTextureFilters[0][FILTER_TYPE_FAST]=D3DTEXF_POINT; + _MipMapFilters[0][FILTER_TYPE_FAST]=D3DTEXF_NONE; + + _MinTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_POINT; + _MagTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_POINT; + _MipMapFilters[0][FILTER_TYPE_BEST]=D3DTEXF_NONE; + break; + + case TEXTURE_FILTER_POINT: + + _MinTextureFilters[0][FILTER_TYPE_FAST]=D3DTEXF_POINT; + _MagTextureFilters[0][FILTER_TYPE_FAST]=D3DTEXF_POINT; + _MipMapFilters[0][FILTER_TYPE_FAST]=D3DTEXF_POINT; + + _MinTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_POINT; + _MagTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_POINT; + _MipMapFilters[0][FILTER_TYPE_BEST]=D3DTEXF_POINT; + break; + + case TEXTURE_FILTER_BILINEAR: + + FilterSupported = (dx8caps.TextureFilterCaps & D3DPTFILTERCAPS_MINFLINEAR) && + (dx8caps.TextureFilterCaps & D3DPTFILTERCAPS_MAGFLINEAR); + + if (FilterSupported) { + _MinTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_LINEAR; + _MagTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_LINEAR; + } + else { + _MinTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_POINT; + _MagTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_POINT; + } + + _MipMapFilters[0][FILTER_TYPE_BEST]=D3DTEXF_POINT; + break; + + case TEXTURE_FILTER_TRILINEAR: + + FilterSupported = (dx8caps.TextureFilterCaps & D3DPTFILTERCAPS_MINFLINEAR) && + (dx8caps.TextureFilterCaps & D3DPTFILTERCAPS_MAGFLINEAR); + + if (FilterSupported) { + _MinTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_LINEAR; + _MagTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_LINEAR; + } + else { + _MinTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_POINT; + _MagTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_POINT; + } + + if (dx8caps.TextureFilterCaps & D3DPTFILTERCAPS_MIPFLINEAR) { + _MipMapFilters[0][FILTER_TYPE_BEST]=D3DTEXF_LINEAR; + } + else { + // TheSuperHackers @info if only linear mipmap filtering is unsupported, + // Trilinear filtering becomes Bilinear filtering by default + _MipMapFilters[0][FILTER_TYPE_BEST]=D3DTEXF_POINT; + } + break; + + case TEXTURE_FILTER_ANISOTROPIC: + + FilterSupported = (dx8caps.TextureFilterCaps & D3DPTFILTERCAPS_MAGFANISOTROPIC) && + (dx8caps.TextureFilterCaps & D3DPTFILTERCAPS_MINFANISOTROPIC); + + if (FilterSupported) { + _MinTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_ANISOTROPIC; + _MagTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_ANISOTROPIC; + + // Set the Anisotropic filtering level for all stages + for (int stage = 0; stage < MAX_TEXTURE_STAGES; ++stage) + DX8Wrapper::Set_DX8_Texture_Stage_State(stage, D3DTSS_MAXANISOTROPY, 2); + } + else { + _MinTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_POINT; + _MagTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_POINT; + } + + if (dx8caps.TextureFilterCaps & D3DPTFILTERCAPS_MIPFLINEAR) { + _MipMapFilters[0][FILTER_TYPE_BEST]=D3DTEXF_LINEAR; + } + else { + _MipMapFilters[0][FILTER_TYPE_BEST]=D3DTEXF_POINT; + } + break; - // Set linear mip filter only if requested trilinear or anisotropic, and linear available - if (filter_type==TEXTURE_FILTER_ANISOTROPIC || filter_type==TEXTURE_FILTER_TRILINEAR) { - if (dx8caps.TextureFilterCaps&D3DPTFILTERCAPS_MIPFLINEAR) _MipMapFilters[0][FILTER_TYPE_BEST]=D3DTEXF_LINEAR; } // For stages above zero, set best filter to the same as the stage zero, except if anisotropic @@ -167,8 +249,6 @@ void TextureFilterClass::_Init_Filters(TextureFilterMode filter_type) _MinTextureFilters[i][FILTER_TYPE_DEFAULT]=_MinTextureFilters[i][FILTER_TYPE_BEST]; _MagTextureFilters[i][FILTER_TYPE_DEFAULT]=_MagTextureFilters[i][FILTER_TYPE_BEST]; _MipMapFilters[i][FILTER_TYPE_DEFAULT]=_MipMapFilters[i][FILTER_TYPE_BEST]; - - DX8Wrapper::Set_DX8_Texture_Stage_State(i,D3DTSS_MAXANISOTROPY,2); } } diff --git a/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.h b/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.h index 913d227ffea..cbfb22ab129 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.h +++ b/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.h @@ -84,6 +84,8 @@ class TextureFilterClass enum TextureFilterMode { + TEXTURE_FILTER_NONE, + TEXTURE_FILTER_POINT, TEXTURE_FILTER_BILINEAR, TEXTURE_FILTER_TRILINEAR, TEXTURE_FILTER_ANISOTROPIC diff --git a/Generals/Code/Libraries/Source/WWVegas/WW3D2/ww3d.cpp b/Generals/Code/Libraries/Source/WWVegas/WW3D2/ww3d.cpp index 8472c8eb9eb..e2b0b18389b 100644 --- a/Generals/Code/Libraries/Source/WWVegas/WW3D2/ww3d.cpp +++ b/Generals/Code/Libraries/Source/WWVegas/WW3D2/ww3d.cpp @@ -221,7 +221,8 @@ static bool _LargeTextureExtraReductionEnabled = false; int WW3D::LastFrameMemoryAllocations; int WW3D::LastFrameMemoryFrees; -int WW3D::TextureFilter = 0; +// TheSuperHackers @info The retail game uses Bilinear filtering by default +int WW3D::TextureFilter = TextureFilterClass::TextureFilterMode::TEXTURE_FILTER_BILINEAR; bool WW3D::Lite = false; diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/ww3d.cpp b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/ww3d.cpp index 9f3a1229197..9d6006015fa 100644 --- a/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/ww3d.cpp +++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WW3D2/ww3d.cpp @@ -222,7 +222,8 @@ static bool _LargeTextureExtraReductionEnabled = false; int WW3D::LastFrameMemoryAllocations; int WW3D::LastFrameMemoryFrees; -int WW3D::TextureFilter = 0; +// TheSuperHackers @info The retail game uses Bilinear filtering by default +int WW3D::TextureFilter = TextureFilterClass::TextureFilterMode::TEXTURE_FILTER_BILINEAR; bool WW3D::Lite = false; From c3a245117b100a2081a8c430a1af716df7383a95 Mon Sep 17 00:00:00 2001 From: Mauller <26652186+Mauller@users.noreply.github.com> Date: Sun, 8 Mar 2026 11:41:05 +0000 Subject: [PATCH 5/7] Cleanup higher filter stage initialisation code --- .../Source/WWVegas/WW3D2/texturefilter.cpp | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.cpp b/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.cpp index d6e46c4c605..dfd0628275f 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.cpp @@ -215,32 +215,33 @@ void TextureFilterClass::_Init_Filters(TextureFilterMode filter_type) } - // For stages above zero, set best filter to the same as the stage zero, except if anisotropic + + // For stages above zero, set best filter to the same as the stage zero int i=1; for (;i Date: Sun, 8 Mar 2026 12:05:42 +0000 Subject: [PATCH 6/7] Add support for altering the anisotropy filtering level --- .../Source/WWVegas/WW3D2/texturefilter.cpp | 15 ++++++++++++--- .../Source/WWVegas/WW3D2/texturefilter.h | 11 ++++++++++- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.cpp b/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.cpp index dfd0628275f..2d96c50f29f 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.cpp @@ -196,9 +196,8 @@ void TextureFilterClass::_Init_Filters(TextureFilterMode filter_type) _MinTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_ANISOTROPIC; _MagTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_ANISOTROPIC; - // Set the Anisotropic filtering level for all stages - for (int stage = 0; stage < MAX_TEXTURE_STAGES; ++stage) - DX8Wrapper::Set_DX8_Texture_Stage_State(stage, D3DTSS_MAXANISOTROPY, 2); + // Set the Anisotropic filtering level for all stages - 2X by default + _Set_Max_Anisotropy(TEXTURE_FILTER_ANISOTROPIC_2X); } else { _MinTextureFilters[0][FILTER_TYPE_BEST]=D3DTEXF_POINT; @@ -269,6 +268,16 @@ void TextureFilterClass::Set_Mip_Mapping(FilterType mipmap) MipMapFilter=mipmap; } +//********************************************************************************************** +//! Set anisotropic filter level +/*! +*/ +void TextureFilterClass::_Set_Max_Anisotropy(AnisotropicFilterMode mode) +{ + for (int stage = 0; stage < MAX_TEXTURE_STAGES; ++stage) + DX8Wrapper::Set_DX8_Texture_Stage_State(stage, D3DTSS_MAXANISOTROPY, mode); +} + //********************************************************************************************** //! Set default min filter (legacy) /*! diff --git a/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.h b/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.h index cbfb22ab129..7d38431753e 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.h +++ b/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.h @@ -91,6 +91,14 @@ class TextureFilterClass TEXTURE_FILTER_ANISOTROPIC }; + enum AnisotropicFilterMode + { + TEXTURE_FILTER_ANISOTROPIC_2X = 2, + TEXTURE_FILTER_ANISOTROPIC_4X = 4, + TEXTURE_FILTER_ANISOTROPIC_8X = 8, + TEXTURE_FILTER_ANISOTROPIC_16X = 16 + }; + enum TxtAddrMode { TEXTURE_ADDRESS_REPEAT=0, @@ -115,8 +123,9 @@ class TextureFilterClass void Set_U_Addr_Mode(TxtAddrMode mode) { UAddressMode=mode; } void Set_V_Addr_Mode(TxtAddrMode mode) { VAddressMode=mode; } - // This needs to be called after device has been created + // These need to be called after device has been created static void _Init_Filters(TextureFilterMode texture_filter); + static void _Set_Max_Anisotropy(AnisotropicFilterMode mode); static void _Set_Default_Min_Filter(FilterType filter); static void _Set_Default_Mag_Filter(FilterType filter); From 2df4a8ae5ee92e13c69729e0e87f0ffae1f07c66 Mon Sep 17 00:00:00 2001 From: Mauller <26652186+Mauller@users.noreply.github.com> Date: Sun, 8 Mar 2026 12:35:48 +0000 Subject: [PATCH 7/7] Add default to apply no filtering if an invalid value is passed --- Core/Libraries/Source/WWVegas/WW3D2/texturefilter.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.cpp b/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.cpp index 2d96c50f29f..806f51bedc9 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.cpp +++ b/Core/Libraries/Source/WWVegas/WW3D2/texturefilter.cpp @@ -124,6 +124,11 @@ void TextureFilterClass::_Init_Filters(TextureFilterMode filter_type) BOOL FilterSupported = false; switch (filter_type) { + default: + // TheSuperHackers @info if we have an invalid filter_type, set the filtering to none + DEBUG_CRASH(("Invalid filter type passed into TextureFilterClass::_Init_Filters()")); + FALLTHROUGH; + case TEXTURE_FILTER_NONE: _MinTextureFilters[0][FILTER_TYPE_FAST]=D3DTEXF_POINT;