Enable clean transparent filter in more cases

It was determined that this fixes scaling artifacts that can happen with bilinear,
trilinear or anisotropic filtering alone.
Since the previous commit did not bring back the relevant setting, we fix this
shortcoming by just enabling it in all cases where it is known to help.
This commit is contained in:
sfan5 2023-11-22 16:18:09 +01:00 committed by SmallJoker
parent 7f9326805c
commit d6a8b546e4

@ -437,6 +437,7 @@ private:
bool m_setting_mipmap; bool m_setting_mipmap;
bool m_setting_trilinear_filter; bool m_setting_trilinear_filter;
bool m_setting_bilinear_filter; bool m_setting_bilinear_filter;
bool m_setting_anisotropic_filter;
}; };
IWritableTextureSource *createTextureSource() IWritableTextureSource *createTextureSource()
@ -458,6 +459,7 @@ TextureSource::TextureSource()
m_setting_mipmap = g_settings->getBool("mip_map"); m_setting_mipmap = g_settings->getBool("mip_map");
m_setting_trilinear_filter = g_settings->getBool("trilinear_filter"); m_setting_trilinear_filter = g_settings->getBool("trilinear_filter");
m_setting_bilinear_filter = g_settings->getBool("bilinear_filter"); m_setting_bilinear_filter = g_settings->getBool("bilinear_filter");
m_setting_anisotropic_filter = g_settings->getBool("anisotropic_filter");
} }
TextureSource::~TextureSource() TextureSource::~TextureSource()
@ -702,10 +704,9 @@ video::ITexture* TextureSource::getTexture(const std::string &name, u32 *id)
video::ITexture* TextureSource::getTextureForMesh(const std::string &name, u32 *id) video::ITexture* TextureSource::getTextureForMesh(const std::string &name, u32 *id)
{ {
// Avoid duplicating texture if it won't actually change // Avoid duplicating texture if it won't actually change
static thread_local bool filter_needed = const bool filter_needed =
m_setting_mipmap || m_setting_mipmap || m_setting_trilinear_filter ||
((m_setting_trilinear_filter || m_setting_bilinear_filter) && m_setting_bilinear_filter || m_setting_anisotropic_filter;
g_settings->getS32("texture_min_size") > 1);
if (filter_needed) if (filter_needed)
return getTexture(name + "^[applyfiltersformesh", id); return getTexture(name + "^[applyfiltersformesh", id);
return getTexture(name, id); return getTexture(name, id);
@ -1741,7 +1742,8 @@ bool TextureSource::generateImagePart(std::string part_of_name,
} }
// Apply the "clean transparent" filter, if needed // Apply the "clean transparent" filter, if needed
if (m_setting_mipmap) if (m_setting_mipmap || m_setting_bilinear_filter ||
m_setting_trilinear_filter || m_setting_anisotropic_filter)
imageCleanTransparent(baseimg, 127); imageCleanTransparent(baseimg, 127);
/* Upscale textures to user's requested minimum size. This is a trick to make /* Upscale textures to user's requested minimum size. This is a trick to make