c++ - 使用 XFT 库绘制彩色字符串的更快方法是什么?

标签 c++ graphics rendering xlib xorg

我有一个字符串和一个数组,其中包含字符串格式的每个字符:颜色和字体。现在我正在使用 XFT 库逐个字符地绘制这个字符串,使用各自的颜色和字体(XftDrawStringUtf8 函数)。但是这种方法很慢。

我考虑过扫描字符串并一次绘制具有相同格式的 block 。但这种方法在某些情况下(如果每个字符都有不同的格式)甚至比逐个字符的方法更慢。

此外,我在某处读到,从排版的角度来看,按字符绘制字符串不是一个好方法。关于字距调整的一些事情。

有没有更快更好的方法,使用 XFT 库?还是使用其他库?

最佳答案

您可以将渲染扩展与 CreateGlyphSet/CompositeGlyphs 请求一起使用。

GlyphSet 是具有偏移量的矩形像素图数组。使用 CompositeGlyphs 请求,您可以在一个请求(一个网络数据包的一种方式)中呈现很多:它需要“glyphset 元素”数组,即“char ids 数组”+“array of ids”中最后一个字符末尾的偏移量或要使用的另一个字形集的 id。您可以通过在字距调整非零的位置将输入字符串拆分为子字符串来调整字距调整对。颜色有点棘手,一种方法是使用源图片(RenderCompositeGlyphs 使用渲染的文本作为 mask ),用您需要的颜色的矩形预着色。

在实践中,特别是如果您需要支持复杂的脚本(如阿拉伯语),我建议使用一些高级库(Pango/Cairo)在客户端像素图上呈现所有内容,并将生成的图片传输到您的可绘制对象中

如果您只是探索可能的限制,除了渲染扩展之外的另一种方法是尝试使用带有顶点和片段着色器的 GPU 来渲染所有内容(请查看 glyphy 项目。这也是有关文本渲染的一般信息的良好来源Behdad Esfahbod 页)

关于c++ - 使用 XFT 库绘制彩色字符串的更快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24256904/

相关文章:

c++ - 多边形轮廓上的边并不总是正确的

javascript - React - 从数组中删除项目而不是重新渲染列表

css - 确定渲染网页的原色?

c++ - 如何在 win32 中使用 GetSaveFileName 保存文件?

c++ - 从文件读取到 C++ 结构中的结构数组

c++ - 在 fedora 中运行包含 posix api 的 c++ 程序

java - 处理与 JavaFx 与 Griffon 的比较

qt - 如何在 Qt3D 中绘制物体的轮廓?

Unity3D WebGL Headless 不渲染

c++ - 在 winapi 中复制 Visual Studio 2013 自定义 GUI