jMonkeyEngine / jMonkeyEngine/jmonkeyengine

jme3-plugins fails to load UnicodeTest

Open
#2,124 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

defect
Dominant language
Java
Stars
4.3k
Forks
1.2k
Avg merge
4d 7h
Merged PRs (30d)
14

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?

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with GltfLoader.loadFromStream(), then inspect getBytes(), readData(), and readBuffer() at the stack-trace locations. Reproduce the UnicodeTest failure with TestGltfLoading on Windows and compare it with DesktopAssetManager loading the same .bin asset. Done means the UnicodeTest glTF and its binary asset load successfully on Windows without path corruption.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
computer-graphics
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.