c++ - 如何在 DirectX 9 中使用 D3DXSprite 尽可能快地绘制 D3DXFont?

标签 c++ directx direct3d directx-9

我有很多文字要画。如果我在第一个参数为 NULL 的情况下调用 D3DXFont::DrawText,我会得到糟糕的性能。

我听说将 D3DXFont 与 D3DXSprites 结合使用可以使事情变得更快。

我的应用程序需要如何绘制字符串? 它用伪阴影绘制每个字符串。这意味着我用黑色画了每根弦 4 次: x + 1, y + 1 x - 1, y + 1 x - 1, y - 1 x + 1, y - 1 和 1 次实际颜色。它使看起来非常漂亮且始终可读的字符串成为可能。我什至切换到像素字体以加快渲染速度。

现在用阴影调用该字符串 (ShadowString)。

我在屏幕上绘制 256 个(最坏情况)ShadowStrings 的每一帧。

我想知道如何使用 sprite(或任何其他技术)尽可能加快这些字符串的绘制速度。现在我在应用程序中获得 30 FPS。但我的目标是 120 分钟。问题仅在于文字绘图。

最佳答案

当然,您必须在进行任何优化之前分析您的应用程序,但说实话,D3DXFont/D3DXSprites 和“快速”是相互排斥的概念。如果它们不合适,就不要使用它们。 使用第 3 方库或制作您自己的 Sprite /字体渲染器。

最近我在这里回答了如何做:How to draw line and font without D3DX9 in DirectX 9? 此外,谷歌搜索“sprite font”、“sprite batching”、“texture atlases”、“TTF rendering”。如果您熟悉 API(尤其是顶点缓冲区和纹理),这不是很难,并且网络上有很多示例。不要犹豫,寻找 D3D11 或 OpenGL 示例,原理是相同的。

关于c++ - 如何在 DirectX 9 中使用 D3DXSprite 尽可能快地绘制 D3DXFont?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20777082/

相关文章:

directx - 在 d3d9 中打开抗锯齿功能?

c++ - D3D11 : Rendering (depth) to texture results in red square, 正常渲染工作

c++ - 参数没有正确传递

c++ - (VSCode Mac) 无法开始调试,是的,我用谷歌搜索了一下,没有任何帮助

c++ - 在 boost::multi_index 中访问 hashed_unique 中的数据

directx - 如何使用 SlimDX 设置 HLSL 统一变量的值?

c# - 捕获 DirectX 应用程序的视觉输出 - 即使在后台?

pointers - 语法错误: missing ';' before '*' when creating a pointer object of a user defined abstract class

c++ - 在类中不定义静态数组大小是不是很糟糕?--而是让它自动调整大小

c++ - 创建类数组时出错