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

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

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

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

0

Решение

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]