C++ SDL2 Как инициализировать SDL в отдельном от основного потоке?

У меня возникла такая проблема: SDL2 отказывается работать вообще при вызове функций в другом потоке(не основном). Я делаю следующее:

void ThreadLoop()
{
    SDL_Window* win;
    SDL_Renderer* ren;
    std::cout<<"Step1"<<std::endl;
    SDL_Init(SDL_INIT_EVENTS|SDL_INIT_VIDEO|SDL_INIT_TIMER);
    std::cout<<"Step2"<<SDL_GetError()<<std::endl;
    SDL_CreateWindowAndRenderer(...some settings...);
    
    while(true)
    {
    ...Check events in poll, SDL_RenderPresent and etc...
    }
    SDL_DestroyRenderer(ren);
    SDL_DestroyWindow(win);
    SDL_Quit();
}

int main(int argc, char* arv[])
{
std::thread loop(&ThreadLoop);
sleep(100);
std::cout<<"Main ended!"<<std::endl;
return 0;
}

И когда доходит до вызова SDL_Init() не происходит ничего, т.е. ни сама SDL_Init ошибки не дает, ни выполнение дальше не идет(не выводится Step2). Но после вывода Step1 выводится Main ended! Насколько я знаю, SDL не дружит с вызовом рендеринга окон из потока, не создавшего их, но тут все идет в потоке,в котором и SDL_Init и все остальное вызвано.


Ответы (0 шт):