SDL_AddTimer SDL_GL_MakeCurrent не работает в Windows

#c #windows #opengl #sdl #sdl-2

#c #Windows #opengl #sdl #sdl-2

Вопрос:

Я возился с C , OpenGL и SDL, создавая игру, которая должна быть способна запускаться в Windows и Mac OS X. У меня проблема, которая возникает только в Windows.

Позвольте мне описать сценарий.

Сначала я создаю средство визуализации OpenGL и получаю текущий контекст:

 this->renderer = SDL_CreateRenderer(this->window, rendererIndex, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
this->context = SDL_GL_GetCurrentContext();
  

Полный код здесь

В моей сцене я добавляю таймер для создания нескольких астероидов:

 this->timer.Start(INTERVAL_CREATE_ASTEROID, SpaceshipScene::CreateAsteroidTimer, this);
  

Внутренне этот таймер использует SDL_AddTimer и сохраняет текущее окно и контекст для себя:

 this->window = SDL_GL_GetCurrentWindow();
this->context = SDL_GL_GetCurrentContext();
this->callback = callback;
this->param = param;
this->timerId = SDL_AddTimer(interval, Timer::ExecuteCallback, this);
  

При выполнении обратного вызова я использую MakeCurrent, чтобы убедиться, что OpenGL будет выполняться в правильном контексте (окно и контекст из основного потока):

 bool hasContext = timer->window != NULL amp;amp; timer->context != NULL;

if (hasContext) {
    SDL_GL_MakeCurrent(timer->window, timer->context);
}

Uint32 result = timer->callback(interval, timer->param);

if (hasContext) {
    SDL_GL_MakeCurrent(timer->window, NULL);
}
  

Полный код здесь

В Mac OS X этот код работает отлично, но в Windows он не рисует астероиды в окне и не выдает никаких ошибок.

Что я делаю не так?