RetroPie 为了支持各种软件包,定义了一组 API:,现在小编就来说说关于retroarch使用教程?下面内容希望能帮助到你,我们来一起看看吧!
retroarch使用教程
RetroPie 的设计RetroPie 为了支持各种软件包,定义了一组 API:
function depends_${package}()
{
...
}
function sources_${package}()
{
...
}
function build_${package}()
{
...
}
function install_${package}()
{
...
}
分别对应获取源码、编译、安装、配置 4个步骤。
每一个要接入 RetroPie 的 软件,例如游戏模拟器 RetroArch、启动器 Emulationsataion 等,都要实现这一套 API,以供 RetroPie 的核心层调用,以 RetroArch 为例:
function depends_retroarch()
{
...
}
function sources_retroarch()
{
...
}
function build_retroarch()
{
...
}
function install_retroarch()
{
...
}
这是很典型的模块化设计,每一个软件包都只需要关注在自身的编译安装流程上,不需要理会其他事情。
嵌入式物联网开发需要学的东西比较多,就业岗位也是各种各样。很多人不知道该怎么学、学什么?也不知道嵌入式开发做什么工作比较好。如果你也遇到类似问题,可以点下面链接加我V鑫(备注头条)。送你一套最新的学习路线图 100G学习资料 拉你进交流群。
嵌入式物联网单片机学习交流
RetroArch 也是相同的设计思路RetroArch 一个 C 语言编写的跨平台复古游戏模拟框架。
RetroArch 本身不进行实质的模拟功能,而是提供一套框架,所有的第三方开源模拟器都可以接入到这套框架中,从而为用户提供更多更好的功能和体验。
RetroArch 和 RetroPie 的功能需求上有一个相似之处:
RetroPie 需要管理各种游戏相关的软件;
RetroArch 也需要管理各种模拟器软件;
所以,RetroArch 也采用了和 RetroPie 类似的设计思路,定义了一组 API
RETRO_API void retro_init(void);
RETRO_API void retro_deinit(void);
RETRO_API void retro_run(void);
RETRO_API bool retro_load_game(const struct retro_game_info *game);
RETRO_API void retro_unload_game(void);
...
每一个要接入 RetroArch 的第三方模拟器,都要实现上面的 API。
以第三方模拟器 gambatte-libretro 为例,下面是 retro_run() 的实现:
void retro_run()
{
...
// 获得用户输入
input_poll_cb();
...
// 播放游戏声音
render_audio(sound_buf.i16, samples);
...
// 显示游戏画面
video_cb(video_buf, VIDEO_WIDTH, VIDEO_HEIGHT, VIDEO_PITCH * sizeof(gambatte::video_pixel_t));
...
}
当用户要求启动模拟某个游戏时, RetroArch 的核心层就会先调用相应的第三方模拟器的 retro_init() 进行初始化。
最关键的一步是会调用到 retro_run(),模拟器会在这个函数里实现最重要的游戏功能:
1、处理用户输入;
2、模拟出游戏的画面,然后调用 RetroArch 核心层里显示相关的接口将画面数据显示出来;
3、模拟出游戏的声音,然后调用 RetroArch 核心层里音频相关的接口将声音数据播放出来;
这就是 RetroArch 最核心的设计。
RetroArch 是一个跨平台的应用,代码量庞大,其内部实现有许多值得学习了解的地方,大家可以先自行学习。
总结设计软件是一件很有挑战的事情。
我们可以从流行的开源软件上,学习到真正优秀的设计。
原文链接:https://mp.weixin.qq.com/s/T4sys9NdZzHizWm4NHFnew
文章转载自:老吴嵌入式
文章来源于:跨平台的 RetroArch ,设计方式竟和 RetroPie 如出一辙!
原文链接:跨平台的 RetroArch ,设计方式竟和 RetroPie 如出一辙!
,