在DotNET中超快速绘图

时间:2009-06-27 19:46:05

标签: vb.net gdi+ drawing performance

初步测试表明,GDI +(用VB.NET编写)对我的目的来说还不够快。我的应用程序需要能够以每秒20帧以上的全屏分辨率绘制成千上万的粒子(彩色圆圈,非常优选消除锯齿)。

我对于放弃GDI +犹豫不决,因为我还需要GDI +的许多其他高级绘图功能(虚线图案,图像,文本,路径,填充)。

寻找有关使用OpenGL,DirectX或其他平台加速VB.NET中的粒子渲染的好建议。我的应用程序严格来说是2D。

好感, 大卫

7 个答案:

答案 0 :(得分:4)

如果你想使用VB.NET,那么你可以使用XNA或SlimDX。

我在使用GDI +和XNA创建游戏方面有一些经验,我可以理解GDI +给你带来了麻烦。 如果我在哪里查看XNA,它比GDI +快得多,因为它实际上使用你的视频卡进行绘图,它有很多很好的文档和在线示例。

SlimDX看起来也不错,但我对它没有任何经验。 SlimDX基本上是.NET的DirectX API。

答案 1 :(得分:3)

获得所需速度的唯一方法是从软件渲染转向硬件渲染......不幸的是,这意味着转向OpenGL或DirectX。

另一种方法是尝试优化图形例程,只绘制需要绘制的粒子,而不是整个屏幕/窗口。

我同意JaredPar的说法,你最好先进行性能分析,以确定在重新切换到新框架之前是否可以改进现有的代码库。如果你不熟悉DirectX,它不是最简单的框架。

答案 2 :(得分:2)

问题可能在于您的算法,而不是GDI +。分析是唯一可以确定的方法。如果没有配置文件,您很可能会切换到新的GUI框架并遇到完全相同的问题。

如果你做了个人资料,GDI +的哪个部分导致了问题?

答案 3 :(得分:2)

在使用GDI +编写游戏制作者时,我发现最显着的速度提升是将我的位图转换为Format32bppPArgb; -

SuperFastBitmap = ConvertImagePixelFormat(SlowBitmap,Imaging.PixelFormat.Format32bppPArgb)

如果它们不是这种格式,转换时会立即看到差异。

答案 4 :(得分:2)

正如贾里德所说, 可能是你的周期中有很大一部分没有进入GDI,你可能会减少这些。

找到这些的一种简单方法是随机停止几次并检查堆栈。你在浪费时间的过程中抓住它的机会等于浪费的时间。

出现在多个此类样本上的任何指令或调用指令都是这样的,如果您可以替换它,您会看到加速。

In general, the method is this.

答案 5 :(得分:1)

当您在VB.net工作时,您是否尝试过使用WPF(部分.net自3.0以来)?由于WPF基于DirectX而不是GDI +,这应该可以为您提供所需的速度,尽管开发WPF并不是直截了当的。

答案 6 :(得分:0)

由于GDI +没有被显卡移动,因此渲染速度很慢,因为它使用CPU进行渲染。至少,您可以使用DirectX或SlimDX。

(抱歉英语不好)


请参阅:http://msdn.microsoft.com/en-us/library/windows/desktop/ff729480%28v=vs.85%29.aspx           http://www.codeproject.com/Articles/159586/Starting-DirectX-with-Visual-Basic-NET