Back to Provenance

3080

.changelog/3080.md

3.3.11.8 KB
Original Source

Added

  • Thin libretro frontend (PVThinLibretroFrontend) — RetroArch-free libretro frontend in PVCoreBridgeRetro using only libretro.h. Loads cores via dlopen/dlsym, handles the full libretro environment callback API (including GLES3 hw-render via IOSurface-backed FBO), and provides all 5 core callbacks without any RetroArch internal headers. Foundation for running libretro buildbot dylibs without the full RetroArch binary.
  • Dynamic libretro core scanner (PVDynamicLibretroCoreScanner)PVCoreLoader class that scans Frameworks/ at runtime for *.libretro.framework and bare .dylib cores not already registered via static plists. Discovered cores are synthesised as EmulatorCoreInfoPlist sub-cores of a PVThinLibretro virtual parent. Includes CoreLoader.mergeDiscoveredLibretroCores(into:) integration point. Guarded by the dynamicLibretroScanner feature flag (off by default).
  • dynamicLibretroScanner feature flag — Added PVFeature.dynamicLibretroScanner to PVFeatureFlags (all build types, disabled by default; enable via the PVFeatureFlags debug-override UI or UserDefaults.standard.set(true, forKey: "dynamicLibretroScanner")).
  • Missing libretro env callbacks — Added RETRO_ENVIRONMENT_GET_VFS_INTERFACE, RETRO_ENVIRONMENT_GET_LED_INTERFACE, RETRO_ENVIRONMENT_GET_CURRENT_SOFTWARE_FRAMEBUFFER, and RETRO_ENVIRONMENT_GET_MIDI_INTERFACE to PVLibRetroCore.m; all return false with descriptive log messages so cores fall back gracefully.

Changed

  • Shared LibretroSystemInfo layout structLibretroSystemInfo (previously private in LibretroMetadataReader.swift) is now internal with default field values, so PVDynamicLibretroCoreScanner reuses it instead of maintaining a duplicate RawLibretroSystemInfo. Eliminates layout drift risk between the two readers.