gltf: fix three bugs which prevented extracted textures from being refreshed.
1. Extracted texture paths in `GLTFDocument::_parse_image_save_image` at the project root started with res:/// which broke cache invalidation 2. md5 hashes were not being written to generator_parameters for new imports, which led Godot to think the file was manually created. 3. `EditorFileSystem::reimport_append` must emit the `resources_reimported` signal in order for the resource cache to be updated.
This commit is contained in:
parent
13a0d6e9b2
commit
fea4165ca8
|
@ -2436,7 +2436,13 @@ void EditorFileSystem::reimport_files(const Vector<String> &p_files) {
|
||||||
|
|
||||||
Error EditorFileSystem::reimport_append(const String &p_file, const HashMap<StringName, Variant> &p_custom_options, const String &p_custom_importer, Variant p_generator_parameters) {
|
Error EditorFileSystem::reimport_append(const String &p_file, const HashMap<StringName, Variant> &p_custom_options, const String &p_custom_importer, Variant p_generator_parameters) {
|
||||||
ERR_FAIL_COND_V_MSG(!importing, ERR_INVALID_PARAMETER, "Can only append files to import during a current reimport process.");
|
ERR_FAIL_COND_V_MSG(!importing, ERR_INVALID_PARAMETER, "Can only append files to import during a current reimport process.");
|
||||||
return _reimport_file(p_file, p_custom_options, p_custom_importer, &p_generator_parameters);
|
Error ret = _reimport_file(p_file, p_custom_options, p_custom_importer, &p_generator_parameters);
|
||||||
|
|
||||||
|
// Emit the resource_reimported signal for the single file we just reimported.
|
||||||
|
Vector<String> reloads;
|
||||||
|
reloads.append(p_file);
|
||||||
|
emit_signal(SNAME("resources_reimported"), reloads);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
Error EditorFileSystem::_resource_import(const String &p_path) {
|
Error EditorFileSystem::_resource_import(const String &p_path) {
|
||||||
|
|
|
@ -3218,7 +3218,7 @@ void GLTFDocument::_parse_image_save_image(Ref<GLTFState> p_state, const Vector<
|
||||||
bool must_import = true;
|
bool must_import = true;
|
||||||
Vector<uint8_t> img_data = p_image->get_data();
|
Vector<uint8_t> img_data = p_image->get_data();
|
||||||
Dictionary generator_parameters;
|
Dictionary generator_parameters;
|
||||||
String file_path = p_state->get_base_path() + "/" + p_state->filename.get_basename() + "_" + p_image->get_name();
|
String file_path = p_state->get_base_path().path_join(p_state->filename.get_basename() + "_" + p_image->get_name());
|
||||||
file_path += p_file_extension.is_empty() ? ".png" : p_file_extension;
|
file_path += p_file_extension.is_empty() ? ".png" : p_file_extension;
|
||||||
if (FileAccess::exists(file_path + ".import")) {
|
if (FileAccess::exists(file_path + ".import")) {
|
||||||
Ref<ConfigFile> config;
|
Ref<ConfigFile> config;
|
||||||
|
@ -3230,6 +3230,8 @@ void GLTFDocument::_parse_image_save_image(Ref<GLTFState> p_state, const Vector<
|
||||||
if (!generator_parameters.has("md5")) {
|
if (!generator_parameters.has("md5")) {
|
||||||
must_import = false; // Didn't come from a gltf document; don't overwrite.
|
must_import = false; // Didn't come from a gltf document; don't overwrite.
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (must_import) {
|
||||||
String existing_md5 = generator_parameters["md5"];
|
String existing_md5 = generator_parameters["md5"];
|
||||||
unsigned char md5_hash[16];
|
unsigned char md5_hash[16];
|
||||||
CryptoCore::md5(img_data.ptr(), img_data.size(), md5_hash);
|
CryptoCore::md5(img_data.ptr(), img_data.size(), md5_hash);
|
||||||
|
|
Loading…
Reference in New Issue