我正在编写一个需要在 Direct3D9 中绘制大量文本的应用程序——几行,可能是几十行。文本可以被大量格式化(即不同的字体、样式、大小),并且可以包含来自不同字符集的 unicode 符号。最糟糕的是,它可以随时更改,所以它需要是动态的(渲染一次显示总是不行的)。
这样做有两个问题:首先,我可能需要对 D3DXCreateFont 进行大量调用,据说这些调用成本很高(我自己也不确定)。另一种方法是在绘制多部分线之前创建所有字体,然后在它们之间切换——这样更好吗?好吧,我也可以在画线时即时创建字体对象,将它们添加到某种字体对象缓存中,然后在尝试创建新对象之前查看缓存?您认为哪种方法最好?
第二个问题是 D3DXFont 似乎不理解下划线/删除线字体样式。尽管 D3DFONT 基于 LOGFONT,但它省略了这些字段(虽然支持斜体)。假设我真的需要下划线/删除线,我该怎么办?有没有办法强制 ID3DXFont 做下划线?我应该自己画那些线吗(我怎么做那么快)?或者也许我应该切换到在 HDC 上使用 GDI 绘图,然后将这些像素复制到纹理中——这会提供合理的性能吗?