diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2024-10-01 17:31:14 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2024-10-01 17:31:14 +0200 |
commit | 3b17e3470a84eb7f375b4eeac5217634816dfe3e (patch) | |
tree | 1eb2593836415661e4146d56c38cbc1c33653801 | |
parent | 8aabdc457f8bd3897b83be156a22cf99b994f35a (diff) | |
parent | 8a41b1d90ff447fb3014b7402f28f820ddc7c8a6 (diff) | |
download | redot-engine-3b17e3470a84eb7f375b4eeac5217634816dfe3e.tar.gz |
Merge pull request #97532 from kisg/use_loader_library_check
GDExtension: Use loader to check if the library exists.
-rw-r--r-- | core/extension/gdextension_library_loader.cpp | 4 | ||||
-rw-r--r-- | core/extension/gdextension_library_loader.h | 1 | ||||
-rw-r--r-- | core/extension/gdextension_loader.h | 1 | ||||
-rw-r--r-- | core/extension/gdextension_manager.cpp | 3 |
4 files changed, 8 insertions, 1 deletions
diff --git a/core/extension/gdextension_library_loader.cpp b/core/extension/gdextension_library_loader.cpp index 5ba4933c35..d5f2eb668f 100644 --- a/core/extension/gdextension_library_loader.cpp +++ b/core/extension/gdextension_library_loader.cpp @@ -259,6 +259,10 @@ bool GDExtensionLibraryLoader::has_library_changed() const { return false; } +bool GDExtensionLibraryLoader::library_exists() const { + return FileAccess::exists(resource_path); +} + Error GDExtensionLibraryLoader::parse_gdextension_file(const String &p_path) { resource_path = p_path; diff --git a/core/extension/gdextension_library_loader.h b/core/extension/gdextension_library_loader.h index f4372a75d4..f781611b30 100644 --- a/core/extension/gdextension_library_loader.h +++ b/core/extension/gdextension_library_loader.h @@ -77,6 +77,7 @@ public: virtual void close_library() override; virtual bool is_library_open() const override; virtual bool has_library_changed() const override; + virtual bool library_exists() const override; Error parse_gdextension_file(const String &p_path); }; diff --git a/core/extension/gdextension_loader.h b/core/extension/gdextension_loader.h index 7d779858b7..2289550329 100644 --- a/core/extension/gdextension_loader.h +++ b/core/extension/gdextension_loader.h @@ -42,6 +42,7 @@ public: virtual void close_library() = 0; virtual bool is_library_open() const = 0; virtual bool has_library_changed() const = 0; + virtual bool library_exists() const = 0; }; #endif // GDEXTENSION_LOADER_H diff --git a/core/extension/gdextension_manager.cpp b/core/extension/gdextension_manager.cpp index 01efe0d96e..fff938858f 100644 --- a/core/extension/gdextension_manager.cpp +++ b/core/extension/gdextension_manager.cpp @@ -302,7 +302,8 @@ bool GDExtensionManager::ensure_extensions_loaded(const HashSet<String> &p_exten for (const String &loaded_extension : loaded_extensions) { if (!p_extensions.has(loaded_extension)) { // The extension may not have a .gdextension file. - if (!FileAccess::exists(loaded_extension)) { + const Ref<GDExtension> extension = GDExtensionManager::get_singleton()->get_extension(loaded_extension); + if (!extension->get_loader()->library_exists()) { extensions_removed.push_back(loaded_extension); } } |