Skip to content

Commit fe34c45

Browse files
reduzakien-mga
authored andcommitted
Allow passing UID to importer
This helps, for importers spitting out new resources to the res:// filesystem to actually hash them to generate deterministic UIDs. This PR also fixes the determinism for translations.
1 parent 0f5f3bc commit fe34c45

38 files changed

+54
-41
lines changed

core/io/resource_importer.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ class ResourceImporter : public RefCounted {
147147
virtual void handle_compatibility_options(HashMap<StringName, Variant> &p_import_params) const {}
148148
virtual String get_option_group_file() const { return String(); }
149149

150-
virtual Error import(const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) = 0;
150+
virtual Error import(ResourceUID::ID p_source_id, const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) = 0;
151151
virtual bool can_import_threaded() const { return false; }
152152
virtual void import_threaded_begin() {}
153153
virtual void import_threaded_end() {}

core/templates/hashfuncs.h

+10
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,16 @@ static _FORCE_INLINE_ uint32_t hash_one_uint64(const uint64_t p_int) {
110110
return uint32_t(v);
111111
}
112112

113+
static _FORCE_INLINE_ uint64_t hash64_murmur3_64(uint64_t key, uint64_t seed) {
114+
key ^= seed;
115+
key ^= key >> 33;
116+
key *= 0xff51afd7ed558ccd;
117+
key ^= key >> 33;
118+
key *= 0xc4ceb9fe1a85ec53;
119+
key ^= key >> 33;
120+
return key;
121+
}
122+
113123
#define HASH_MURMUR3_SEED 0x7F07C65
114124
// Murmurhash3 32-bit version.
115125
// All MurmurHash versions are public domain software, and the author disclaims all copyright to their code.

editor/editor_file_system.cpp

+5-5
Original file line numberDiff line numberDiff line change
@@ -2740,13 +2740,17 @@ Error EditorFileSystem::_reimport_file(const String &p_file, const HashMap<Strin
27402740
}
27412741
}
27422742

2743+
if (uid == ResourceUID::INVALID_ID) {
2744+
uid = ResourceUID::get_singleton()->create_id();
2745+
}
2746+
27432747
//finally, perform import!!
27442748
String base_path = ResourceFormatImporter::get_singleton()->get_import_base_path(p_file);
27452749

27462750
List<String> import_variants;
27472751
List<String> gen_files;
27482752
Variant meta;
2749-
Error err = importer->import(p_file, base_path, params, &import_variants, &gen_files, &meta);
2753+
Error err = importer->import(uid, p_file, base_path, params, &import_variants, &gen_files, &meta);
27502754

27512755
// As import is complete, save the .import file.
27522756

@@ -2767,10 +2771,6 @@ Error EditorFileSystem::_reimport_file(const String &p_file, const HashMap<Strin
27672771
f->store_line("type=\"" + importer->get_resource_type() + "\"");
27682772
}
27692773

2770-
if (uid == ResourceUID::INVALID_ID) {
2771-
uid = ResourceUID::get_singleton()->create_id();
2772-
}
2773-
27742774
f->store_line("uid=\"" + ResourceUID::get_singleton()->id_to_text(uid) + "\""); // Store in readable format.
27752775

27762776
if (err == OK) {

editor/import/3d/resource_importer_obj.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -646,7 +646,7 @@ bool ResourceImporterOBJ::get_option_visibility(const String &p_path, const Stri
646646
return true;
647647
}
648648

649-
Error ResourceImporterOBJ::import(const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata) {
649+
Error ResourceImporterOBJ::import(ResourceUID::ID p_source_id, const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata) {
650650
List<Ref<ImporterMesh>> meshes;
651651

652652
Vector<uint8_t> src_lightmap_cache;

editor/import/3d/resource_importer_obj.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ class ResourceImporterOBJ : public ResourceImporter {
6161
virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
6262
virtual bool get_option_visibility(const String &p_path, const String &p_option, const HashMap<StringName, Variant> &p_options) const override;
6363

64-
virtual Error import(const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
64+
virtual Error import(ResourceUID::ID p_source_id, const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
6565

6666
ResourceImporterOBJ();
6767
};

editor/import/3d/resource_importer_scene.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -2872,7 +2872,7 @@ Error ResourceImporterScene::_check_resource_save_paths(const Dictionary &p_data
28722872
return OK;
28732873
}
28742874

2875-
Error ResourceImporterScene::import(const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata) {
2875+
Error ResourceImporterScene::import(ResourceUID::ID p_source_id, const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata) {
28762876
const String &src_path = p_source_file;
28772877

28782878
Ref<EditorSceneFormatImporter> importer;

editor/import/3d/resource_importer_scene.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ class ResourceImporterScene : public ResourceImporter {
299299
void _compress_animations(AnimationPlayer *anim, int p_page_size_kb);
300300

301301
Node *pre_import(const String &p_source_file, const HashMap<StringName, Variant> &p_options);
302-
virtual Error import(const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
302+
virtual Error import(ResourceUID::ID p_source_id, const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
303303

304304
virtual bool has_advanced_options() const override;
305305
virtual void show_advanced_options(const String &p_path) override;

editor/import/editor_import_plugin.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ bool EditorImportPlugin::get_option_visibility(const String &p_path, const Strin
163163
ERR_FAIL_V_MSG(false, "Unimplemented _get_option_visibility in add-on.");
164164
}
165165

166-
Error EditorImportPlugin::import(const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata) {
166+
Error EditorImportPlugin::import(ResourceUID::ID p_source_id, const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata) {
167167
Dictionary options;
168168
TypedArray<String> platform_variants, gen_files;
169169

editor/import/editor_import_plugin.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ class EditorImportPlugin : public ResourceImporter {
6969
virtual int get_import_order() const override;
7070
virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const override;
7171
virtual bool get_option_visibility(const String &p_path, const String &p_option, const HashMap<StringName, Variant> &p_options) const override;
72-
virtual Error import(const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata = nullptr) override;
72+
virtual Error import(ResourceUID::ID p_source_id, const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata = nullptr) override;
7373
virtual bool can_import_threaded() const override;
7474
Error append_import_external_resource(const String &p_file, const HashMap<StringName, Variant> &p_custom_options = HashMap<StringName, Variant>(), const String &p_custom_importer = String(), Variant p_generator_parameters = Variant());
7575
};

editor/import/resource_importer_bitmask.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ void ResourceImporterBitMap::get_import_options(const String &p_path, List<Impor
7272
r_options->push_back(ImportOption(PropertyInfo(Variant::FLOAT, "threshold", PROPERTY_HINT_RANGE, "0,1,0.01"), 0.5));
7373
}
7474

75-
Error ResourceImporterBitMap::import(const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata) {
75+
Error ResourceImporterBitMap::import(ResourceUID::ID p_source_id, const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata) {
7676
int create_from = p_options["create_from"];
7777
float threshold = p_options["threshold"];
7878
Ref<Image> image;

editor/import/resource_importer_bitmask.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class ResourceImporterBitMap : public ResourceImporter {
4848

4949
virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
5050
virtual bool get_option_visibility(const String &p_path, const String &p_option, const HashMap<StringName, Variant> &p_options) const override;
51-
virtual Error import(const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
51+
virtual Error import(ResourceUID::ID p_source_id, const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
5252

5353
virtual bool can_import_threaded() const override { return true; }
5454

editor/import/resource_importer_bmfont.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ void ResourceImporterBMFont::get_import_options(const String &p_path, List<Impor
6767
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "scaling_mode", PROPERTY_HINT_ENUM, "Disabled,Enabled (Integer),Enabled (Fractional)"), TextServer::FIXED_SIZE_SCALE_ENABLED));
6868
}
6969

70-
Error ResourceImporterBMFont::import(const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata) {
70+
Error ResourceImporterBMFont::import(ResourceUID::ID p_source_id, const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata) {
7171
print_verbose("Importing BMFont font from: " + p_source_file);
7272

7373
Array fallbacks = p_options["fallbacks"];

editor/import/resource_importer_bmfont.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class ResourceImporterBMFont : public ResourceImporter {
4848
virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
4949
virtual bool get_option_visibility(const String &p_path, const String &p_option, const HashMap<StringName, Variant> &p_options) const override;
5050

51-
virtual Error import(const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
51+
virtual Error import(ResourceUID::ID p_source_id, const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
5252

5353
virtual bool can_import_threaded() const override { return true; }
5454

editor/import/resource_importer_csv_translation.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ void ResourceImporterCSVTranslation::get_import_options(const String &p_path, Li
7272
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "delimiter", PROPERTY_HINT_ENUM, "Comma,Semicolon,Tab"), 0));
7373
}
7474

75-
Error ResourceImporterCSVTranslation::import(const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata) {
75+
Error ResourceImporterCSVTranslation::import(ResourceUID::ID p_source_id, const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata) {
7676
bool compress = p_options["compress"];
7777

7878
String delimiter;
@@ -147,6 +147,9 @@ Error ResourceImporterCSVTranslation::import(const String &p_source_file, const
147147
if (r_gen_files) {
148148
r_gen_files->push_back(save_path);
149149
}
150+
151+
ResourceUID::ID save_id = hash64_murmur3_64(translations[i]->get_locale().hash64(), p_source_id);
152+
ResourceSaver::set_uid(save_path, save_id);
150153
}
151154

152155
return OK;

editor/import/resource_importer_csv_translation.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class ResourceImporterCSVTranslation : public ResourceImporter {
4949
virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
5050
virtual bool get_option_visibility(const String &p_path, const String &p_option, const HashMap<StringName, Variant> &p_options) const override;
5151

52-
virtual Error import(const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
52+
virtual Error import(ResourceUID::ID p_source_id, const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
5353

5454
virtual bool can_import_threaded() const override { return true; }
5555

editor/import/resource_importer_dynamic_font.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ void ResourceImporterDynamicFont::show_advanced_options(const String &p_path) {
141141
DynamicFontImportSettingsDialog::get_singleton()->open_settings(p_path);
142142
}
143143

144-
Error ResourceImporterDynamicFont::import(const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata) {
144+
Error ResourceImporterDynamicFont::import(ResourceUID::ID p_source_id, const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata) {
145145
print_verbose("Importing dynamic font from: " + p_source_file);
146146

147147
int antialiasing = p_options["antialiasing"];

editor/import/resource_importer_dynamic_font.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class ResourceImporterDynamicFont : public ResourceImporter {
5858
bool has_advanced_options() const override;
5959
void show_advanced_options(const String &p_path) override;
6060

61-
virtual Error import(const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
61+
virtual Error import(ResourceUID::ID p_source_id, const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
6262

6363
virtual bool can_import_threaded() const override { return true; }
6464

editor/import/resource_importer_image.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ String ResourceImporterImage::get_preset_name(int p_idx) const {
7070
void ResourceImporterImage::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const {
7171
}
7272

73-
Error ResourceImporterImage::import(const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata) {
73+
Error ResourceImporterImage::import(ResourceUID::ID p_source_id, const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata) {
7474
Ref<FileAccess> f = FileAccess::open(p_source_file, FileAccess::READ);
7575

7676
ERR_FAIL_COND_V_MSG(f.is_null(), ERR_CANT_OPEN, "Cannot open file from path '" + p_source_file + "'.");

editor/import/resource_importer_image.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class ResourceImporterImage : public ResourceImporter {
5050
virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
5151
virtual bool get_option_visibility(const String &p_path, const String &p_option, const HashMap<StringName, Variant> &p_options) const override;
5252

53-
virtual Error import(const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
53+
virtual Error import(ResourceUID::ID p_source_id, const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
5454

5555
virtual bool can_import_threaded() const override { return true; }
5656

editor/import/resource_importer_imagefont.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ void ResourceImporterImageFont::get_import_options(const String &p_path, List<Im
7575
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "scaling_mode", PROPERTY_HINT_ENUM, "Disabled,Enabled (Integer),Enabled (Fractional)"), TextServer::FIXED_SIZE_SCALE_ENABLED));
7676
}
7777

78-
Error ResourceImporterImageFont::import(const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata) {
78+
Error ResourceImporterImageFont::import(ResourceUID::ID p_source_id, const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata) {
7979
print_verbose("Importing image font from: " + p_source_file);
8080

8181
int columns = p_options["columns"];

editor/import/resource_importer_imagefont.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class ResourceImporterImageFont : public ResourceImporter {
4848
virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
4949
virtual bool get_option_visibility(const String &p_path, const String &p_option, const HashMap<StringName, Variant> &p_options) const override;
5050

51-
virtual Error import(const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
51+
virtual Error import(ResourceUID::ID p_source_id, const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
5252

5353
virtual bool can_import_threaded() const override { return true; }
5454

editor/import/resource_importer_layered_texture.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ void ResourceImporterLayeredTexture::_save_tex(Vector<Ref<Image>> p_images, cons
289289
}
290290
}
291291

292-
Error ResourceImporterLayeredTexture::import(const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata) {
292+
Error ResourceImporterLayeredTexture::import(ResourceUID::ID p_source_id, const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata) {
293293
int compress_mode = p_options["compress/mode"];
294294
float lossy = p_options["compress/lossy_quality"];
295295
bool high_quality = p_options["compress/high_quality"];

editor/import/resource_importer_layered_texture.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ class ResourceImporterLayeredTexture : public ResourceImporter {
112112

113113
void _save_tex(Vector<Ref<Image>> p_images, const String &p_to_path, int p_compress_mode, float p_lossy, Image::CompressMode p_vram_compression, Image::CompressSource p_csource, Image::UsedChannels used_channels, bool p_mipmaps, bool p_force_po2);
114114

115-
virtual Error import(const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
115+
virtual Error import(ResourceUID::ID p_source_id, const String &p_source_file, const String &p_save_path, const HashMap<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
116116

117117
virtual bool are_import_settings_valid(const String &p_path, const Dictionary &p_meta) const override;
118118
virtual String get_import_settings_string() const override;

0 commit comments

Comments
 (0)