Большинство игровых движков не требуют асинхронного рендеринга, обычно у вас есть цикл, в котором вы обновляете, а затем рендеринг (на практике у вас есть фиксированное количество обновлений и динамическое количество рендеров). SDL_WaitEvent блокируется и, вероятно, не то, что вы хотите. Вы, вероятно, хотите SDL_PollEvent , который не является блокирующим. Обычно вы продолжаете опрашивать события до тех пор, пока больше не будет событий.
Общий цикл выглядит примерно так:
void gameLoop()
{
while(true)
{
update();
render();
}
}
и ваша функция обновления будет выглядеть как
void update()
{
SDL_Event event;
while(SDL_PollEvent(&event))
{
// Handle Event
}
// Other Update Logic
}
Это будет вызывать события опроса до тех пор, пока в очереди больше не будет, и в этот момент SDL_PollEvent вернет 0, завершив тем самым цикл обработки событий. Оттуда вы можете продолжить выполнять другую логику обновления, которая не зависит от системных событий.