.NET/Mono 硬件加速图形与软件回退

标签 .net graphics mono hardware-acceleration fallback

背景

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

我不喜欢它的原因,以及为什么我什至懒得学习它,是因为 while Windows Forms是微软技术,不如WPF,通过Mono跨平台,这对于 WPF 来说是不正确的,而且可能永远不会如此。
debate关于 Linux/OS X 的 .NET WinForms 包装器将来是否会遇到专利障碍,但这超出了本问题的范围。

问题

是否有适用于 .NET Mono,让我可以使用基本的硬件对于没有所需 GPU/驱动程序的系统,是否可以使用软件后备加速(例如 Alpha 合成、快速像素操作等)?

简而言之:在非古代台式机和现代笔记本电脑上快速图形,但在低端上可用图形 netbooks和类似的设备。 这不适用于游戏开发

进一步说明

有几个技巧可以使 GDI+ 更快。 Set/GetPixel 有了很大的改进 raw pointer access .
使用的像素格式可以大大改善渲染,32bppPArgb (32 位,带有 8 位 Alpha 和 RGB 值 Pre-multiplied by the alpha )。
other tricks可以获得更快的速度,但托管 GDI+ 对于某些目的来说仍然很慢。

我知道的框架

  • Unity3D - AFAIK 不支持 Mono。 支持。具有免费版本的共享软件。
  • TAO Framework - 看起来有点复杂,而且似乎不支持软件渲染。
  • OpenTK - 活跃,发展良好,比 TAO 更好,但也没有软件回退。
  • SDL.NET - 与上面相同的问题。
  • MonoXNA - 同上。
  • Irrlicht - “它是完全跨平台的,使用 D3D、OpenGL 和自己的软件渲染器”。
  • Silverlight/Moonlight - 建议者dthorpe 。 Alpha 质量,没有任何支持。
  • Mono.Cairo - 建议者Mark H .
  • AGG - 高质量、非常高效的软件渲染,用非官方的 C++ 实现 C# port .
  • Axiom3D - 食人魔港口。支持 Mono,开源并且看起来还活着。前景广阔。
<小时/>

我当前的选择是尝试 Irrlicht,但这只是因为我别无选择。有吗?
另外,虽然看起来支持软件渲染,但是不知道.NET/Mono wrapper中它的状态如何? ,其支持链接是forum post .

目前没有。

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

请原谅这个问题的长度。

<小时/>

编辑:由于这个问题有两个真正有建设性的答案,我会等待几天,然后勾选最高票数的答案作为接受的答案。

在另一则新闻中,OpenGL 似乎是 implemented in software ,无论是操作系统供应商还是第三方,这些实现将由 OpenGL 框架在缺乏第三方驱动程序的情况下使用。

最佳答案

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

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

关于.NET/Mono 硬件加速图形与软件回退,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8513428/

相关文章:

c# - 你如何在 C# .NET 中使用 'clone' WebControls?

java - clearRect 绘制黑色而不是透明

c# - 在 .NET Core 中运行 Mono.Cecil

c# - 如何在 .Net 中实现 "convert using this function"自定义属性?

.net - 可移植类库版本控制

java - 有人可以解释一下使用 DDA 扫描线给定 3 个顶点绘制三角形的逻辑吗?

java - 我的台词没有去到它们应该去的地方

c# - 无法在运行 Mono 的 Mac OSX 上以 C# 加载 PNG

.net - 月光 2 与银光 3 : huge performance gap

c# - 事务必须在 SQL Server 的存储过程中吗?