Particles: fix corrupted scene when saved after convert (2nd try)

(cherry picked from commit 38865345d9)
This commit is contained in:
Poommetee Ketson 2018-02-24 15:58:17 +07:00 committed by Hein-Pieter van Braam
parent 3013f4cf2b
commit 2e61ca6193
2 changed files with 6 additions and 21 deletions

View File

@ -1911,7 +1911,7 @@ void RasterizerStorageGLES3::material_set_param(RID p_material, const StringName
Variant RasterizerStorageGLES3::material_get_param(RID p_material, const StringName &p_param) const { Variant RasterizerStorageGLES3::material_get_param(RID p_material, const StringName &p_param) const {
const Material *material = material_owner.get(p_material); const Material *material = material_owner.get(p_material);
ERR_FAIL_COND_V(!material, RID()); ERR_FAIL_COND_V(!material, Variant());
if (material->params.has(p_param)) if (material->params.has(p_param))
return material->params[p_param]; return material->params[p_param];

View File

@ -1233,28 +1233,19 @@ void ParticlesMaterial::set_emission_box_extents(Vector3 p_extents) {
void ParticlesMaterial::set_emission_point_texture(const Ref<Texture> &p_points) { void ParticlesMaterial::set_emission_point_texture(const Ref<Texture> &p_points) {
emission_point_texture = p_points; emission_point_texture = p_points;
RID texture; VisualServer::get_singleton()->material_set_param(_get_material(), shader_names->emission_texture_points, p_points);
if (p_points.is_valid())
texture = p_points->get_rid();
VisualServer::get_singleton()->material_set_param(_get_material(), shader_names->emission_texture_points, texture);
} }
void ParticlesMaterial::set_emission_normal_texture(const Ref<Texture> &p_normals) { void ParticlesMaterial::set_emission_normal_texture(const Ref<Texture> &p_normals) {
emission_normal_texture = p_normals; emission_normal_texture = p_normals;
RID texture; VisualServer::get_singleton()->material_set_param(_get_material(), shader_names->emission_texture_normal, p_normals);
if (p_normals.is_valid())
texture = p_normals->get_rid();
VisualServer::get_singleton()->material_set_param(_get_material(), shader_names->emission_texture_normal, texture);
} }
void ParticlesMaterial::set_emission_color_texture(const Ref<Texture> &p_colors) { void ParticlesMaterial::set_emission_color_texture(const Ref<Texture> &p_colors) {
emission_color_texture = p_colors; emission_color_texture = p_colors;
RID texture; VisualServer::get_singleton()->material_set_param(_get_material(), shader_names->emission_texture_color, p_colors);
if (p_colors.is_valid())
texture = p_colors->get_rid();
VisualServer::get_singleton()->material_set_param(_get_material(), shader_names->emission_texture_color, texture);
_queue_shader_change(); _queue_shader_change();
} }
@ -1316,10 +1307,7 @@ void ParticlesMaterial::set_trail_size_modifier(const Ref<CurveTexture> &p_trail
curve->ensure_default_setup(); curve->ensure_default_setup();
} }
RID texture; VisualServer::get_singleton()->material_set_param(_get_material(), shader_names->trail_size_modifier, curve);
if (p_trail_size_modifier.is_valid())
texture = p_trail_size_modifier->get_rid();
VisualServer::get_singleton()->material_set_param(_get_material(), shader_names->trail_size_modifier, texture);
_queue_shader_change(); _queue_shader_change();
} }
@ -1331,10 +1319,7 @@ Ref<CurveTexture> ParticlesMaterial::get_trail_size_modifier() const {
void ParticlesMaterial::set_trail_color_modifier(const Ref<GradientTexture> &p_trail_color_modifier) { void ParticlesMaterial::set_trail_color_modifier(const Ref<GradientTexture> &p_trail_color_modifier) {
trail_color_modifier = p_trail_color_modifier; trail_color_modifier = p_trail_color_modifier;
RID texture; VisualServer::get_singleton()->material_set_param(_get_material(), shader_names->trail_color_modifier, p_trail_color_modifier);
if (p_trail_color_modifier.is_valid())
texture = p_trail_color_modifier->get_rid();
VisualServer::get_singleton()->material_set_param(_get_material(), shader_names->trail_color_modifier, texture);
_queue_shader_change(); _queue_shader_change();
} }