Open
Description
Right now, it is not clear how duplicate URIs should be handled.
For example:
- one can create two
ImageModel
objects (and add them to a model/builder) - both can have the URI
image.png
- when writing this model, the result depends on the type of the asset:
- for embedded and binary assets, the result will be fine
- for 'default' assets, one image will be overwritten by the other one, due to the equal URI...
The latter is happening silently and certainly not desired.
Simply appending some _0
suffix to the file name might be a reasonable solution. But different mechanisms could be considered...
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import de.javagl.jgltf.model.ImageModel;
import de.javagl.jgltf.model.creation.GltfModelBuilder;
import de.javagl.jgltf.model.creation.ImageModels;
import de.javagl.jgltf.model.impl.DefaultGltfModel;
import de.javagl.jgltf.model.impl.DefaultSceneModel;
import de.javagl.jgltf.model.io.GltfModelWriter;
public class GltfModelBuilderImageUriDeduplicationTest
{
public static void main(String[] args) throws IOException
{
BufferedImage bufferedImage =
new BufferedImage(8, 8, BufferedImage.TYPE_INT_ARGB);
ImageModel imageModel0 = ImageModels.createFromBufferedImage(
"image.png", "image/png", bufferedImage);
ImageModel imageModel1 = ImageModels.createFromBufferedImage(
"image.png", "image/png", bufferedImage);
GltfModelBuilder gltfModelBuilder = GltfModelBuilder.create();
gltfModelBuilder.addSceneModel(new DefaultSceneModel());
gltfModelBuilder.addImageModel(imageModel0);
gltfModelBuilder.addImageModel(imageModel1);
DefaultGltfModel gltfModel = gltfModelBuilder.build();
GltfModelWriter w = new GltfModelWriter();
w.write(gltfModel, new File("./data/temp.gltf"));
}
}
(Note: The same might apply to buffers - to be verified - but for images, it is much more apparent)
Metadata
Metadata
Assignees
Labels
No labels