Open
Description
I noticed a defect in GltfLoader while developing the MonkeyWrench library.
The test data is UnicodeTest from Khronos's glTF sample models.
The test passed on my desktop computer running Mint Linux.
On my laptop computer running Microsoft Windows 11, it failed with the following diagnostic:
com.jme3.asset.AssetLoadException: An error occurred loading Unicode??Test/glTF/Unicode??Test.gltf
I reproduced this behavior using the TestGltfLoading app with the following modifications:
assetManager.registerLocator("..\\..\\ext\\glTF-Sample-Models\\2.0", FileLocator.class);
//...
loadModel("Unicode\u2764\u267bTest/glTF/Unicode\u2764\u267bTest.gltf", new Vector3f(0, 1, 0), 1);
I then added e.printStackTrace();
in GltfLoader.loadFromStream()
and got the following stack trace:
Caused by: com.jme3.asset.AssetNotFoundException: Unicode??Test/glTF/Unicode�?�♻Binary.bin
at com.jme3.asset.DesktopAssetManager.loadAsset(DesktopAssetManager.java:387)
at com.jme3.scene.plugins.gltf.GltfLoader.getBytes(GltfLoader.java:607)
at com.jme3.scene.plugins.gltf.GltfLoader.readData(GltfLoader.java:584)
at com.jme3.scene.plugins.gltf.GltfLoader.readBuffer(GltfLoader.java:557)
at com.jme3.scene.plugins.gltf.GltfLoader$VertexBufferPopulator.populate(GltfLoader.java:1341)
at com.jme3.scene.plugins.gltf.GltfLoader$VertexBufferPopulator.populate(GltfLoader.java:1309)
at com.jme3.scene.plugins.gltf.GltfLoader.readAccessorData(GltfLoader.java:537)
at com.jme3.scene.plugins.gltf.GltfLoader.readMeshPrimitives(GltfLoader.java:384)
at com.jme3.scene.plugins.gltf.GltfLoader.readNode(GltfLoader.java:253)
at com.jme3.scene.plugins.gltf.GltfLoader.readChild(GltfLoader.java:302)
at com.jme3.scene.plugins.gltf.GltfLoader.readScenes(GltfLoader.java:219)
at com.jme3.scene.plugins.gltf.GltfLoader.loadFromStream(GltfLoader.java:155)
The issue isn't intrinsic to jme3-core since MonkeyWrench is able to open the same .bin asset using DesktopAssetManager
on Windows 11.
I'm unsure where the root cause lies. Perhaps GltfLoader.getBytes()
is decoding a URI that wasn't properly encoded to begin with?