#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 он не рисует астероиды в окне и не выдает никаких ошибок.
Что я делаю не так?