我正在建立一个歌曲可视化,我需要计算每个~50ms一个新的位图,并通过在一个图片框上绘制它在表格上显示。
不幸的是,使用DrawImage / DrawLine时,此图像的渲染/绘画性能不会很快。
有没有办法通过使用XNA / DirectX进行改进?
哪一项更适合这项任务?
任何例子?
答案 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空间中工作。