Merge pull request #62309 from reduz/remake-resource-thread-safety
Remake ResourceCache thread safety code and API
This commit is contained in:
commit
b192073001
15 changed files with 117 additions and 126 deletions
|
|
@ -487,7 +487,7 @@ void DependencyRemoveDialog::show(const Vector<String> &p_folders, const Vector<
|
|||
void DependencyRemoveDialog::ok_pressed() {
|
||||
for (int i = 0; i < files_to_delete.size(); ++i) {
|
||||
if (ResourceCache::has(files_to_delete[i])) {
|
||||
Resource *res = ResourceCache::get(files_to_delete[i]);
|
||||
Ref<Resource> res = ResourceCache::get_ref(files_to_delete[i]);
|
||||
res->set_path("");
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1792,9 +1792,9 @@ Error EditorFileSystem::_reimport_group(const String &p_group_file, const Vector
|
|||
|
||||
//if file is currently up, maybe the source it was loaded from changed, so import math must be updated for it
|
||||
//to reload properly
|
||||
if (ResourceCache::has(file)) {
|
||||
Resource *r = ResourceCache::get(file);
|
||||
Ref<Resource> r = ResourceCache::get_ref(file);
|
||||
|
||||
if (r.is_valid()) {
|
||||
if (!r->get_import_path().is_empty()) {
|
||||
String dst_path = ResourceFormatImporter::get_singleton()->get_internal_resource_path(file);
|
||||
r->set_import_path(dst_path);
|
||||
|
|
@ -2034,9 +2034,8 @@ void EditorFileSystem::_reimport_file(const String &p_file, const HashMap<String
|
|||
|
||||
//if file is currently up, maybe the source it was loaded from changed, so import math must be updated for it
|
||||
//to reload properly
|
||||
if (ResourceCache::has(p_file)) {
|
||||
Resource *r = ResourceCache::get(p_file);
|
||||
|
||||
Ref<Resource> r = ResourceCache::get_ref(p_file);
|
||||
if (r.is_valid()) {
|
||||
if (!r->get_import_path().is_empty()) {
|
||||
String dst_path = ResourceFormatImporter::get_singleton()->get_internal_resource_path(p_file);
|
||||
r->set_import_path(dst_path);
|
||||
|
|
|
|||
|
|
@ -193,10 +193,7 @@ void EditorFolding::load_scene_folding(Node *p_scene, const String &p_path) {
|
|||
|
||||
for (int i = 0; i < res_unfolds.size(); i += 2) {
|
||||
String path2 = res_unfolds[i];
|
||||
Ref<Resource> res;
|
||||
if (ResourceCache::has(path2)) {
|
||||
res = Ref<Resource>(ResourceCache::get(path2));
|
||||
}
|
||||
Ref<Resource> res = ResourceCache::get_ref(path2);
|
||||
if (res.is_null()) {
|
||||
continue;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -881,7 +881,7 @@ void EditorNode::_resources_changed(const Vector<String> &p_resources) {
|
|||
|
||||
int rc = p_resources.size();
|
||||
for (int i = 0; i < rc; i++) {
|
||||
Ref<Resource> res(ResourceCache::get(p_resources.get(i)));
|
||||
Ref<Resource> res = ResourceCache::get_ref(p_resources.get(i));
|
||||
if (res.is_null()) {
|
||||
continue;
|
||||
}
|
||||
|
|
@ -1011,8 +1011,8 @@ void EditorNode::_resources_reimported(const Vector<String> &p_resources) {
|
|||
continue;
|
||||
}
|
||||
// Reload normally.
|
||||
Resource *resource = ResourceCache::get(p_resources[i]);
|
||||
if (resource) {
|
||||
Ref<Resource> resource = ResourceCache::get_ref(p_resources[i]);
|
||||
if (resource.is_valid()) {
|
||||
resource->reload_from_file();
|
||||
}
|
||||
}
|
||||
|
|
@ -1725,7 +1725,7 @@ void EditorNode::_save_scene(String p_file, int idx) {
|
|||
// We must update it, but also let the previous scene state go, as
|
||||
// old version still work for referencing changes in instantiated or inherited scenes.
|
||||
|
||||
sdata = Ref<PackedScene>(Object::cast_to<PackedScene>(ResourceCache::get(p_file)));
|
||||
sdata = ResourceCache::get_ref(p_file);
|
||||
if (sdata.is_valid()) {
|
||||
sdata->recreate_state();
|
||||
} else {
|
||||
|
|
@ -3717,7 +3717,7 @@ Error EditorNode::load_scene(const String &p_scene, bool p_ignore_broken_deps, b
|
|||
|
||||
if (ResourceCache::has(lpath)) {
|
||||
// Used from somewhere else? No problem! Update state and replace sdata.
|
||||
Ref<PackedScene> ps = Ref<PackedScene>(Object::cast_to<PackedScene>(ResourceCache::get(lpath)));
|
||||
Ref<PackedScene> ps = ResourceCache::get_ref(lpath);
|
||||
if (ps.is_valid()) {
|
||||
ps->replace_state(sdata->get_state());
|
||||
ps->set_last_modified_time(sdata->get_last_modified_time());
|
||||
|
|
|
|||
|
|
@ -1115,7 +1115,7 @@ Ref<Animation> ResourceImporterScene::_save_animation_to_file(Ref<Animation> ani
|
|||
}
|
||||
|
||||
if (ResourceCache::has(p_save_to_path)) {
|
||||
Ref<Animation> old_anim = Ref<Resource>(ResourceCache::get(p_save_to_path));
|
||||
Ref<Animation> old_anim = ResourceCache::get_ref(p_save_to_path);
|
||||
if (old_anim.is_valid()) {
|
||||
old_anim->copy_from(anim);
|
||||
anim = old_anim;
|
||||
|
|
@ -1711,7 +1711,7 @@ void ResourceImporterScene::_generate_meshes(Node *p_node, const Dictionary &p_m
|
|||
}
|
||||
|
||||
if (!save_to_file.is_empty()) {
|
||||
Ref<Mesh> existing = Ref<Resource>(ResourceCache::get(save_to_file));
|
||||
Ref<Mesh> existing = ResourceCache::get_ref(save_to_file);
|
||||
if (existing.is_valid()) {
|
||||
//if somehow an existing one is useful, create
|
||||
existing->reset_state();
|
||||
|
|
|
|||
|
|
@ -306,10 +306,8 @@ Error ResourceImporterTextureAtlas::import_group_file(const String &p_group_file
|
|||
|
||||
//update cache if existing, else create
|
||||
Ref<Texture2D> cache;
|
||||
if (ResourceCache::has(p_group_file)) {
|
||||
Resource *resptr = ResourceCache::get(p_group_file);
|
||||
cache.reference_ptr(resptr);
|
||||
} else {
|
||||
cache = ResourceCache::get_ref(p_group_file);
|
||||
if (!cache.is_valid()) {
|
||||
Ref<ImageTexture> res_cache;
|
||||
res_cache.instantiate();
|
||||
res_cache->create_from_image(new_atlas);
|
||||
|
|
|
|||
|
|
@ -5455,7 +5455,7 @@ void CanvasItemEditorViewport::_create_nodes(Node *parent, Node *child, String &
|
|||
}
|
||||
child->set_name(name);
|
||||
|
||||
Ref<Texture2D> texture = Ref<Texture2D>(Object::cast_to<Texture2D>(ResourceCache::get(path)));
|
||||
Ref<Texture2D> texture = ResourceCache::get_ref(path);
|
||||
|
||||
if (parent) {
|
||||
editor_data->get_undo_redo().add_do_method(parent, "add_child", child, true);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue