From 7528c204d33327a69cdb39a5d7cb87512f1f8272 Mon Sep 17 00:00:00 2001 From: Yuri Roubinsky Date: Fri, 29 Oct 2021 17:49:12 +0300 Subject: Added convertor from `ORMMaterial3D` to `ShaderMaterial` --- editor/plugins/material_editor_plugin.cpp | 46 +++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'editor/plugins/material_editor_plugin.cpp') diff --git a/editor/plugins/material_editor_plugin.cpp b/editor/plugins/material_editor_plugin.cpp index 00315aa88d..140d2952dd 100644 --- a/editor/plugins/material_editor_plugin.cpp +++ b/editor/plugins/material_editor_plugin.cpp @@ -284,6 +284,52 @@ Ref StandardMaterial3DConversionPlugin::convert(const Ref &p return smat; } +String ORMMaterial3DConversionPlugin::converts_to() const { + return "ShaderMaterial"; +} + +bool ORMMaterial3DConversionPlugin::handles(const Ref &p_resource) const { + Ref mat = p_resource; + return mat.is_valid(); +} + +Ref ORMMaterial3DConversionPlugin::convert(const Ref &p_resource) const { + Ref mat = p_resource; + ERR_FAIL_COND_V(!mat.is_valid(), 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()->shader_get_param_list(mat->get_shader_rid(), ¶ms); + + for (const PropertyInfo &E : params) { + // Texture parameter has to be treated specially since ORMMaterial3D saved it + // as RID but ShaderMaterial needs Texture itself + Ref texture = mat->get_texture_by_name(E.name); + if (texture.is_valid()) { + smat->set_shader_param(E.name, texture); + } else { + Variant value = RS::get_singleton()->material_get_param(mat->get_rid(), E.name); + smat->set_shader_param(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; +} + String ParticlesMaterialConversionPlugin::converts_to() const { return "ShaderMaterial"; } -- cgit v1.2.3