mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-11-04 01:05:48 +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:8e0b80aApr 2018eb2bda7May 2019
This commit is contained in:
		@@ -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();
 | 
			
		||||
 | 
			
		||||
@@ -1071,21 +1072,9 @@ void GenericCAO::updateTextures(const std::string &modref)
 | 
			
		||||
	bool use_anisotropic_filter = g_settings->getBool("anisotropic_filter");
 | 
			
		||||
 | 
			
		||||
	m_previous_texture_modifier = m_current_texture_modifier;
 | 
			
		||||
	m_current_texture_modifier = modref;
 | 
			
		||||
	m_current_texture_modifier = mod;
 | 
			
		||||
	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::EMT_TRANSPARENT_ALPHA_CHANNEL : video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -225,7 +225,9 @@ public:
 | 
			
		||||
 | 
			
		||||
	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();
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user