.NET/Mono HW ускоренная графика с программным резервом

Фон

Насколько я знаю, WPF выполняет аппаратно-ускоренное рисование, если это возможно, с отступлением от программного рендеринга, если у пользователя нет DirectX 9+. Это очень интересная идея, и мне даже нравится идея XAML.

Причина, по которой мне это не нравится, и почему я даже не удосужился изучить ее, заключается в том, что хотя Windows Forms является технологией Microsoft и уступает WPF, она кроссплатформенная через Mono, что не так для WPF, и, вероятно, никогда не будет.
Существуют споры о том, ударит ли оболочка.NET WinForms для Linux/OS X в будущем, но это выходит за рамки этого вопроса.

Вопрос

Есть ли какая-либо библиотека для .NET и Mono, которая позволила бы мне использовать базовое аппаратное ускорение (например, альфа-композитинг, быстрое манипулирование пикселями и т. Д.) С программным резервом для систем без необходимых графических процессоров / драйверов?

Короче говоря: быстрая графика на не древних настольных компьютерах и современных ноутбуках, но полезная графика на недорогих нетбуках и подобных устройствах. Это не для разработки игр.

Дальнейшие заметки

Есть несколько способов сделать GDI+ быстрее. Set/GetPixel значительно улучшен с помощью необработанного указателя доступа.
Используемый формат пикселя может значительно улучшить рендеринг, 32bppPArgb (32-битный с 8-битными значениями Alpha и RGB, предварительно умноженными на альфа).
Существуют и другие приемы, которые могут повысить скорость, но в некоторых случаях управляемый GDI+ все еще работает медленно.

Фреймворки, которые я знаю

  • Unity3D - AFAIK не поддерживает Mono. Имеет ли. Условно-бесплатная с бесплатной версией.
  • TAO Framework - выглядит немного сложным и, похоже, не поддерживает рендеринг программного обеспечения.
  • OpenTK - активный, хорошо развитый и лучше, чем TAO, но без программного обеспечения.
  • SDL.NET - та же проблема, что и выше.
  • MonoXNA - То же, что и выше.
  • Irrlicht - "Он полностью кроссплатформенный, использует D3D, OpenGL и собственный программный рендер".
  • Silverlight / Moonlight - Предложено dthorpe. Альфа качество, никакой поддержки вообще.
  • Mono.Cairo - Предложено Марком Х.
  • AGG - Высококачественный, очень эффективный программный рендеринг, реализованный на C++ с неофициальным портом C#.
  • Axiom3D - Огрский порт. Поддерживает Mono, с открытым исходным кодом и кажется живым. Перспективный.

Мой текущий выбор попробовать Irrlicht, но только потому, что я не вижу альтернативы. Есть?
Кроме того, даже несмотря на то, что он поддерживает рендеринг программного обеспечения, я не знаю, каково его состояние в оболочке.NET/Mono, а ссылка на поддержку - в сообщении на форуме.

нет в данный момент.

Кроме того, есть еще одна проблема: я понятия не имею, как "абстрагироваться" вокруг графической библиотеки. Если в дальнейшем я пойму, что сделал неправильный выбор, я не буду знать, что делать.

Пожалуйста, извините за длину этого вопроса.


Редактировать: Поскольку на этот вопрос было два действительно конструктивных ответа, я подожду несколько дней и выберу наиболее одобренный как принятый ответ.

В другой новости кажется, что OpenGL реализован в программном обеспечении, как поставщиками ОС, так и третьими лицами, и эти реализации будут использоваться платформами OpenGL при отсутствии сторонних драйверов.

3 ответа

Как насчет Каира? Он имеет несколько бэкэндов, включая OpenGL, GDI, X и Quartz, и должен работать практически на любом устройстве. Mono.Cairo реализует оболочку.NET для него, но я не уверен, позволяет ли это переключать серверную часть с помощью кода или требует перестройки для каждой системы.

Cairo используется в качестве серверной части для реализации Moonlight, Gtk+ и Mono System.Drawing.

Silverlight - это один из фреймворков, не упомянутый в вашей линейке. Аппаратное ускорение в Windows, и Moonlight теперь аппаратное ускорение в Linux. Не уверен насчет резервного программного обеспечения, но я предполагаю, что они должны иметь запасной вариант, так как они оба были разработаны для очень широкого использования потребителями.

Как насчет OpenTK, но затем использовать http://www.mesa3d.org/? Прошло много времени с тех пор, как я смотрел на mesa3d, но он предоставляет возможность программного рендеринга для OpenGL.

Другие вопросы по тегам