A
Air官方
SDL(Simple DirectMedia Layer)是游戏与多媒体领域的老牌跨平台库,管窗口、管输入、管音频、管游戏手柄,很多模拟器与游戏引擎的地基。SDL 路线在鸿蒙移植版图里占一个专门格子,适合轻界面、重画面的应用。
▍原理
SDL 的抽象面比 GTK、Qt 窄得多:它不做控件、不做布局,只给你一块可以随意画的窗口表面和一套原始输入事件。上鸿蒙就是把 SDL 的视频子系统接到 OHOS 原生窗口与 EGL,输入子系统接触摸与手柄事件,音频子系统接系统音频输出。因为面窄,SDL 的平台后端实现量是各路线里最小的之一。
▍适用场景
模拟器前端、游戏、乐器与合成器界面、示波器类全屏仪表应用——凡是自绘一切、不需要菜单按钮树的应用都合适。Air 工作区设有 sdl 框架分类,音频相关工程对 SDL 音频输出有实际使用。
▍要注意的事
一是窗口模型:SDL 假定全屏或简单窗口,鸿蒙的自由窗口、分屏、悬停态变化要自己监听并适配,否则窗口尺寸变化时画面拉伸或黑边。二是输入:SDL 的事件循环与触摸事件的投递线程要理顺,输入回调里绝不能做文件 IO(这是 Air 系列总结的铁律,输入热路径零 IO,否则整个事件通道假死)。三是音频:SDL 的回调式音频模型与系统音频会话的生命周期要对齐,退后台时暂停喂流,否则要么破音要么被系统掐掉会话。
▍优缺点
优点:后端工作量小;应用层几乎零改动;性能路径直接。缺点:界面全靠自绘,菜单、对话框、文本输入都要手搓或引入额外 GUI 库;对复杂桌面软件不友好。
▍与其他路线的组合
SDL 常与 gl4es 翻译层组合服务老 OpenGL 游戏,也与引擎直连路线衔接。选型时先看应用是不是画布型或全屏型,是的话 SDL 是轻量首选。
有疑问欢迎在本板块直接发帖,我们会逐条回复。
▍原理
SDL 的抽象面比 GTK、Qt 窄得多:它不做控件、不做布局,只给你一块可以随意画的窗口表面和一套原始输入事件。上鸿蒙就是把 SDL 的视频子系统接到 OHOS 原生窗口与 EGL,输入子系统接触摸与手柄事件,音频子系统接系统音频输出。因为面窄,SDL 的平台后端实现量是各路线里最小的之一。
▍适用场景
模拟器前端、游戏、乐器与合成器界面、示波器类全屏仪表应用——凡是自绘一切、不需要菜单按钮树的应用都合适。Air 工作区设有 sdl 框架分类,音频相关工程对 SDL 音频输出有实际使用。
▍要注意的事
一是窗口模型:SDL 假定全屏或简单窗口,鸿蒙的自由窗口、分屏、悬停态变化要自己监听并适配,否则窗口尺寸变化时画面拉伸或黑边。二是输入:SDL 的事件循环与触摸事件的投递线程要理顺,输入回调里绝不能做文件 IO(这是 Air 系列总结的铁律,输入热路径零 IO,否则整个事件通道假死)。三是音频:SDL 的回调式音频模型与系统音频会话的生命周期要对齐,退后台时暂停喂流,否则要么破音要么被系统掐掉会话。
▍优缺点
优点:后端工作量小;应用层几乎零改动;性能路径直接。缺点:界面全靠自绘,菜单、对话框、文本输入都要手搓或引入额外 GUI 库;对复杂桌面软件不友好。
▍与其他路线的组合
SDL 常与 gl4es 翻译层组合服务老 OpenGL 游戏,也与引擎直连路线衔接。选型时先看应用是不是画布型或全屏型,是的话 SDL 是轻量首选。
有疑问欢迎在本板块直接发帖,我们会逐条回复。
楼主
7 天前