FTGL: символы не отображаются при рендеринге

Мое приложение выводит текст с помощью OpenGL и FTGL. Я установил такой шрифт:

Impl::font = new FTTextureFont("/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf");
if (Impl::font->Error() != 0) {
    delete Impl::font;
    throw std::runtime_error("Could not load font DejaVuSans.ttf!");
}
if (!Impl::font->FaceSize(72)) {
    delete Impl::font;
    throw std::runtime_error("Could not use DejaVuSans with size 72!");
}

Я визуализирую так:

glColor3f(1.0, 1.0, 1.0);
Impl::font->Render(my_string.c_str());

Теперь у меня есть большая проблема: есть одна строка, которую я создаю довольно рано в программе, и она отображается правильно. Затем есть еще одна строка, которая создается позже и отображает только те буквы, которые также содержатся в первой строке. Я могу только предположить, что текстурный шрифт создает текстуры только для букв первой строки, но не для букв второй строки.

Что может быть причиной этого? Нужно ли загружать все символы, которые я буду использовать раньше? Есть что-то, что мне не хватает?

(Было бы прилично потрудиться, чтобы свести мой код к минимальному примеру, воспроизводящему ошибку, поэтому я сначала спрашиваю что-то очевидное, что я делаю неправильно.)


person flyx    schedule 19.09.2013    source источник


Ответы (1)


Я нашел причину: я вызвал Impl::font->BBox(my_string.c_str()) где-то еще в коде. Судя по всему, это приводит к рендерингу строки в виде текстуры и ее кешированию. Теперь, поскольку этот код был вызван из другого потока, он не смог загрузить недостающие символы. Как только я переместил вычисление BBox в поток рендеринга, все заработало просто отлично.

person flyx    schedule 20.09.2013