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