SDL_AddTimer + SDL_GL_MakeCurrent无法在Windows上运行

时间:2014-07-02 12:47:16

标签: 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();

Complete code here

在我的场景中,我添加了一个计时器来创建一些小行星:

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);
}

Complete code here

在Mac OS X上,此代码运行正常,但在Windows上,它并没有在窗口上绘制小行星,也没有抛出任何错误。

我做错了什么?

0 个答案:

没有答案