Skip to content

Handling of duplicate URIs #115

Open
@javagl

Description

@javagl

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

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions