Browse Source

-Fix problem of order of import plugins, closes #26340
-Ensure resource previewer does not start until first import is done

Juan Linietsky 6 năm trước cách đây
mục cha
commit
a5370b1b1b

+ 7 - 2
core/io/resource_importer.cpp

@@ -406,9 +406,14 @@ bool ResourceFormatImporter::are_import_settings_valid(const String &p_path) con
 }
 
 String ResourceFormatImporter::get_import_settings_hash() const {
+
+	Vector<Ref<ResourceImporter> > sorted_importers = importers;
+
+	sorted_importers.sort_custom<SortImporterByName>();
+
 	String hash;
-	for (int i = 0; i < importers.size(); i++) {
-		hash += ":" + importers[i]->get_importer_name() + ":" + importers[i]->get_import_settings_string();
+	for (int i = 0; i < sorted_importers.size(); i++) {
+		hash += ":" + sorted_importers[i]->get_importer_name() + ":" + sorted_importers[i]->get_import_settings_string();
 	}
 	return hash.md5_text();
 }

+ 0 - 1
core/io/resource_importer.h

@@ -77,7 +77,6 @@ public:
 
 	void add_importer(const Ref<ResourceImporter> &p_importer) {
 		importers.push_back(p_importer);
-		importers.sort_custom<SortImporterByName>();
 	}
 	void remove_importer(const Ref<ResourceImporter> &p_importer) { importers.erase(p_importer); }
 	Ref<ResourceImporter> get_importer_by_name(const String &p_name) const;

+ 2 - 0
editor/editor_node.cpp

@@ -531,6 +531,8 @@ void EditorNode::_sources_changed(bool p_exist) {
 
 	if (waiting_for_first_scan) {
 
+		EditorResourcePreview::get_singleton()->start(); //start previes now that it's safe
+
 		_load_docks();
 
 		if (defer_load_scene != "") {

+ 5 - 2
editor/editor_resource_preview.cpp

@@ -417,6 +417,10 @@ void EditorResourcePreview::check_for_invalidation(const String &p_path) {
 	}
 }
 
+void EditorResourcePreview::start() {
+	ERR_FAIL_COND(thread);
+	thread = Thread::create(_thread_func, this);
+}
 void EditorResourcePreview::stop() {
 	if (thread) {
 		exit = true;
@@ -428,13 +432,12 @@ void EditorResourcePreview::stop() {
 }
 
 EditorResourcePreview::EditorResourcePreview() {
+	thread = NULL;
 	singleton = this;
 	preview_mutex = Mutex::create();
 	preview_sem = Semaphore::create();
 	order = 0;
 	exit = false;
-
-	thread = Thread::create(_thread_func, this);
 }
 
 EditorResourcePreview::~EditorResourcePreview() {

+ 1 - 0
editor/editor_resource_preview.h

@@ -126,6 +126,7 @@ public:
 	void remove_preview_generator(const Ref<EditorResourcePreviewGenerator> &p_generator);
 	void check_for_invalidation(const String &p_path);
 
+	void start();
 	void stop();
 
 	EditorResourcePreview();