.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.