Use the libretro VFS interface in libretro builds

This commit is contained in:
刘皓
2026-01-01 00:24:01 -05:00
parent a018cfc017
commit 5716cbd41d
30 changed files with 624 additions and 252 deletions
+13
View File
@@ -12,6 +12,19 @@ if(WIN32)
LibretroD3D11Context.cpp)
endif()
set(LIBRETRO_SRCS ${LIBRETRO_SRCS}
libretro-common/compat/compat_posix_string.c
libretro-common/compat/fopen_utf8.c
libretro-common/compat/compat_strl.c
libretro-common/encodings/encoding_utf.c
libretro-common/file/file_path.c
libretro-common/file/file_path_io.c
libretro-common/streams/file_stream.c
libretro-common/streams/file_stream_transforms.c
libretro-common/string/stdstring.c
libretro-common/time/rtime.c
libretro-common/vfs/vfs_implementation.c)
include_directories(libretro)
add_library(ppsspp_libretro SHARED ${LIBRETRO_SRCS})
+6
View File
@@ -0,0 +1,6 @@
#pragma once
#include <streams/file_stream_transforms.h>
#undef fopen
#undef fseek
#undef ftell
+2
View File
@@ -13,6 +13,8 @@
#include <libretro_vulkan.h>
#include <GPU/Vulkan/VulkanRenderManager.h>
#undef fflush
static VulkanContext *vk;
void vk_libretro_init(VkInstance instance, VkPhysicalDevice gpu, VkSurfaceKHR surface, PFN_vkGetInstanceProcAddr get_instance_proc_addr, const char **required_device_extensions, unsigned num_required_device_extensions, const char **required_device_layers, unsigned num_required_device_layers, const VkPhysicalDeviceFeatures *required_features);
+6 -5
View File
@@ -6,6 +6,7 @@
#include <vector>
#include <cstdlib>
#include <mutex>
#include <fstream>
#include "Common/CPUDetect.h"
#include "Common/Log.h"
@@ -401,11 +402,11 @@ void retro_set_environment(retro_environment_t cb)
update_display_cb.callback = set_variable_visibility;
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_UPDATE_DISPLAY_CALLBACK, &update_display_cb);
#ifdef HAVE_LIBRETRO_VFS
struct retro_vfs_interface_info vfs_iface_info { 1, nullptr };
if (cb(RETRO_ENVIRONMENT_GET_VFS_INTERFACE, &vfs_iface_info))
filestream_vfs_init(&vfs_iface_info);
#endif
#ifdef HAVE_LIBRETRO_VFS
struct retro_vfs_interface_info vfs_iface_info { 2, nullptr };
if (cb(RETRO_ENVIRONMENT_GET_VFS_INTERFACE, &vfs_iface_info))
File::InitLibretroVFS(&vfs_iface_info);
#endif
}
static int get_language_auto(void)