SDL_Init 的作用
很多情况下不调用SDL_Init也没出问题,那么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;
}
}
// [...]
}
问题是,有一天你可能会因为某些东西没有被初始化而遇到一个错误,你将无法轻松找到原因.简而言之,初始化您使用的子系统.它不会花费您任何费用,而且可能会为您省去很多麻烦.