Skip to content

Commit

Permalink
Merge pull request godotengine#94482 from pablitar/3.x
Browse files Browse the repository at this point in the history
[3.x] Fix external images getting embedded on import
  • Loading branch information
akien-mga authored Jul 24, 2024
2 parents 2cc5ca4 + 601a9eb commit b58d16f
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 8 deletions.
25 changes: 17 additions & 8 deletions modules/gltf/gltf_document.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3106,6 +3106,7 @@ Error GLTFDocument::_parse_images(Ref<GLTFState> p_state, const String &p_base_p
Ref<Texture> texture = ResourceLoader::load(uri);
if (texture.is_valid()) {
p_state->images.push_back(texture->get_data());
p_state->external_images_paths.insert(i, uri);
continue;
} else if (mimetype == "image/png" || mimetype == "image/jpeg") {
// Fallback to loading as byte array.
Expand Down Expand Up @@ -3234,17 +3235,25 @@ Error GLTFDocument::_parse_textures(Ref<GLTFState> p_state) {
}
p_state->textures.push_back(t);

Ref<Texture> tex;

// Create and cache the texture used in the engine
Ref<ImageTexture> imgTex;
imgTex.instance();
imgTex->create_from_image(p_state->images[t->get_src_image()]);
if (p_state->external_images_paths.has(t->get_src_image())) {
tex = ResourceLoader::load(p_state->external_images_paths[t->get_src_image()]);
} else {
Ref<ImageTexture> img_tex;
img_tex.instance();
img_tex->create_from_image(p_state->images[t->get_src_image()]);

// Set texture filter and repeat based on sampler settings
const Ref<GLTFTextureSampler> sampler = _get_sampler_for_texture(p_state, i);
Texture::Flags flags = sampler->get_texture_flags();
imgTex->set_flags(flags);
// Set texture filter and repeat based on sampler settings. Only supported for embedded textures
const Ref<GLTFTextureSampler> sampler = _get_sampler_for_texture(p_state, i);
Texture::Flags flags = sampler->get_texture_flags();
img_tex->set_flags(flags);

tex = img_tex;
}

p_state->texture_cache.insert(i, imgTex);
p_state->texture_cache.insert(i, tex);
}

return OK;
Expand Down
1 change: 1 addition & 0 deletions modules/gltf/gltf_state.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ class GLTFState : public Resource {
Vector<Ref<GLTFTextureSampler>> texture_samplers;
Ref<GLTFTextureSampler> default_texture_sampler;
Vector<Ref<Image>> images;
Map<GLTFImageIndex, String> external_images_paths;
Map<GLTFTextureIndex, Ref<Texture>> texture_cache;
Vector<String> extensions_used;
Vector<String> extensions_required;
Expand Down

0 comments on commit b58d16f

Please sign in to comment.