Обзор графической архитектуры Windows
Windows предоставляет несколько API C++/COM для графики. Эти API показаны на следующей схеме.
- Интерфейс графических устройств (GDI) — это исходный графический интерфейс для Windows. GDI был сначала написан для 16-разрядной версии Windows, а затем обновлен для 32-разрядной и 64-разрядной версий Windows.
- GDI+ был представлен в Windows XP в качестве преемника GDI. Доступ к библиотеке GDI+ осуществляется через набор классов C++, которые упаковывают неструктурированные функции C. Платформа .NET Framework также предоставляет управляемую версию GDI+ в пространстве имен System.Drawing.
- Direct3D поддерживает трехмерную графику.
- Direct2D — это современный API для двухмерной графики, который является преемником GDI и GDI+.
- DirectWrite — это механизм разметки текста и растеризации. Для рисования растрированного текста можно использовать GDI или Direct2D.
- Инфраструктура графики DirectX (DXGI) выполняет низкоуровневые задачи, такие как представление кадров для вывода. Большинство приложений не используют DXGI напрямую. Скорее, он служит промежуточным слоем между графическим драйвером и Direct3D.
Direct2D и DirectWrite появились в Windows 7. Они также доступны для Windows Vista и Windows Server 2008 через обновление платформы. Дополнительные сведения см. в разделе Обновление платформы для Windows Vista.
В этом модуле основное внимание уделяется Direct2D. Хотя И GDI, и GDI+ по-прежнему поддерживаются в Windows, для новых программ рекомендуется использовать Direct2D и DirectWrite. В некоторых случаях сочетание технологий может быть более практичным. В таких ситуациях Direct2D и DirectWrite предназначены для взаимодействия с GDI.
В следующих разделах описываются некоторые преимущества Direct2D.
Аппаратное ускорение
Термин "аппаратное ускорение " относится к вычислениям графики, выполняемым графическим процессором (GPU), а не ЦП. Современные GPU хорошо оптимизированы для типов вычислений, используемых при отрисовке графики. Как правило, чем больше эта работа перемещается с ЦП на GPU, тем лучше.
Хотя GDI поддерживает аппаратное ускорение для определенных операций, многие операции GDI привязаны к ЦП. Direct2D размещен поверх Direct3D и использует все преимущества аппаратного ускорения, предоставляемого GPU. Если GPU не поддерживает функции, необходимые для Direct2D, Direct2D возвращается к программной отрисовке. В большинстве случаев Direct2D опережает GDI и GDI+.
Прозрачность и сглаживание
Direct2D поддерживает полностью аппаратное ускорение альфа-смешивания (прозрачность).
GDI имеет ограниченную поддержку альфа-смешения. Большинство функций GDI не поддерживают альфа-смешение, хотя GDI поддерживает альфа-смешение во время операции bitblt. GDI+ поддерживает прозрачность, но альфа-смешивание выполняется ЦП, поэтому аппаратное ускорение не дает преимуществ.
Альфа-смешивание с аппаратным ускорением также обеспечивает сглаживание. Псевдоним — это артефакт, вызванный выборкой непрерывной функции. Например, если изогнутая линия преобразуется в пиксели, псевдонимы могут вызвать зубчатый вид. Любой способ уменьшения артефактов, вызванных псевдонимом, считается формой сглаживания. В графике сглаживание выполняется путем смешивания ребер с фоном. Например, вот круг, нарисованный GDI, и тот же круг, нарисованный Direct2D.
На следующем рисунке показаны подробные сведения о каждом круге.
Круг, нарисованный GDI (слева), состоит из черных пикселей, которые приблизительные к кривой. Круг, нарисованный Direct2D (справа), использует смешение для создания более гладкой кривой.
GDI не поддерживает сглаживание при рисовании геометрии (линий и кривых). GDI может рисовать сглаживаемый текст с помощью ClearType; но в противном случае текст GDI также имеет псевдоним. Псевдонимы особенно заметны для текста, так как зубчатые линии нарушают оформление шрифта, что делает текст менее удобочитаемым. Хотя GDI+ поддерживает сглаживание, он применяется ЦП, поэтому производительность не так высока, как Direct2D.
Векторная графика
Direct2D поддерживает векторную графику. В векторной графике математические формулы используются для представления линий и кривых. Эти формулы не зависят от разрешения экрана, поэтому их можно масштабировать до произвольных размеров. Векторная графика особенно полезна, когда необходимо масштабировать изображение для поддержки различных размеров мониторов или разрешений экрана.
Следующая