sdl - SDL_Init 究竟做了什么?
问题描述
所以,大约一年前我开始使用 SDL,我只是认为 SDL_Init 初始化了 SDL 的子系统(如此处所写:https ://wiki.libsdl.org/SDL_Init ),我必须先调用它。但是今天,我意识到在一个相当大的项目中,我只是忘了调用它,而且我从来没有遇到过任何问题:一切正常。所以我只是想知道它做了什么,因为我显然不需要它来使用图书馆?
解决方案
SDL_Init
确实初始化了 SDL 的子系统。实际上,它只是转发到,SDL_InitSubSystem
正如您在源代码中看到的那样:
int
SDL_Init(Uint32 flags)
{
return SDL_InitSubSystem(flags);
}
现在,如果您不调用任何一个,SDL_Init
或者SDL_InitSubSystem
在使用子系统时没有遇到任何问题,那么您可能很幸运。翻看SDL源代码,你可能会发现很多函数在使用之前都会检查资源是否被初始化,如果可能的话,会进行初始化。例如,如果需要,SDL_GetTicks
调用:SDL_TicksInit
Uint32
SDL_GetTicks(void)
{
// [...]
if (!ticks_started) {
SDL_TicksInit();
}
// [...]
}
同样,如果需要,SDL_CreateWindow
调用:SDL_VideoInit
SDL_Window *
SDL_CreateWindow(const char *title, int x, int y, int w, int h, Uint32 flags)
{
// [...]
if (!_this) {
/* Initialize the video system if needed */
if (SDL_VideoInit(NULL) < 0) {
return NULL;
}
}
// [...]
}
问题是你可能有一天会因为某些东西没有被初始化而遇到一个错误,你将无法轻易找到原因。简而言之,初始化您使用的子系统。它不会花费您任何费用,并且可能会为您节省很多麻烦。
推荐阅读
- javascript - Nodemailer 不发送带有换行符的文本
- c++ - 给定具有两个输出变量的顶点着色器,如何在 Qt3D 中正确定义两个 QRenderTargets 以获得深度和颜色信息
- javascript - 是否存在仅适用于 Internet Explorer 9 而现代浏览器不支持的功能?
- pine-script - 如何在交易视图上自动绘制目标
- c++ - 验证用户条目是一个 int
- android - 如何从创建数据库的类外部调用 SQLite 数据库删除列(“db.delete”)
- ios - 我想从 SwiftUI 的列表项中删除披露图标
- android - 在燃料请求中正确设置 cookie
- php - 使用 fopen 下载文件不适用于某些文件名
- sql-server - 如何正确使用异步?