我使用C ++ / CLI编写了一个简单的基于GDI的数据绘图仪,但它并不是特别快(一些基本的分析表明它是屏幕上的渲染问题)。
有没有办法为UserControl启用硬件加速,还是有针对direct3D的.net接口? ......还是有其他一些我可以考虑的选择。
我们正在使用托管代码,因此如果可能的话,解决方案确实需要与CLI兼容。
[编辑] 如果它有帮助,我正在使用Graphics::FillRectangle
渲染每个2x2像素的矩形条(128个数据点) - 也许有更好的方法可以做到这一点?
答案 0 :(得分:5)
Managed DirectX已被弃用了一段时间。你真的不想用它。相反,您应该使用SlimDX,它是用C ++ / CLI编写的DirectX SDK API的开源互操作层。它比Managed DirectX更好,并得到开发人员专家社区的支持。 (我将很快与他们一起努力改进DirectWrite支持。)
答案 1 :(得分:2)
根据我的经验,使用GDI +将无法获得足够好的性能。即使是简单的绘图,你也会很快发现它有很多开销。
备选方案(如您所述)是Direct3D,或者您可以考虑使用系统调用定期GDI。这显然使代码平台依赖,但它可以非常快。我用它做了很好的结果。
这一切都取决于你愿意处理的复杂程度。一旦你弄清楚基础知识,GDI就相对容易了,Direct3D有点复杂。虽然Direct3D更具未来性。
答案 2 :(得分:2)
GDI +在性能方面确实不是很好,但是我自己在一个与工作相关的项目中编写了一个GDI +绘图仪,能够在1680x1050分辨率下以~30帧/秒的速度吐出数千个点的图形(滚动图)。
为实现这一目标需要进行大量调整:
我无法看到你的场景如何需要大量的优化,128点的数据什么都不是。将这些点放入一个GraphicsPath可能会有所不同,因为这意味着更少的编组开销。
顺便说一下,我们在这里讨论什么分辨率和帧速率?
答案 3 :(得分:1)
微软现在也有Direct2D,它是硬件加速的2D绘图:
Direct2D是硬件加速的, 即时模式,2-D图形API 提供高性能和 2-D的高质量渲染 几何,位图和文本。该 Direct2D API旨在实现 与GDI,GDI +和 Direct3D的。
它需要Windows 7 / Server 2008 R2,但支持已通过Platform Update重新添加到Vista / Server 2008中:
答案 4 :(得分:1)
使用 wireless thermo完成重定向数据流入后,我一直在寻找类似的解决方案 EPD用于为我的PC呈现图形文本。我可能会从上面的评论中找到一种可能的方式。
请注意,并非所有2D绘图操作都支持硬件加速,将其打开可能会影响您的某些自定义视图或绘图调用。