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
и все остальное вызвано.