使用XNA / DirectX绘制DrawImage / DrawLine

时间:2011-07-06 13:24:09

标签: c# forms xna directx

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

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

有没有办法通过使用XNA / DirectX进行改进?

哪一项更适合这项任务?

任何例子?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

我同意以类似于winforms样本的方式使用xna。

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

这会将所有这些点发送到GPU,您可以在线上创建各种效果(着色器),同时GPU完成所有繁重的任务。

应用程序中心教育部分的一些示例使用此类渲染来制作网格。我想到的是perPixelLighting sample。您可能(或可能不)需要在3d空间中工作。