【问题标题】:Hardware accelerated Unicode text rendering硬件加速的 Unicode 文本渲染
【发布时间】:2010-11-14 07:46:20
【问题描述】:

我想编写一个使用 Free Type 2 的硬件加速文本渲染器来加载字体、查找正确的字形及其大小等。

我的计划是在视频内存中创建一个包含字形(对于给定字体、大小等)的大型纹理,并为每个纹理定义一个表,定义有关系统内存中纹理内容的信息。

然后我可以使用该表构建一个顶点缓冲区来呈现文本。

我面临的问题是纹理的构造,为 Unicode 中的每个字形创建纹理是不切实际的,太多了。过去对于 Ascii,我只是在图像编辑器中构建纹理,然后自己提前根据需要填写表格,但是为此我需要某种动态系统来获取所需的字形,但也可以有效地将它们缓存到避免重复将相同的字形上传到 vram...(我猜是某种最不常用的系统)

另一个问题是并非所有字形大小都相同,我可以将纹理分割成一个足够大的网格以容纳最大的字形(我需要一些方法来准确计算),这使得将字形拟合到纹理上变得容易并且用新的字形替换它们(基于最不常用的或其他东西),但是这会浪费很多空间,但我不确定如何更有效地打包它们而不会因为字形被换入和换出而遇到碎片问题...

此外,如果纹理仍用于某些先前的文本,我还假设更新纹理可能会停止图形硬件,这是一个正确的假设吗?如果是这种情况,我该如何避免?

【问题讨论】:

    标签: c++ graphics freetype2 text-rendering


    【解决方案1】:

    文本渲染是非常复杂的问题,然后“粘贴”一些字形......不仅仅是很复杂, 它非常复杂:字距调整、连字、间距、双向文本、元音等等......

    您为什么不使用像 Pango 这样的用于文本渲染的普通库创建文本,创建位图并将其显示为 3D 对象上的位图(如果我了解您的需要)。

    编辑: 类似 HTML 的简单标记也可以使用 Pango 呈现:http://library.gnome.org/devel/pango/unstable/PangoMarkupFormat.html

    【讨论】:

    • 因为我还没有找到任何能够呈现格式化文本(即像一些简单的 html 类型的东西)并且没有人指出我可以在我的另一个问题中与 d3d 应用程序集成的任何东西。虽然 Pango 看起来可能会做这些事情,但将其添加为我之前的问题 (stackoverflow.com/questions/1150289/…) 的答案,如果我稍后查看它之后它能够做我需要的事情,我会接受它。
    • 添加了喜欢富文本工具的评论
    【解决方案2】:

    Cairo支持硬件加速渲染到many surface types

    有一个名为 FontForge 的库正在使用 Cairo 进行渲染,但我自己没有尝试过。你应该检查一下,让我知道它是怎么回事:-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多