Похоже, вы устанавливаете свои биты на пиксель равными 0.
m_screen = SDL_SetVideoMode(width, height, 0, SDL_OPENGL);
Обычно я думаю, что вы хотите 32 в вашем случае.
С учетом сказанного, если это не 'Чтобы решить вашу проблему, попробуйте позвонить:
m_screen = SDL_SetVideoMode(width, height, 0, SDL_OPENGL | SDL_HWSURFACE | SDL_GL_DOUBLEBUFFER);
Это потребует аппаратной поверхности и двойной буферизации.
Я также не видел, чтобы вы звонили так:
glViewport(0, 0, width, height);
перед вашим первым вызовом glLoadIdentity.Возможно, вы делали это раньше - однако SDL_SetVideoMode может привести к сбросу контекста GL, что делает целесообразным переустановить все необходимые параметры OpenGL.
Есть еще одна проблема,тем не мение.Мы сосредоточены на вашем коде GL, но возможно SDL был испорчен до (или после) инициализации этой подсистемы. Я хотел бы предложить вам один раз вызвать SDL_GetError () перед входом в основной цикл, просто чтобы убедиться, что какая-то ошибка, которую вы не проверяли на обратном пути, не помешала.
Есть много других вещей, с которыми SDL может быть придирчив при использовании OpenGL.Моя следующая проблема заключается в том, что ваш поток кода может вызывать get_surface более одного раза ... попробуйте добавить статическую переменную в функцию следующим образом:
static int has_init = 0;
has_init++;
if (has_init > 1) {
// Well that's odd isn't it
}