初始化与退出(CategoryInit)
所有 SDL 程序在开始使用该库之前都需要先初始化它。
几乎所有程序都可以在启动时简单调用 SDL_Init() 函数,
并通过少量标志位指定要启用的子系统。这些标志位的作用是确保 SDL 不会尝试去访问
你并不打算使用的操作系统底层组件。例如,你可能使用 SDL 处理视频和输入,
但选择第三方库处理音频,这种情况下只需省略
SDL_INIT_AUDIO 标志位,就能确保第三方音频库获得完全的控制权。
大多数应用程序在终止时应调用 SDL_Quit()。该函数会清理(几乎)所有 SDL 分配的资源,
尤为重要的是,如果你此前为游戏修改了显示器分辨率,它会确保分辨率恢复到用户预期的状态。
强烈建议 SDL3 应用程序在启动时调用
SDL_SetAppMetadata() 来填充程序的相关信息。
这一步完全可选,但能带来一些细节上的优化(比如可为 macOS 菜单提供「关于」对话框、
在系统音频混音器中显示应用名称等)。如果想要提供大量应用信息,
可使用更详细的 SDL_SetAppMetadataProperty() 函数。
函数
- SDL_GetAppMetadataProperty - 获取应用程序指定的元数据属性值
- SDL_Init - 初始化 SDL 库,可指定要启用的子系统
- SDL_InitSubSystem - 初始化指定的 SDL 子系统(在主初始化后补充启用)
- SDL_IsMainThread - 检查当前线程是否为 SDL 主线程
- SDL_Quit - 退出 SDL 并清理所有已初始化的子系统资源
- SDL_QuitSubSystem - 退出指定的 SDL 子系统并释放其资源
- SDL_RunOnMainThread - 将指定回调函数放到 SDL 主线程中执行
- SDL_SetAppMetadata - 设置应用程序的基础元数据(名称、版本、作者等)
- SDL_SetAppMetadataProperty - 设置应用程序的自定义元数据属性
- SDL_WasInit - 查询指定的 SDL 子系统是否已初始化
数据类型
- SDL_AppEvent_func - 应用程序事件回调函数的类型定义
- SDL_AppInit_func - 应用程序初始化回调函数的类型定义
- SDL_AppIterate_func - 应用程序主循环迭代回调函数的类型定义
- SDL_AppQuit_func - 应用程序退出回调函数的类型定义
- SDL_InitFlags - SDL 初始化标志位的数值类型,用于指定要启用的子系统
- SDL_MainThreadCallback - 主线程回调函数的函数指针类型
结构体
- (无)
枚举
- SDL_AppResult - 定义应用程序回调函数的返回结果类型
宏
- (无)
补充:SDL 初始化的 FreeBASIC 示例代码
#include "SDL3/SDL.bi"
#include "SDL3/SDL_main.bi"
Function SDL_main (argc As Integer, argv As ZString Ptr) As Integer
' 初始化 SDL 视频和输入子系统
Dim As Integer initResult = SDL_Init(SDL_INIT_VIDEO Or SDL_INIT_INPUT)
If initResult < 0 Then
Print "SDL 初始化失败: " & *SDL_GetError()
Return 1
End If
' 设置应用元数据
SDL_SetAppMetadata("我的SDL应用", "1.0.0", "我的公司")
' 检查视频子系统是否初始化成功
Dim As Uint32 wasInit = SDL_WasInit(SDL_INIT_VIDEO)
If wasInit = SDL_INIT_VIDEO Then
Print "视频子系统已初始化"
End If
' 应用程序核心逻辑写在这里
' 退出 SDL,清理资源
SDL_Quit()
Return 0
End Function
评论一下?