【问题标题】:.NET/Mono HW Accelerated Graphics with Software Fallback.NET/Mono 硬件加速图形与软件回退
【发布时间】:2021-01-04 00:32:39
【问题描述】:

背景

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

我不喜欢它的原因,以及我什至懒得学习它的原因是,虽然Windows Forms 是 Microsoft 技术,不如 WPF,但它是通过 Mono 跨平台的,有点对于 WPF 来说,情况并非如此,而且可能永远不会。
关于 Linux/OS X 的 .NET WinForms 包装器是否会在未来遇到专利障碍,有debate,但这超出了这个问题的范围。

问题

是否有任何 .NET Mono可以让我使用基本的硬件加速(想想 alpha 合成、快速像素处理等)并为没有所需 GPU/驱动程序的系统提供软件后备

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

补充说明

有几个技巧可以让 GDI+ 更快。 raw pointer access 大大改进了 Set/GetPixel。
使用的像素格式可以大大提高渲染,32bppPArgb(32 位,8 位 Alpha 和 RGB 值Pre-multiplied by the alpha)。
othertricks 可以获得更快的速度,但托管 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 框架使用。

【问题讨论】:

    标签: .net graphics mono hardware-acceleration fallback


    【解决方案1】:

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

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

    【讨论】:

    • 看起来很有趣,因为提供了许多后端。您知道 Mono.Cairo 是否适用于在用户控件中进行绘图的 Windows 窗体应用程序?
    • 我不认为 Mono.Cairo 直接支持在 Winforms 应用程序中绘图,只能通过非 Windows 平台上的 System.Drawing 间接支持。我熟悉的大多数 Mono.Cairo 应用程序都是基于 Gtk# 的,并且是跨平台的。 (虽然原生 gtk 库本身以 Windows 上的 GDI+ 为目标,但可以接近 Windows 的外观)。
    • 看起来需要考虑,但我对Gtk#一无所知,所以这将是一项任务。如果我理解正确,您的建议是 P/Invoking the native cairo libs,对吗?
    • 我很高兴 Mono.Cairo 在 linux / windows 上的 Gtk# 应用程序中运行(源代码更改为零)
    • @IanNorton 所以 Mono.Cairo 是我可以在 Windows 和 Linux 中使用而无需更改的技术吗?您是否必须做一些特别的事情(在构建时等)或者它是否开箱即用?它是硬件加速的吗?
    【解决方案2】:

    您的阵容中未提及的一个框架集是 Silverlight。它在 Windows 上进行了硬件加速,而 Moonlight 现在在 Linux 上进行了硬件加速。不确定软件回退,但我想他们必须有回退,因为它们都是为非常广泛的消费者使用而设计的。

    【讨论】:

    • 但是 Silverlight 是用于 Web 应用程序的,对吗?我几乎可以肯定它有一个软件渲染器后备,但我在这里是桌面。
    • 从 Silverlight 4.0 开始,您可以创建“脱离浏览器”运行的桌面应用程序。它们仍然在内部沙盒中运行,但具有桌面应用程序的外观和感觉。
    • 您知道在桌面上运行 Silverlight 并在 Moonlight 下运行的任何(最好是开源的)应用程序吗?我想看一个例子。
    • 这看起来非常有趣和有前途,如果我必须学习一个新的 API,我也许可以进入那个(尽管对于几乎不了解 Winforms 的人来说,Silverlight 看起来很重要) )。我唯一的遗憾是该帖子是3 1/2年前的帖子,它有5个cmets,甚至样本所在的svn服务器也似乎死了。另外,看了一圈后,我看到有人说this之类的东西,这让我在上船之前三思而后行。别误会,它看起来不错,但我不想一个人在月光下。
    • 嗯,Silverlight 和 Moonlight 确实有眼球优势。那里有很多 Silverlight 应用程序,而且大多数时候您甚至没有意识到您正在使用其中一个。例如,Netflix 使用 Silverlight 作为其在线电影播放器​​。我从未听说过您在帖子中列出的大多数框架。您是否更愿意选择技术能力强但相对晦涩的框架而不是技术能力强且广泛使用的框架?还要考虑到 Moonlight 是开源的,并且可能会在 Microsoft 停用 Silverlight 之后很长时间内继续开发/支持。
    【解决方案3】:

    OpenTK 怎么样,然后使用http://www.mesa3d.org/?很久没关注 mesa3d,但它为 OpenGL 提供了软件渲染功能。

    【讨论】:

    • 那么让我们看看我是否理解,Mesa3D 是一种可以轻松安装并提供系统范围的 OpenGL 后备的东西?因此,如果没有支持 OpenGL 的硬件(是否可以直接替代),只需使用 OpenTK 编写代码并确保用户已安装 Mesa3D?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    相关资源
    最近更新 更多