使用硬件加速的.NET/Mono图形,带有软件回退功能

5

背景

据我所知,WPF在可能的情况下进行硬件加速绘图,如果用户没有DirectX 9+,则会回退到软件渲染。这是一个非常有趣的想法,我甚至喜欢XAML的想法。

我不喜欢它的原因,也没有学习它的原因是,虽然Windows Forms是微软技术,且不如WPF,但通过Mono,它是跨平台的,而这对于WPF来说并不是真实的,可能永远都不会是。
关于是否会在未来出现适用于Linux/OS X的.NET WinForms包装器的专利障碍,存在争论,但这超出了本问题的范围。

问题

是否有适用于.NETMono,可让我在具备所需GPU /驱动程序的系统上使用基本的硬件加速(例如alpha合成,快速像素处理等),并提供软件回退以适应没有所需GPU /驱动程序的系统?

简言之:快速的图形处理适用于不古老的台式机和现代笔记本电脑,但对于低端netbooks等设备,需要可用的图形处理。 这不是用于游戏开发。

进一步说明

有几个技巧可以使GDI+更快。通过原始指针访问可以大大改进Set/GetPixel的性能。
使用的像素格式可以极大地改善渲染效果,32bppPArgb(32位带8位Alpha和RGB值预乘以Alpha)。
还有其他 技巧可以获得更快的速度,但对于某些目的而言,托管的GDI+仍然很慢。

我知道的框架

  • Unity3D - 目前支持Mono。共享软件,有免费版本。
  • TAO Framework - 看起来有些复杂,似乎不支持软件渲染。
  • OpenTK - 活跃、发展良好,比TAO更好,但是也没有软件回退。
  • SDL.NET - 与上述问题相同。
  • MonoXNA - 与上述问题相同。
  • Irrlicht - “完全跨平台,使用D3D、OpenGL和自己的软件渲染器”。
  • Silverlight/Moonlight - dthorpe建议使用。Alpha质量,没有任何支持。
  • Mono.Cairo - Mark H建议使用。
  • AGG - 高质量、高效的软件渲染,用C++实现,有一个非官方的C#端口
  • Axiom3D - Ogre的移植版。支持Mono,开源且看起来很活跃。有前途。

我目前的选择是尝试Irrlicht,但只是因为我看不到其他选择。除此之外,尽管它似乎支持软件渲染,但我不知道它在.NET/Mono wrapper中的状态如何,而且它的支持链接是一个论坛帖子
目前没有其他选择。

另外还有一个问题:我不知道如何“抽象”图形库。如果我意识到我做出了错误的选择,我将不知道该怎么办。

请原谅这个问题的长度。


编辑:由于这个问题有两个非常建设性的回答,我会等待一些时间,并选择得到最多赞的回答作为被采纳的答案。

另外,据说OpenGL已经在软件中实现,不仅是操作系统供应商,还有第三方提供的实现,这些实现将被OpenGL框架用于缺乏第三方驱动程序的情况。

3个回答

5

那么 cairo 呢?它有多个后端,包括OpenGL、GDI、X和Quartz,几乎可以在任何设备上工作。Mono.Cairo 为其实现了一个.NET封装器,但我不确定这是否允许通过代码切换后端,还是需要为每个系统重新构建。

Cairo被用作Moonlight、Gtk+和Mono的System.Drawing实现的后端。


看起来很有趣,因为提供了许多后端。您知道Mono.Cairo是否适用于在用户控件中进行绘图的Windows Forms应用程序吗? - Camilo Martin
我认为Mono.Cairo不直接支持在Winforms应用程序中绘图,只能通过非Windows平台上的System.Drawing间接支持。我熟悉的大多数Mono.Cairo应用程序都是基于Gtk#的,并且跨平台。 (原生的gtk库本身在Windows上针对GDI+,并且可以接近Windows的外观和感觉)。 - Mark H
我很高兴地在Linux/Windows上的Gtk#应用程序中成功使用了Mono.Cairo(而且没有进行任何源代码更改)。 - IanNorton
我认为cairo可以直接绘制SVG。但我不确定加速的cairo有多快。 - IanNorton
实际上,我也注意到你假设SDL不进行软件渲染。它可以。 - IanNorton
显示剩余4条评论

4

你的列表中没有提到的一个框架集是Silverlight。在Windows上它是硬件加速的,而Moonlight现在在Linux上也是硬件加速的。我不确定软件回退情况,但我想他们肯定有回退机制,因为它们都是为广泛的消费者使用而设计的。


1
从Silverlight 4.0开始,您可以创建在“浏览器之外”运行的桌面应用程序。它们仍然在内部以沙盒方式运行,但具有桌面应用程序的外观和感觉。 - dthorpe
你知道有没有(最好是开源的)在Moonlight下运行的Silverlight桌面应用程序吗?我想看一个例子。 - Camilo Martin
我最大的恐惧是在学习了几周/几个月的Silverlight之后,发现它跟GDI+一样慢。最糟糕的是,在GDI+中,我知道我的解决方法(例如使用堆栈模糊而不是高斯模糊),但如果一个框架正在进行实际渲染,我就不知道该怎么做了。我不知道它是一个令人惊叹的快速渲染引擎还是一个古怪而缓慢的引擎,我担心会以困难的方式发现。然而,正如你所说,它具有优势,尽管是用于浏览器。 - Camilo Martin
我另一个担忧是,鉴于微软对 HTML5 的意外突然进展(这可能与 Silverlight 直接冲突),他们完全放弃了 Silverlight,而开源社区也跟随他们,因为几乎每个人都喜欢 HTML5(在我看来有点被高估了)。至少在 OpenGL 中,我知道事情要更加稳定和广泛地采用。 - Camilo Martin
同意GDI+的设计存在问题,如果它能够硬件加速或者有人能够插入一个GDI+硬件驱动程序,那么在桌面世界中一切都会更好。 - Camilo Martin
显示剩余7条评论

1

那么使用http://www.mesa3d.org/的OpenTK怎么样?我很久以前看过mesa3d,但它提供了OpenGL的软件渲染能力。


那么让我们看看我是否理解,Mesa3D是一种可以轻松安装并提供系统范围的OpenGL回退的东西?因此,只需要使用OpenTK编写代码,并确保用户已安装Mesa3D(如果没有OpenGL兼容硬件,则它是否是插入式替换)? - Camilo Martin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接