FTGL:渲染时不显示字符

FTGL: Characters do not show up on rendering

本文关键字:显示 字符 FTGL      更新时间:2023-10-16

我的应用程序使用 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());

现在我有一个主要问题:我在程序的早期创建了一个字符串,它可以正确呈现。然后是稍后创建的另一个字符串,它只呈现那些也包含在第一个字符串中的字母。我只能假设纹理字体只为第一个字符串的字母创建纹理,而不是为第二个字符串的字母创建纹理。

可能是什么原因造成的?我需要让它加载我将提前使用的所有字符吗?我错过了什么吗?

(将我的代码归结为一个重现错误的最小示例会付出相当大的努力,所以我首先询问一些明显的我做错了。

我找到了原因:我在代码中的其他地方调用了Impl::font->BBox(my_string.c_str())。显然,这会导致将字符串呈现为纹理并缓存它。现在,由于此代码是从另一个线程调用的,因此无法加载缺少的字符。一旦我将BBox计算移动到渲染线程,一切正常。