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;
}
}
// [...]
}
Проблема в том, что вы можете когда-нибудьвозникнет ошибка из-за того, что что-то не инициализировано, и вы не сможете легко найти причину.Вкратце, инициализируйте подсистемы, которые вы используете.Это ничего не стоит и потенциально может спасти вас от многих неприятностей.