什么是 Core 核心 为什么 RetroArch 能管 200+ 模拟器
Core 是什么
Core(核心)是 libretro 兼容的模拟器动态库。RetroArch 运行时加载它来完成模拟工作。
可以把 Core 想象成一个独立的小程序——它只负责接收前端发过来的输入、输出一帧帧画面和声音、处理存档,不管任何界面、设置面板、菜单。Core 和前端之间通过 libretro API 这套固定的接口契约来交互。
┌─────────────────────────────────────┐
│ RetroArch 前端(壳) │
│ UI / 设置 / 视频渲染 / 音频输出 │
│ 输入采集 / 存档 / 在线更新 │
├─────────────────────────────────────┤
│ libretro API 接口 │
├─────────────────────────────────────┤
│ Core A │ Core B │ Core C │ ... │
│ (FC模拟)│ (PS1模拟)│ (GBA模拟)│ │
└─────────────────────────────────────┘
Core 不是模拟器,但模拟器是 Core 的前身
绝大多数 libretro Core 都是基于已有的独立模拟器改造的——开发者把独立模拟器的 GUI 和平台相关代码剥离,只留下模拟逻辑,包装成 libretro API 的形式。比如:
- mGBA → libretro mGBA(GBA 模拟器)
- Snes9x → libretro Snes9x(超任模拟器)
- PCSX2 → libretro LRPS2(PS2 模拟器)
- PPSSPP → libretro PPSSPP(PSP 模拟器)
这个过程叫"libretro 化"。完成后,原来的独立模拟器功能就变成了一个 libretro Core,可以被 RetroArch 加载运行。
一个主机为什么有多个 Core
同一台主机往往有多个 Core 可选。这不是重复造轮子——每个 Core 有不同的设计取舍:
| 取舍维度 | 举例 |
|---|---|
| 精度 vs 速度 | Snes9x 追求速度、bsnes 追求 100% 精度 |
| 传统渲染 vs Vulkan LLE | Beetle PSX HW 用硬件加速 Vulkan、Beetle PSX 用纯软件渲染 |
| 兼容性 vs 现代功能 | 某 Core 兼容更多游戏、另一 Core 支持 RetroAchievements |
| 通用 vs 优化 | 通用 Core 覆盖整个主机、专用 Core 针对某类游戏优化 |
核心选择比反复调设置更影响游戏体验。游戏玩不了时先换个 Core 试试,再谈调视频比例或着色器。
Core 的技术形态
每个 Core 是一个动态库文件:
| 平台 | 文件格式 |
|---|---|
| Windows | .dll |
| macOS | .dylib |
| Linux | .so |
| Android | .so(armeabi-v7a / arm64-v8a) |
下载 Core 就是下载一个对应平台的动态库。
Core 的元信息(需要哪些 BIOS、支持哪些功能、推荐的渲染器等)存在 Core Info Files 里——Online Updater 里的 Update Core Info Files 就是在更新这个。
为什么 Core 架构是 RetroArch 的护城河
对比"每台主机一个独立模拟器"的传统方案:
| 维度 | 独立模拟器 | RetroArch Core |
|---|---|---|
| 统一设置 | ❌ 每个模拟器单独配 | ✅ 配一次所有 Core 通用 |
| 统一界面 | ❌ 每个界面风格不同 | ✅ 同一套 Ozone/GLUI/XMB/RGUI |
| 功能一致性 | ❌ 有的有联机、有的没有 | ✅ 联机、着色器、倒带跨 Core 一致 |
| 跨平台 | ❌ 每个模拟器单独移植 | ✅ Core 一次开发到处运行 |
| 生态活力 | 取决于单个模拟器团队 | Libretro 社区集体维护 |
这就是为什么 RetroArch 能在十年内从一个小众项目变成复古游戏模拟器的事实标准。