我正在搞乱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 && 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上,它并没有在窗口上绘制小行星,也没有抛出任何错误。
我做错了什么?