diff --git a/editor/scene/material_editor_plugin.cpp b/editor/scene/material_editor_plugin.cpp index f4b2281e154..28117242795 100644 --- a/editor/scene/material_editor_plugin.cpp +++ b/editor/scene/material_editor_plugin.cpp @@ -50,6 +50,36 @@ #include "scene/resources/canvas_item_material.h" #include "scene/resources/particle_process_material.h" +static Ref _make_shader_material(const Ref &p_from, bool p_copy_params = true) { + ERR_FAIL_COND_V(p_from.is_null(), Ref()); + ERR_FAIL_COND_V(!p_from->_is_initialized(), Ref()); + + Ref smat; + smat.instantiate(); + + Ref shader; + shader.instantiate(); + + String code = RS::get_singleton()->shader_get_code(p_from->get_shader_rid()); + shader->set_code(code); + smat->set_shader(shader); + + if (p_copy_params) { + List params; + RS::get_singleton()->get_shader_parameter_list(p_from->get_shader_rid(), ¶ms); + + for (const PropertyInfo &E : params) { + Variant value = RS::get_singleton()->material_get_param(p_from->get_rid(), E.name); + smat->set_shader_parameter(E.name, value); + } + } + + smat->set_render_priority(p_from->get_render_priority()); + smat->set_local_to_scene(p_from->is_local_to_scene()); + smat->set_name(p_from->get_name()); + return smat; +} + void MaterialEditor::gui_input(const Ref &p_event) { ERR_FAIL_COND(p_event.is_null()); @@ -455,20 +485,10 @@ bool StandardMaterial3DConversionPlugin::handles(const Ref &p_resource Ref StandardMaterial3DConversionPlugin::convert(const Ref &p_resource) const { Ref mat = p_resource; - ERR_FAIL_COND_V(mat.is_null(), Ref()); - ERR_FAIL_COND_V(!mat->_is_initialized(), Ref()); - - Ref smat; - smat.instantiate(); - - Ref shader; - shader.instantiate(); - - String code = RS::get_singleton()->shader_get_code(mat->get_shader_rid()); - - shader->set_code(code); - - smat->set_shader(shader); + Ref smat = _make_shader_material(mat, false); + if (smat.is_null()) { + return smat; + } List params; RS::get_singleton()->get_shader_parameter_list(mat->get_shader_rid(), ¶ms); @@ -484,10 +504,6 @@ Ref StandardMaterial3DConversionPlugin::convert(const Ref &p smat->set_shader_parameter(E.name, value); } } - - smat->set_render_priority(mat->get_render_priority()); - smat->set_local_to_scene(mat->is_local_to_scene()); - smat->set_name(mat->get_name()); return smat; } @@ -502,20 +518,10 @@ bool ORMMaterial3DConversionPlugin::handles(const Ref &p_resource) con Ref ORMMaterial3DConversionPlugin::convert(const Ref &p_resource) const { Ref mat = p_resource; - ERR_FAIL_COND_V(mat.is_null(), Ref()); - ERR_FAIL_COND_V(!mat->_is_initialized(), Ref()); - - Ref smat; - smat.instantiate(); - - Ref shader; - shader.instantiate(); - - String code = RS::get_singleton()->shader_get_code(mat->get_shader_rid()); - - shader->set_code(code); - - smat->set_shader(shader); + Ref smat = _make_shader_material(mat, false); + if (smat.is_null()) { + return smat; + } List params; RS::get_singleton()->get_shader_parameter_list(mat->get_shader_rid(), ¶ms); @@ -531,10 +537,6 @@ Ref ORMMaterial3DConversionPlugin::convert(const Ref &p_reso smat->set_shader_parameter(E.name, value); } } - - smat->set_render_priority(mat->get_render_priority()); - smat->set_local_to_scene(mat->is_local_to_scene()); - smat->set_name(mat->get_name()); return smat; } @@ -548,34 +550,7 @@ bool ParticleProcessMaterialConversionPlugin::handles(const Ref &p_res } Ref ParticleProcessMaterialConversionPlugin::convert(const Ref &p_resource) const { - Ref mat = p_resource; - ERR_FAIL_COND_V(mat.is_null(), Ref()); - ERR_FAIL_COND_V(!mat->_is_initialized(), Ref()); - - Ref smat; - smat.instantiate(); - - Ref shader; - shader.instantiate(); - - String code = RS::get_singleton()->shader_get_code(mat->get_shader_rid()); - - shader->set_code(code); - - smat->set_shader(shader); - - List params; - RS::get_singleton()->get_shader_parameter_list(mat->get_shader_rid(), ¶ms); - - for (const PropertyInfo &E : params) { - Variant value = RS::get_singleton()->material_get_param(mat->get_rid(), E.name); - smat->set_shader_parameter(E.name, value); - } - - smat->set_render_priority(mat->get_render_priority()); - smat->set_local_to_scene(mat->is_local_to_scene()); - smat->set_name(mat->get_name()); - return smat; + return _make_shader_material(p_resource); } String CanvasItemMaterialConversionPlugin::converts_to() const { @@ -588,34 +563,7 @@ bool CanvasItemMaterialConversionPlugin::handles(const Ref &p_resource } Ref CanvasItemMaterialConversionPlugin::convert(const Ref &p_resource) const { - Ref mat = p_resource; - ERR_FAIL_COND_V(mat.is_null(), Ref()); - ERR_FAIL_COND_V(!mat->_is_initialized(), Ref()); - - Ref smat; - smat.instantiate(); - - Ref shader; - shader.instantiate(); - - String code = RS::get_singleton()->shader_get_code(mat->get_shader_rid()); - - shader->set_code(code); - - smat->set_shader(shader); - - List params; - RS::get_singleton()->get_shader_parameter_list(mat->get_shader_rid(), ¶ms); - - for (const PropertyInfo &E : params) { - Variant value = RS::get_singleton()->material_get_param(mat->get_rid(), E.name); - smat->set_shader_parameter(E.name, value); - } - - smat->set_render_priority(mat->get_render_priority()); - smat->set_local_to_scene(mat->is_local_to_scene()); - smat->set_name(mat->get_name()); - return smat; + return _make_shader_material(p_resource); } String ProceduralSkyMaterialConversionPlugin::converts_to() const { @@ -628,34 +576,7 @@ bool ProceduralSkyMaterialConversionPlugin::handles(const Ref &p_resou } Ref ProceduralSkyMaterialConversionPlugin::convert(const Ref &p_resource) const { - Ref mat = p_resource; - ERR_FAIL_COND_V(mat.is_null(), Ref()); - ERR_FAIL_COND_V(!mat->_is_initialized(), Ref()); - - Ref smat; - smat.instantiate(); - - Ref shader; - shader.instantiate(); - - String code = RS::get_singleton()->shader_get_code(mat->get_shader_rid()); - - shader->set_code(code); - - smat->set_shader(shader); - - List params; - RS::get_singleton()->get_shader_parameter_list(mat->get_shader_rid(), ¶ms); - - for (const PropertyInfo &E : params) { - Variant value = RS::get_singleton()->material_get_param(mat->get_rid(), E.name); - smat->set_shader_parameter(E.name, value); - } - - smat->set_render_priority(mat->get_render_priority()); - smat->set_local_to_scene(mat->is_local_to_scene()); - smat->set_name(mat->get_name()); - return smat; + return _make_shader_material(p_resource); } String PanoramaSkyMaterialConversionPlugin::converts_to() const { @@ -668,34 +589,7 @@ bool PanoramaSkyMaterialConversionPlugin::handles(const Ref &p_resourc } Ref PanoramaSkyMaterialConversionPlugin::convert(const Ref &p_resource) const { - Ref mat = p_resource; - ERR_FAIL_COND_V(mat.is_null(), Ref()); - ERR_FAIL_COND_V(!mat->_is_initialized(), Ref()); - - Ref smat; - smat.instantiate(); - - Ref shader; - shader.instantiate(); - - String code = RS::get_singleton()->shader_get_code(mat->get_shader_rid()); - - shader->set_code(code); - - smat->set_shader(shader); - - List params; - RS::get_singleton()->get_shader_parameter_list(mat->get_shader_rid(), ¶ms); - - for (const PropertyInfo &E : params) { - Variant value = RS::get_singleton()->material_get_param(mat->get_rid(), E.name); - smat->set_shader_parameter(E.name, value); - } - - smat->set_render_priority(mat->get_render_priority()); - smat->set_local_to_scene(mat->is_local_to_scene()); - smat->set_name(mat->get_name()); - return smat; + return _make_shader_material(p_resource); } String PhysicalSkyMaterialConversionPlugin::converts_to() const { @@ -708,34 +602,7 @@ bool PhysicalSkyMaterialConversionPlugin::handles(const Ref &p_resourc } Ref PhysicalSkyMaterialConversionPlugin::convert(const Ref &p_resource) const { - Ref mat = p_resource; - ERR_FAIL_COND_V(mat.is_null(), Ref()); - ERR_FAIL_COND_V(!mat->_is_initialized(), Ref()); - - Ref smat; - smat.instantiate(); - - Ref shader; - shader.instantiate(); - - String code = RS::get_singleton()->shader_get_code(mat->get_shader_rid()); - - shader->set_code(code); - - smat->set_shader(shader); - - List params; - RS::get_singleton()->get_shader_parameter_list(mat->get_shader_rid(), ¶ms); - - for (const PropertyInfo &E : params) { - Variant value = RS::get_singleton()->material_get_param(mat->get_rid(), E.name); - smat->set_shader_parameter(E.name, value); - } - - smat->set_render_priority(mat->get_render_priority()); - smat->set_local_to_scene(mat->is_local_to_scene()); - smat->set_name(mat->get_name()); - return smat; + return _make_shader_material(p_resource); } String FogMaterialConversionPlugin::converts_to() const { @@ -748,30 +615,5 @@ bool FogMaterialConversionPlugin::handles(const Ref &p_resource) const } Ref FogMaterialConversionPlugin::convert(const Ref &p_resource) const { - Ref mat = p_resource; - ERR_FAIL_COND_V(mat.is_null(), Ref()); - ERR_FAIL_COND_V(!mat->_is_initialized(), Ref()); - - Ref smat; - smat.instantiate(); - - Ref shader; - shader.instantiate(); - - String code = RS::get_singleton()->shader_get_code(mat->get_shader_rid()); - - shader->set_code(code); - - smat->set_shader(shader); - - List params; - RS::get_singleton()->get_shader_parameter_list(mat->get_shader_rid(), ¶ms); - - for (const PropertyInfo &E : params) { - Variant value = RS::get_singleton()->material_get_param(mat->get_rid(), E.name); - smat->set_shader_parameter(E.name, value); - } - - smat->set_render_priority(mat->get_render_priority()); - return smat; + return _make_shader_material(p_resource); }