mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-30 21:21:10 +00:00 
			
		
		
		
	Ability to convert from SpatialMaterial to ShaderMaterial
This commit is contained in:
		
							parent
							
								
									779426d2df
								
							
						
					
					
						commit
						3237e05c36
					
				
					 8 changed files with 185 additions and 2 deletions
				
			
		|  | @ -30,9 +30,11 @@ | |||
| 
 | ||||
| // FIXME: Disabled as (according to reduz) users were complaining that it gets in the way
 | ||||
| // Waiting for PropertyEditor rewrite (planned for 3.1) to be refactored.
 | ||||
| #if 0 | ||||
| 
 | ||||
| #include "material_editor_plugin.h" | ||||
| 
 | ||||
| #if 0 | ||||
| 
 | ||||
| #include "scene/main/viewport.h" | ||||
| 
 | ||||
| void MaterialEditor::_gui_input(InputEvent p_event) { | ||||
|  | @ -416,3 +418,41 @@ MaterialEditorPlugin::~MaterialEditorPlugin() | |||
| } | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| String SpatialMaterialConversionPlugin::converts_to() const { | ||||
| 
 | ||||
| 	return "ShaderMaterial"; | ||||
| } | ||||
| bool SpatialMaterialConversionPlugin::handles(const Ref<Resource> &p_resource) const { | ||||
| 
 | ||||
| 	Ref<SpatialMaterial> mat = p_resource; | ||||
| 	return mat.is_valid(); | ||||
| } | ||||
| Ref<Resource> SpatialMaterialConversionPlugin::convert(const Ref<Resource> &p_resource) { | ||||
| 
 | ||||
| 	Ref<SpatialMaterial> mat = p_resource; | ||||
| 	ERR_FAIL_COND_V(!mat.is_valid(), Ref<Resource>()); | ||||
| 
 | ||||
| 	Ref<ShaderMaterial> smat; | ||||
| 	smat.instance(); | ||||
| 
 | ||||
| 	Ref<Shader> shader; | ||||
| 	shader.instance(); | ||||
| 
 | ||||
| 	String code = VS::get_singleton()->shader_get_code(mat->get_shader_rid()); | ||||
| 
 | ||||
| 	shader->set_code(code); | ||||
| 
 | ||||
| 	smat->set_shader(shader); | ||||
| 
 | ||||
| 	List<PropertyInfo> params; | ||||
| 	VS::get_singleton()->shader_get_param_list(mat->get_shader_rid(), ¶ms); | ||||
| 
 | ||||
| 	for (List<PropertyInfo>::Element *E = params.front(); E; E = E->next()) { | ||||
| 		Variant value = VS::get_singleton()->material_get_param(mat->get_rid(), E->get().name); | ||||
| 		smat->set_shader_param(E->get().name, value); | ||||
| 	} | ||||
| 
 | ||||
| 	smat->set_render_priority(mat->get_render_priority()); | ||||
| 	return smat; | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Juan Linietsky
						Juan Linietsky