Ver Fonte

Merge pull request #33683 from clayjohn/material-texture-bug

Properly update texture when roughness/metallic set
Rémi Verschelde há 5 anos atrás
pai
commit
0a96235b44
2 ficheiros alterados com 5 adições e 1 exclusões
  1. 1 1
      scene/resources/material.cpp
  2. 4 0
      scene/resources/material.h

+ 1 - 1
scene/resources/material.cpp

@@ -1405,8 +1405,8 @@ void SpatialMaterial::set_texture(TextureParam p_param, const Ref<Texture> &p_te
 	textures[p_param] = p_texture;
 	RID rid = p_texture.is_valid() ? p_texture->get_rid() : RID();
 	VS::get_singleton()->material_set_param(_get_material(), shader_names->texture_names[p_param], rid);
-	_queue_shader_change();
 	_change_notify();
+	_queue_shader_change();
 }
 
 Ref<Texture> SpatialMaterial::get_texture(TextureParam p_param) const {

+ 4 - 0
scene/resources/material.h

@@ -260,6 +260,8 @@ private:
 			uint64_t proximity_fade : 1;
 			uint64_t distance_fade : 2;
 			uint64_t emission_op : 1;
+			uint64_t texture_metallic : 1;
+			uint64_t texture_roughness : 1;
 		};
 
 		uint64_t key;
@@ -305,6 +307,8 @@ private:
 		mk.proximity_fade = proximity_fade_enabled;
 		mk.distance_fade = distance_fade;
 		mk.emission_op = emission_op;
+		mk.texture_metallic = textures[TEXTURE_METALLIC].is_valid() ? 1 : 0;
+		mk.texture_roughness = textures[TEXTURE_ROUGHNESS].is_valid() ? 1 : 0;
 
 		return mk;
 	}