Player icon indicating copy to clipboard operation
Player copied to clipboard

Use the libretro VFS interface in libretro builds

Open white-axe opened this issue 2 months ago • 2 comments

The libretro API provides a virtual filesystem interface that libretro cores can use to perform filesystem operations. It allows the libretro frontend to expose filesystem functionality that's not available through the native filesystem calls, such as the Storage Access Framework filesystem driver I added to the Android builds of RetroArch in libretro/RetroArch#18336.

This pull request changes the libretro builds of EasyRPG Player to request the libretro VFS interface from the libretro frontend, and then, if it's available, replace NativeFilesystem with a new LibretroFilesystem that uses the libretro VFS interface instead of the native filesystem calls.

white-axe avatar Nov 08 '25 03:11 white-axe

Great to see that RetroArch is finally getting SAF support on Android.

Also interesting to see the implementation being completely different to our SAF approach. We use wrapper classes in Java to do all the heavy lifting and you call everything via JNI and use C code.

Code looks solid. Will do some testing on Android soon.

Ghabry avatar Nov 08 '25 10:11 Ghabry

Jenkins: test this please

(ignore the lint error, is unrelated)

Ghabry avatar Nov 08 '25 14:11 Ghabry

Made now some tests and their are some behaviours in the player code that break the Android side. Will try to fix them myself as they are also affecting other components on other platforms:

  • The Player code removes the saf:// prefix for whatever reason. Just deleting that code makes it work 🤷
  • MakeDirectory must actually create them recursively. That needs documentation and a helper function
  • When inside a ZIP the save directory discovery fails (not sure why)

Besides this it appears to work inside a saf document tree. Good job.

Ghabry avatar Dec 17 '25 09:12 Ghabry