Мой первый совет: избавьтесь от этого фальшивого класса System: пока все задачи, которые он выполняет, являются чисто последовательными / процедурными, и это должно быть отражено в набросках программ. Люди склонны помещать все в классы только потому, что их учат видеть все с точки зрения объектных моделей. Но этот класс System должен следовать шаблону синглтона, который, на мой взгляд, является анти-шаблоном.
Все вещи, которые вы поместили в init_GL, входят в цикл рендеринга. Инициализация OpenGL заканчивается после создания контекста рендеринга. Состояние OpenGL не инициализировано установлено по требованию . OpenGL объекты инициализируются, но также по требованию.
Также вы не правильно используете glGetError. Это должно быть вызвано в цикле, пока больше не сообщается об ошибках. Таким образом, также не имеет смысла спасаться, если сообщается об ошибке GL. Ошибки OpenGL следует считать диагностическими.
SDL_GL_SetAttribute
должен быть установлен перед вызовом SDL_SetVideoMode
, поэтому вы, вероятно, не используете двойную буферизацию.