【发布时间】:2010-11-14 07:46:20
【问题描述】:
我想编写一个使用 Free Type 2 的硬件加速文本渲染器来加载字体、查找正确的字形及其大小等。
我的计划是在视频内存中创建一个包含字形(对于给定字体、大小等)的大型纹理,并为每个纹理定义一个表,定义有关系统内存中纹理内容的信息。
然后我可以使用该表构建一个顶点缓冲区来呈现文本。
我面临的问题是纹理的构造,为 Unicode 中的每个字形创建纹理是不切实际的,太多了。过去对于 Ascii,我只是在图像编辑器中构建纹理,然后自己提前根据需要填写表格,但是为此我需要某种动态系统来获取所需的字形,但也可以有效地将它们缓存到避免重复将相同的字形上传到 vram...(我猜是某种最不常用的系统)
另一个问题是并非所有字形大小都相同,我可以将纹理分割成一个足够大的网格以容纳最大的字形(我需要一些方法来准确计算),这使得将字形拟合到纹理上变得容易并且用新的字形替换它们(基于最不常用的或其他东西),但是这会浪费很多空间,但我不确定如何更有效地打包它们而不会因为字形被换入和换出而遇到碎片问题...
此外,如果纹理仍用于某些先前的文本,我还假设更新纹理可能会停止图形硬件,这是一个正确的假设吗?如果是这种情况,我该如何避免?
【问题讨论】:
标签: c++ graphics freetype2 text-rendering