#libretro #emulation #abstraction #api #high-level #path #run

libretro-rs

libretro API 的高层抽象

4 个版本

0.1.3 2021 年 10 月 5 日
0.1.2 2021 年 10 月 4 日
0.1.1 2021 年 10 月 4 日
0.1.0 2021 年 10 月 3 日

#3#libretro

MIT/Apache

170KB
5K SLoC

libretro-rs

设计理念

本软件包的设计理念可以概括为希望暴露所有功能,即使这些功能不是惯用的。libretro 有很多功能,一开始就实现所有这些功能只会导致延迟。相反,所有 API 都对您开放。如果您遇到不支持的功能,您始终可以使用原始 API。

另一个设计注意点是尝试包含 C 实现可能需要的数据。例如,不能期望没有参数(例如 Default)就能构造出模拟器。因此,RetroCore::init 函数传递了 RetroEnvironment,以便可以查询和使用资产路径来构建模拟器。考虑到这一点,将注意隐藏不允许的 API 功能。

在满足上述要求之后,最后一个目标是使绑定逻辑和直观。如果您在 API 中任何地方感到不适,请一定告诉我们!

入门

example 文件夹中提供了一个参考实现,应该足以让您入门。从高层次来看,您需要修改您的 Cargo.toml

[dependencies]
libretro-rs = "0.1"

[lib]
crate-type = ["cdylib"]

然后实现一个特质并调用宏

use libretro_rs::*;

struct Emulator {
  // ...
}

impl RetroCore for Emulator {
  // ...
}

libretro_core!(Emulator);

就这样!运行 cargo build 将生成一个共享库(.so.dll 等),您可以使用 libretro 前端使用它

$ retroarch --verbose -L libemulator.so /path/to/game.rom

依赖项