diff --git a/scene/resources/material.cpp b/scene/resources/material.cpp index c130d98a2ec7..b5ca03c8366a 100644 --- a/scene/resources/material.cpp +++ b/scene/resources/material.cpp @@ -550,6 +550,20 @@ bool ShaderMaterial::_can_use_render_priority() const { return shader.is_valid() && shader->get_mode() == Shader::MODE_SPATIAL; } +Ref ShaderMaterial::_duplicate(const DuplicateParams &p_params) const { + Ref dup; + dup.instantiate(); + + dup->set_shader(shader); + dup->set_next_pass(get_next_pass()); + dup->set_render_priority(get_render_priority()); + + dup->param_cache = param_cache; + dup->remap_cache = remap_cache; + + return dup; +} + Shader::Mode ShaderMaterial::get_shader_mode() const { if (shader.is_valid()) { return shader->get_mode(); diff --git a/scene/resources/material.h b/scene/resources/material.h index c355dc2c0b88..f08698b656f2 100644 --- a/scene/resources/material.h +++ b/scene/resources/material.h @@ -132,6 +132,8 @@ class ShaderMaterial : public Material { virtual RID get_rid() const override; virtual RID get_shader_rid() const override; + virtual Ref _duplicate(const DuplicateParams &p_params) const override; + ShaderMaterial(); ~ShaderMaterial(); };