Direct2D性能

3

所以,我一直在使用DirectX11进行项目开发,但有些人建议我改用Direct2D。因此,我在我的项目中尝试了这个想法。结果,我得到的是可怕的性能表现。Direct2D是否适用于数十万个顶点?因为这正是我正在使用的。


Direct2D是DirectX的一部分,据我所知。你在使用Direct3D11吗?由于Direct2D是建立在Direct3D之上的一层,很难更快。对于这么多顶点,最好使用Direct3D和顶点/索引缓冲区。 - Anton Angelov
1个回答

3
Direct2D提供了一个简单易用的API来绘制高质量的二维图形,但与一些经过优化的DX11渲染相比,它的性能会有所下降。
以下是每次绘制的原始成本参考:
- 填充圆角矩形(1像素圆角):96 - 绘制圆角矩形:264 - 填充矩形:6 - 绘制矩形:190 - 填充椭圆形:204 - 绘制椭圆形:204 - 线段(任何垂直/大小...):46 - 贝塞尔曲线:从312到620
Direct2D基于功能级别10设备构建顶点并在内部缓冲区中生成(仅在绘制文本时使用实例化)。
因此,如果需要批处理基元,则实例化绘图器可以产生相当大的性能增益(例如,我的时间轴关键帧渲染从d2d转换为自定义dx11实例化着色器后,时间从15ms降至2ms)。
如果您正在使用Windows 8,则可以在同一“视口”中轻松混合Direct2D和Direct3D,因此这可能值得一看(在我的用例中,我对所有重要部分使用dx11和结构化缓冲区实例化,并在文本和其他小部分中切换到direct2d上下文)。
如果需要绘制自定义几何图形(特别是具有相当高的多边形数),最好使用Direct3D11,因为它完全为此而设计。

“原始每次绘制成本”中的数字是什么意思? - Elad Maimoni
这些是每个原始图元的输入组装器输入,所以例如,fillrectangle是6个索引(例如,2个三角形)。 - mrvux

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接