Аппаратное ускорение и wpf
Возможно, вам известно, что видеокарты различаются между собой в плане поддержки специализированных средств визуализации и оптимизации. К счастью, проблемой это не является, поскольку WPF обладает способностью выполнять всю работу с использованием программных вычислений вместо того, чтобы полагаться на встроенную поддержку видеокарты.
В отношении программной поддержки WPF существует одно исключение. Из-за слабой поддержки драйверов WPF выполняет сглаживание трехмерной графики только в случае, если приложение запущено под управлением Windows Vista или Windows 7 (и есть встроенный драйвер WDDM для установленной видеокарты).
Это значит, что при рисовании трехмерных фигур на компьютере с Windows ХР вместо гладких линий будут получены ступенчатые ломаные. Однако для двумерной графики сглаживание обеспечивается всегда, независимо от операционной системы и поддержки драйверов.
Наличие мощной видеокарты не дает абсолютной гарантии, что вы получите максимальную, с аппаратной поддержкой производительность на WPF. Программное обеспечение также играет важную роль. Например, WPF не может обеспечить аппаратного ускорения на видеокартах, если используются устаревшие драйверы. (Для устаревших видеокарт, такие драйверы, скорее всего, будут единственно доступными.) Технология WPF также обеспечивает более высокую производительность в средах операционных систем Windows Vista и Windows 7, где она может пользоваться преимуществами новой модели дисплейных драйверов Windows (Windows Display Driver Model — WDDM). Модель WDDM предлагает несколько важных усовершенствований по сравнению с Windows ХР Display Driver Model (XPDM). Что более важно, WDDM позволяет запланировать несколько операций GPU одновременно и отображать страницы памяти видеокарты на обычную системную память, если вся память видеокарты израсходована.
Запомните в качестве главного эмпирического правила: WPF предоставляет некоторого рода аппаратное ускорение всем драйверам WDDM и драйверам XPDM, созданным после ноября 2004 г., когда Microsoft издала новые руководства по разработке драйверов. Разумеется, уровень поддержки отличается. Когда инфраструктура WPF запускается в первый раз, она оценивает видеокарту и назначает ей рейтинг от 0 до 2.
Среди обещаний, связанных с WPF, было и то, что вам не нужно беспокоиться о деталях и сложностях, связанных со специфическим аппаратным обеспечением. Технология WPF достаточно интеллектуальна, чтобы по возможности использовать аппаратную оптимизацию, но в случае неудачи все будет обработано программно. Поэтому если вы запустите WPF-приложение на компьютере с унаследованной видеокартой, интерфейс будет выглядеть так, как он был разработан. Конечно, программные альтернативы могут оказаться значительно медленнее, так что вы столкнетесь с тем, что компьютеры со старыми видеокартами не очень хорошо отрабатывают расширенные приложения WPF — особенно те, что включают сложную анимацию или другие сложные графические эффекты. На практике может быть принято решение упростить некоторые сложные эффекты в пользовательском интерфейсе, в зависимости от уровня аппаратной поддержки, доступной клиенту (определяется свойством RenderCapability.Tier).
Целью WPF является взвалить на видеокарту как можно больше работы, чтобы сложные графические процедуры ограничивались возможностями визуализации (узлом обработки графики), а не вычислительной мощностью процессора (центральным процессором компьютера). При таком подходе центральный процессор высвобождается для другой работы, видеокарта используется максимально эффективно и появляется возможность пользоваться преимуществами новых видеокарт по мере их появления.
Уровни WPF
Видеокарты значительно различаются между собой. Когда WPF оценивает видеокарту, то учитывает множество факторов, включая объем памяти видеокарты, поддержку построителей текстур (встроенные процедуры вычисления пиксельных эффектов наподобие прозрачности), вершинных построителей текстур (встроенные процедуры вычисления значений вершин треугольника, которые применяются при текстурировании трехмерных объектов). На основе всех этих деталей определяется значение уровня визуализации WPF.
WPF распознает три уровня визуализации:
Уровень визуализации 0
Видеокарта не предоставляет никакого аппаратного ускорения. Это соответствует версии DirectX ниже 7.0.
Уровень визуализации 1
Видеокарта обеспечивает частичное аппаратное ускорение. Это соответствует версии DirectX выше 7.0, но ниже 9.0.
Уровень визуализации 2
Все средства, которые могут быть ускорены аппаратно, будут ускорены. Это отвечает версии DirectX 9.0 и выше.
В некоторых ситуациях требуется программно проверить текущий уровень визуализации, чтобы выборочно отключить некоторые сложные графические средства на менее мощных картах. Для этого используется статическое свойство Tier класса System.Windows.Media.RenderCapability. Но здесь должен быть предпринят один трюк. Чтобы извлечь значение уровня из свойства Tier, необходимо выполнить сдвиг на 16 бит, как показано ниже:
int rendenngTier = (RenderCapability.Tier >> 16);
if (renderingTier == 0)
{...}
else if (renderingTier == 1)
{...}
Такое проектное решение допускает расширяемость. В будущих версиях WPF другие биты свойства Tier могут быть использованы для сохранения информации о поддержке других свойств, создавая в результате подуровни.
Преимущества WPF
Даже если бы единственным достоинством WPF было аппаратное ускорение через DirectX, это уже стало бы значительным усовершенствованием, хоть и не революционным. Однако WPF на самом деле включает целый набор высокоуровневых служб, ориентированных на прикладных программистов.
Ниже приведен список некоторых наиболее существенных изменений, которые привнесла с собой технология WPF в мир программирования Windows-приложений:
Веб-подобная модель компоновки
Вместо того чтобы фиксировать элементы управления на месте с определенными координатами, WPF поддерживает гибкий поток, размещающий элементы управления на основе их содержимого. В результате получается пользовательский интерфейс, который может быть адаптирован для отображения высокодинамичного содержимого или к разным языкам.
Богатая модель рисования
Вместо рисования пикселей в WPF вы имеете дело с примитивами — базовыми фигурами, блоками текста и прочими графическими ингредиентами. Кроме того, доступны такие новые средства, как действительно прозрачные элементы управления, возможность укладывания друг на друга множества уровней с разной степенью прозрачности, а также встроенная поддержка трехмерной графики.
Развитая текстовая модель
После многих лет нестандартной обработки текстов WPF наконец-то предоставляет Windows-приложениям возможность отображения расширенного стилизованного текста в любом месте пользовательского интерфейса. И если нужно отображать значительные объемы текста, для повышения читабельности можно воспользоваться развитыми средствами отображения документов, такими как переносы, разбиение на колонки и выравнивание.
Анимация
В WPF нет необходимости использовать таймер для того, чтобы заставить форму перерисовать себя. Вместо этого доступна анимация — неотъемлемая часть платформы. Анимация определяется декларативными дескрипторами, и WPF запускает ее в действие автоматически.
Поддержка аудио и видео
Прежние инструментальные наборы для построения пользовательских интерфейсов, такие как Windows Forms, были весьма ограничены в работе с мультимедиа. Однако WPF включает поддержку воспроизведения любого аудио или видеофайла, поддерживаемого проигрывателем Windows Media, позволяя воспроизводить более одного медиафайла одновременно. Что еще больше впечатляет — WPF предоставляет в ваше распоряжение инструменты для интеграции видеосодержимого в остальную часть пользовательского интерфейса, позволяя выполнять такие экзотические трюки, как размещение видеоокна на поверхности вращающегося трехмерного куба.
Стили и шаблоны
Стили позволяют стандартизировать форматирование и многократно использовать его по всему приложению. Шаблоны дают возможность изменить способ отображения элементов, даже таких основополагающих, как кнопки. Построение интерфейса с обложками еще никогда не было таким простым.
Команды
Большинству пользователей известно, что не имеет значения, откуда они инициируют команду открытия (Open) — через меню или панель инструментов; конечный результат один и тот же. Теперь эта абстракция доступна коду — можно определять команды приложения в одном месте и привязывать их к множеству элементов управления.
Декларативный пользовательский интерфейс
Хотя можно конструировать окно WPF в коде, в Visual Studio используется другой подход. Содержимое каждого окна сериализуется в виде XML-дескрипторов в документе XAML. Преимущество состоит в том, что пользовательский интерфейс полностью отделяется от кода, и дизайнеры графики могут использовать профессиональные инструменты для редактирования файлов XAML, улучшая внешний вид всего приложения. (XAML — это сокращение от Extensible Application Markup Language (расширяемый язык разметки приложений).)
Приложения на основе страниц
Используя WPF, можно строить браузер-подобные приложения, которые позволяют перемещаться по коллекции страниц, оснащенной кнопками навигации "вперед" и "назад". WPF автоматически обрабатывает все сложные детали, такие как хронология посещения страниц. Проект можно даже развернуть в виде браузерного приложения, которое выполняется внутри Internet Explorer.
Silverlight
Как и .NET Framework в целом, WPF представляет собой технологию, ориентированную на Windows. Это значит, что приложения WPF могут использоваться только на компьютерах, работающих под управлением операционной системы Windows. Приложения WPF, основанные на браузерах, ограничены аналогичным образом — они работают только на компьютерах Windows, хотя поддерживают браузеры и Internet Explorer, и Firefox.
Эти ограничения не изменятся: в конце концов, отчасти целью Microsoft в отношении WPF является использование широких возможностей компьютеров Windows и сохранение инвестиций в такие технологии, как DirectX. Однако технология Silverlight спроектирована как подмножество платформы WPF, работает в любом современном браузере (Firefox, Google Chrome и Safari) за счет использования подключаемого модуля, и открыта для других операционных систем, таких как Linux и Mac OS. Этот амбициозный проект вызвал значительный интерес среди разработчиков.
Во многих отношениях технология Silverlight основана на WPF и включает в себя многие соглашения WPF (наподобие разметки XAML). Тем не менее, Silverlight не охватывает ряд областей, среди которых трехмерная графика и отображение форматированных документов. В будущих выпусках Silverlight могут появиться некоторые новые средства, но наиболее сложные из них — вряд ли.
Конечной целью Silverlight является предоставление мощного ориентированного на разработчика конкурента Adobe Flash. Однако Flash обладает ключевым преимуществом — он используется в веб-приложениях повсеместно, и подключаемые модули Flash установлены почти везде. Чтобы заставить разработчиков перейти на новую, менее устоявшуюся технологию, Microsoft придется снабдить Silverlight средствами следующего поколения, обеспечить основательную совместимость и непревзойденную проектную поддержку.
Приложения на WPF
API-интерфейс WPF может использоваться для построения широкого разнообразия приложений с графическим интерфейсом, которые в основном отличаются структурой навигации и моделями развертывания. Ниже будут представлены их краткие описания.
Традиционные настольные приложения
Первая (и наиболее популярная) форма — это традиционная исполняемая сборка, которая запускается на локальной машине. Например, WPF можно использовать для построения текстового редактора, программы рисования или мультимедийной программы, такой как цифровой музыкальный проигрыватель, средство просмотра фотографий и т.п. Подобно любому другому настольному приложению, эти файлы *.ехе могут устанавливаться традиционными средствами (программами установки, пакетами Windows Installer и т.п.) или же посредством технологии ClickOnce, позволяющей распространять и устанавливать настольные приложения через удаленный веб-сервер.
Говоря языком программиста, этот тип приложений WPF использует (как минимум) типы Window и Application в дополнение к ожидаемому набору диалоговых окон, панелей инструментов, панелей состояния, систем меню и прочих элементов пользовательского интерфейса.
WPF позволяет строить как базовые, простые бизнес-приложения без каких-либо излишеств, так и встраивать средства подобного рода.
WPF-приложения на основе навигации
Приложения WPF могут также использовать структуру на основе навигации, которая позволяет традиционному настольному приложению вести себя подобно приложению веб-браузера. Применяя эту модель, можно построить настольную программу *.ехе, которая включает в себя кнопки "вперед" и "назад", позволяющие конечному пользователю перемещаться вперед и назад по различным экранам пользовательского интерфейса, именуемым страницами. Само приложение поддерживает список страниц и обеспечивает необходимую инфраструктуру для навигации по ним, попутно передавая данные и поддерживая список хронологии.
Для примера посмотрите на проводник Windows в котором используется эта функциональность. Обратите внимание, что кнопки навигации (и список хронологии) находятся в верхнем левом углу окна:
Несмотря на то что настольное приложение WPF может принимать веб-подобную схему навигации, помните, что это всего лишь вопрос дизайна пользовательского интерфейса. Само приложение остается в виде той же исполняемой сборки, запускаемой на настольной машине, и помимо внешнего сходства не имеет никакого отношения к веб-приложениям. Гoворя языком программистов, эта разновидность WPF-приложений построена с использованием таких типов, как Application, Page, NavigationWindow и Frame.