DrawImage / DrawLine using XNA / DirectX

本文关键字:DirectX XNA DrawLine DrawImage using | 更新日期: 2023-09-27 18:01:33

我正在构建一个歌曲可视化,我需要计算每~50ms一个新的位图,并通过在图片框上绘制它在窗体上显示。

不幸的是,当使用DrawImage/DrawLine时,此图像的渲染/绘画性能并不快。

是否有办法改善使用XNA/DirectX?

哪一个更适合这个任务?

的例子吗?

DrawImage / DrawLine using XNA / DirectX

XNA在后台使用DirectX。此外,你不能再直接在c#中使用普通的DirectX了,因为ManagedDX因为XNA而停产了。但也有其他选择,比如slimdx。XNA更接近于使用directx的引擎。您需要的是一种更低级的方法,在这种方法中,绘图性能似乎不是真正的问题,而是托管内存io操作。我建议使用Direct2D(也是slimdx的一部分),它使用硬件加速,更适合2D渲染。您也可以尝试这个操作,并完全手动操作位图。

我同意以类似于winforms示例的方式使用xna。

我认为你可能会得到最好的外观和性能的线不是通过渲染位图或使用SpriteBatch,而是通过创建一个动态顶点缓冲区,以包含所有的线的所有端点。然后使用DrawUserPrimitives()并指定primitiveType参数为primitiveType . linelist。

这将所有这些点发送到GPU,在那里你可以创建各种各样的效果(着色器),而GPU做所有繁重的工作。

app hub的教育部分的一些示例使用这种渲染来制作网格。我想到的一个例子是perPixelLighting。你可能(也可能不)需要在3d空间中工作。