mirror of
https://github.com/minetest/minetest.git
synced 2024-11-30 11:33:44 +01:00
Fix persistent ^[brighten after damage again (#5739)
The old texture modifier is restored by passing `m_previous_texture_modifier`. Either copy it manually or let the function parameter do that. Victims so far: 8e0b80a Apr 2018 eb2bda7 May 2019
This commit is contained in:
parent
40dadecb6e
commit
a1459a9eac
@ -1062,7 +1062,8 @@ void GenericCAO::updateTexturePos()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GenericCAO::updateTextures(const std::string &modref)
|
// Do not pass by reference, see header.
|
||||||
|
void GenericCAO::updateTextures(std::string mod)
|
||||||
{
|
{
|
||||||
ITextureSource *tsrc = m_client->tsrc();
|
ITextureSource *tsrc = m_client->tsrc();
|
||||||
|
|
||||||
@ -1071,21 +1072,9 @@ void GenericCAO::updateTextures(const std::string &modref)
|
|||||||
bool use_anisotropic_filter = g_settings->getBool("anisotropic_filter");
|
bool use_anisotropic_filter = g_settings->getBool("anisotropic_filter");
|
||||||
|
|
||||||
m_previous_texture_modifier = m_current_texture_modifier;
|
m_previous_texture_modifier = m_current_texture_modifier;
|
||||||
m_current_texture_modifier = modref;
|
m_current_texture_modifier = mod;
|
||||||
m_glow = m_prop.glow;
|
m_glow = m_prop.glow;
|
||||||
|
|
||||||
// Create a reference to the copy of "modref" just created. The
|
|
||||||
// following code will then use this reference instead of the
|
|
||||||
// original parameter which was passed by reference. This is
|
|
||||||
// necessary as "modref" can be a class member and there is a swap on
|
|
||||||
// those class members which can get triggered by the rest of the
|
|
||||||
// code of this method. This is faster than passing the "mod" by
|
|
||||||
// value because it reuses the copy made by the assignment to
|
|
||||||
// m_current_texture_modifier for the "mod" instead of having two
|
|
||||||
// copies, one for "mod" and another one (created from "mod") for
|
|
||||||
// the m_current_texture_modifier class member.
|
|
||||||
const std::string &mod = m_current_texture_modifier;
|
|
||||||
|
|
||||||
video::E_MATERIAL_TYPE material_type = (m_prop.use_texture_alpha) ?
|
video::E_MATERIAL_TYPE material_type = (m_prop.use_texture_alpha) ?
|
||||||
video::EMT_TRANSPARENT_ALPHA_CHANNEL : video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;
|
video::EMT_TRANSPARENT_ALPHA_CHANNEL : video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;
|
||||||
|
|
||||||
|
@ -225,7 +225,9 @@ public:
|
|||||||
|
|
||||||
void updateTexturePos();
|
void updateTexturePos();
|
||||||
|
|
||||||
void updateTextures(const std::string &modref);
|
// ffs this HAS TO BE a string copy! See #5739 if you think otherwise
|
||||||
|
// Reason: updateTextures(m_previous_texture_modifier);
|
||||||
|
void updateTextures(std::string mod);
|
||||||
|
|
||||||
void updateAnimation();
|
void updateAnimation();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user