Browse Source

Merge pull request #30152 from Chaosus/vs_conversion

Added convertor from VisualShader to Shader
Rémi Verschelde 6 years ago
parent
commit
187d8addf9

+ 4 - 0
editor/editor_node.cpp

@@ -6342,6 +6342,10 @@ EditorNode::EditorNode() {
 		Ref<ParticlesMaterialConversionPlugin> particles_mat_convert;
 		particles_mat_convert.instance();
 		resource_conversion_plugins.push_back(particles_mat_convert);
+
+		Ref<VisualShaderConversionPlugin> vshader_convert;
+		vshader_convert.instance();
+		resource_conversion_plugins.push_back(vshader_convert);
 	}
 	update_spinner_step_msec = OS::get_singleton()->get_ticks_msec();
 	update_spinner_step_frame = Engine::get_singleton()->get_frames_drawn();

+ 27 - 0
editor/plugins/visual_shader_editor_plugin.cpp

@@ -2771,3 +2771,30 @@ void VisualShaderNodePortPreview::_bind_methods() {
 
 VisualShaderNodePortPreview::VisualShaderNodePortPreview() {
 }
+
+//////////////////////////////////
+
+String VisualShaderConversionPlugin::converts_to() const {
+
+	return "Shader";
+}
+
+bool VisualShaderConversionPlugin::handles(const Ref<Resource> &p_resource) const {
+
+	Ref<VisualShader> vshader = p_resource;
+	return vshader.is_valid();
+}
+
+Ref<Resource> VisualShaderConversionPlugin::convert(const Ref<Resource> &p_resource) const {
+
+	Ref<VisualShader> vshader = p_resource;
+	ERR_FAIL_COND_V(!vshader.is_valid(), Ref<Resource>());
+
+	Ref<Shader> shader;
+	shader.instance();
+
+	String code = vshader->get_code();
+	shader->set_code(code);
+
+	return shader;
+}

+ 9 - 0
editor/plugins/visual_shader_editor_plugin.h

@@ -302,4 +302,13 @@ public:
 	VisualShaderNodePortPreview();
 };
 
+class VisualShaderConversionPlugin : public EditorResourceConversionPlugin {
+	GDCLASS(VisualShaderConversionPlugin, EditorResourceConversionPlugin);
+
+public:
+	virtual String converts_to() const;
+	virtual bool handles(const Ref<Resource> &p_resource) const;
+	virtual Ref<Resource> convert(const Ref<Resource> &p_resource) const;
+};
+
 #endif // VISUAL_SHADER_EDITOR_PLUGIN_H