【问题标题】:Direct2D performanceDirect2D 性能
【发布时间】:2015-02-01 21:47:56
【问题描述】:

所以,我已经在 DirectX11 中进行了一段时间的项目,但有些人建议我应该在 Direct2D 中进行。所以,我一直在我的项目中玩这个想法。我最终得到的是可怕的表现。 Direct2D 是否旨在与数十万个顶点一起使用?因为这就是我正在使用的。

【问题讨论】:

  • Direct2D 是 DirectX 的一部分,AFAIK。您使用的是 Direct3D11 吗?由于 Direct2D 是作为 Direct3D 之上的一个层构建的,因此几乎不可能更快。对于这么多顶点,最好使用带有顶点/索引缓冲区的 Direct3D。

标签: direct2d slimdx


【解决方案1】:

Direct2D 为您提供了一个简单易用的 API 来绘制高质量的 2d 图形,但与一些经过微调的 dx11 渲染相比,它以性能为代价。

这里是每次绘制的原始成本以供参考

  • FillRoundedRectangle(1 个像素角):96
  • DrawRoundedRectancle: 264
  • 填充矩形:6
  • 绘制矩形:190
  • 填充椭圆:204
  • 绘制椭圆:204
  • 线(无论垂直/大小...):46
  • 贝塞尔曲线:从 312 -> 620

Direct2d 构建在功能级别 10 的设备上,并在内部缓冲区中构建顶点(仅使用实例化的情况是绘制文本)。

因此,如果您需要批处理基元,则实例化抽屉可以产生相当大的性能提升(作为个人示例,我的时间轴关键帧渲染从 15 毫秒下降到 2 毫秒,将绘图从 d2d 交换到自定义 dx11 实例化着色器)。

如果您使用的是 Windows 8,则可以轻松地将 direct2d 和 direct3d 混合在同一个“视口”中,因此值得一看(在我的用例中,我使用 dx11 和基于结构化缓冲区的所有重部件实例化,并且为文本和其他小位交换到 direct2d 上下文)。

如果您需要绘制自定义几何体(特别是具有相当多的多边形数量),最好坚持使用 Direct3D11,因为它完全是为它设计的。

【讨论】:

  • “原始每次抽奖成本”中的数字是什么意思?
  • 这些是每个基元的输入汇编器输入,例如,fillrectangle 是 6 个索引(例如;2 个三角形)。
猜你喜欢
  • 2020-02-28
  • 1970-01-01
  • 2010-10-24
  • 2010-10-22
  • 2012-11-16
  • 2021-12-03
  • 2013-04-26
  • 2012-10-28
  • 1970-01-01
相关资源
最近更新 更多