aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsfan5 <sfan5@live.de>2020-05-19 20:45:02 +0200
committersfan5 <sfan5@live.de>2020-05-20 22:55:51 +0200
commitc47a680db7f3c2f241cc444a1257607492872412 (patch)
tree74476e22c213cb942c01a4d4f5ec804410df6bf0 /src
parent732c8008f495bc344957bd0ccbd4010adb939207 (diff)
downloadminetest-c47a680db7f3c2f241cc444a1257607492872412.tar.gz
minetest-c47a680db7f3c2f241cc444a1257607492872412.tar.bz2
minetest-c47a680db7f3c2f241cc444a1257607492872412.zip
Stop wasting memory on identical textures when texture filtering is disabled
Diffstat (limited to 'src')
-rw-r--r--src/client/tile.cpp12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/client/tile.cpp b/src/client/tile.cpp
index 0fa7a4ae2..d03588b2b 100644
--- a/src/client/tile.cpp
+++ b/src/client/tile.cpp
@@ -668,7 +668,14 @@ video::ITexture* TextureSource::getTexture(const std::string &name, u32 *id)
video::ITexture* TextureSource::getTextureForMesh(const std::string &name, u32 *id)
{
- return getTexture(name + "^[applyfiltersformesh", id);
+ static thread_local bool filter_needed =
+ g_settings->getBool("texture_clean_transparent") ||
+ ((m_setting_trilinear_filter || m_setting_bilinear_filter) &&
+ g_settings->getS32("texture_min_size") > 1);
+ // Avoid duplicating texture if it won't actually change
+ if (filter_needed)
+ return getTexture(name + "^[applyfiltersformesh", id);
+ return getTexture(name, id);
}
Palette* TextureSource::getPalette(const std::string &name)
@@ -1623,6 +1630,9 @@ bool TextureSource::generateImagePart(std::string part_of_name,
*/
else if (str_starts_with(part_of_name, "[applyfiltersformesh"))
{
+ /* IMPORTANT: When changing this, getTextureForMesh() needs to be
+ * updated too. */
+
// Apply the "clean transparent" filter, if configured.
if (g_settings->getBool("texture_clean_transparent"))
imageCleanTransparent(baseimg, 127);