浏览代码

Fix shader loading, making possible load .shd and .sgp from editor

Franklin Sobrinho 9 年之前
父节点
当前提交
1138103c63
共有 3 个文件被更改,包括 19 次插入19 次删除
  1. 2 0
      scene/resources/material.cpp
  2. 4 16
      scene/resources/shader.cpp
  3. 13 3
      tools/editor/property_editor.cpp

+ 2 - 0
scene/resources/material.cpp

@@ -535,6 +535,8 @@ void ShaderMaterial::_shader_changed() {
 
 void ShaderMaterial::set_shader(const Ref<Shader>& p_shader) {
 
+	ERR_FAIL_COND(p_shader.is_valid() && p_shader->get_mode()!=Shader::MODE_MATERIAL);
+
 	if (shader.is_valid())
 		shader->disconnect(SceneStringNames::get_singleton()->changed,this,SceneStringNames::get_singleton()->_shader_changed);
 	shader=p_shader;

+ 4 - 16
scene/resources/shader.cpp

@@ -448,31 +448,19 @@ RES ResourceFormatLoaderShader::load(const String &p_path, const String& p_origi
 
 void ResourceFormatLoaderShader::get_recognized_extensions(List<String> *p_extensions) const {
 
-	p_extensions->push_back("shader");
+	ObjectTypeDB::get_extensions_for_type("Shader", p_extensions);
 }
+
 bool ResourceFormatLoaderShader::handles_type(const String& p_type) const {
 
-	return p_type=="Shader";
+	return ObjectTypeDB::is_type(p_type, "Shader");
 }
 
 
 String ResourceFormatLoaderShader::get_resource_type(const String &p_path) const {
 
-	if (p_path.extension().to_lower()=="shader")
+	if (p_path.extension().to_lower()=="shd")
 		return "Shader";
 	return "";
 }
 
-
-
-
-
-
-
-
-
-
-
-
-
-

+ 13 - 3
tools/editor/property_editor.cpp

@@ -89,13 +89,23 @@ void CustomPropertyEditor::_menu_option(int p_which) {
 				case OBJ_MENU_LOAD: {
 
 					file->set_mode(EditorFileDialog::MODE_OPEN_FILE);
-					List<String> extensions;
 					String type=(hint==PROPERTY_HINT_RESOURCE_TYPE)?hint_text:String();
 
-					ResourceLoader::get_recognized_extensions_for_type(type,&extensions);
-					file->clear_filters();
+					List<String> extensions;
+					for (int i=0;i<type.get_slice_count(",");i++) {
+
+						ResourceLoader::get_recognized_extensions_for_type(type.get_slice(",",i),&extensions);
+					}
+
+					Set<String> valid_extensions;
 					for (List<String>::Element *E=extensions.front();E;E=E->next()) {
 
+						valid_extensions.insert(E->get());
+					}
+
+					file->clear_filters();
+					for (Set<String>::Element *E=valid_extensions.front();E;E=E->next()) {
+
 						file->add_filter("*."+E->get()+" ; "+E->get().to_upper() );
 
 					}