У меня есть программа, использующая OpenGL через freeglut под SDL. Инициализация SDL / OpenGL выглядит следующим образом:
// Initialize SDL
SDL_Init(SDL_INIT_VIDEO);
// Create the SDL window
SDL_SetVideoMode(SCREEN_W, SCREEN_H, SCREEN_DEPTH, SDL_OPENGL);
// Initialize OpenGL
glClearColor(BG_COLOR_R, BG_COLOR_G, BG_COLOR_B, 1.f);
glViewport(0, 0, SCREEN_W, SCREEN_H);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0f, SCREEN_W, SCREEN_H, 0.0f, -1.0f, 1.0f);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Я использовал блоки glBegin () … glEnd () без каких-либо проблем для рисования примитивов. Однако в этой программе, когда я вызываю любую функцию glutBitmapX, программа просто завершает работу без состояния ошибки. Код, который я использую для рисования текста:
glColor3f(1.f, 1.f, 1.f);
glRasterPos2f(x, y);
glutStrokeString(GLUT_BITMAP_8_BY_13, (const unsigned char*)"test string");
В предыдущих аналогичных программах я использовал glutBitmapCharacter и glutStrokeString для рисования текста, и это, похоже, работает. Единственная разница в том, что я сейчас использую freeglut с SDL, а не просто GLUT, как в предыдущих программах. Есть ли какая-то фундаментальная проблема с моей настройкой, которую я не вижу, или есть лучший способ рисования текста?
Подпрограммы, начинающиеся с префикса glutInit, используются для инициализации
Состояние GLUT. Основной процедурой инициализации является glutInit, которая должна
вызываться только один раз в программе GLUT. Нет
подпрограммы GLUT или OpenGL с префиксом должны вызываться перед glutInit.Другие подпрограммы glutInit могут быть вызваны до glutInit. Причина
эти процедуры могут быть использованы для установки инициализации окна по умолчанию
состояние, которое может быть изменено обработкой команды, выполненной в
glutInit. Например, glutInitWindowSize (400, 400) может быть вызван
до glutInit, чтобы указать 400 на 400, окно программы по умолчанию
размер. Установка начального размера окна или позиции перед glutInit
позволяет пользователю программы GLUT указывать начальный размер или положение
используя аргументы командной строки.
Не пытайтесь сочетать GLUT и SDL. Это закончится слезами и / или неработающими циклами событий. Выбирать один рамки и придерживаться его.
Вы вероятно испортили кучу.