Поделиться через


Обзор архитектуры графики Windows

Windows предоставляет несколько API C++/COM для графики. Эти API показаны на следующей схеме.

схема, показывающая графические API Windows.

  • Интерфейс графического устройства (GDI) — это исходный графический интерфейс для Windows. GDI сначала была написана для 16-разрядной Windows, а затем обновлена для 32-разрядной и 64-разрядной Windows.
  • GDI+ появился в Windows XP в качестве преемника GDI. Доступ к библиотеке GDI+ осуществляется через набор классов C++, которые упаковывают неструктурированные функции C. Платформа .NET Framework также предоставляет управляемую версию GDI+ в пространстве имен System.Drawing.
  • Direct3D поддерживает трехмерную графику.
  • Direct2D — это современный API для 2-D графики, преемник GDI и GDI+.
  • DirectWrite — это движок для текстовой компоновки и растеризации. Для рисования растрового текста можно использовать GDI или Direct2D.
  • Инфраструктура графики DirectX (DXGI) выполняет низкоуровневые задачи, например представление кадров для выходных данных. Большинство приложений напрямую не используют DXGI. Скорее, он служит промежуточным слоем между графическим драйвером и Direct3D.

Direct2D и DirectWrite появились в Windows 7. Они также доступны для Windows Vista и Windows Server 2008 с помощью обновления платформы. Дополнительные сведения см. в обновлении платформы для Windows Vista.

Direct2D — это фокус этого модуля. Хотя в Windows продолжаются поддержка как GDI, так и GDI+, для новых программ рекомендуется использовать Direct2D и DirectWrite. В некоторых случаях сочетание технологий может оказаться более практическим. В этих ситуациях Direct2D и DirectWrite предназначены для взаимодействия с GDI.

В следующих разделах описаны некоторые преимущества Direct2D.

Аппаратное ускорение

Термин аппаратного ускорения относится к вычислениям графики, выполняемым единицей обработки графики (GPU), а не ЦП. Современные графические процессоры оптимизированы для типов вычислений, используемых при отрисовке графики. Как правило, чем больше эта работа перемещается с ЦП на GPU, тем лучше.

Хотя GDI поддерживает аппаратное ускорение для определенных операций, многие операции GDI привязаны к ЦП. Direct2D находится на уровне Direct3D и полностью использует аппаратное ускорение, предоставляемое GPU. Если GPU не поддерживает функции, необходимые для Direct2D, Direct2D возвращается к отрисовке программного обеспечения. В целом, Direct2D опережает GDI и GDI+ в большинстве ситуаций.

Прозрачность и сглаживание

Direct2D поддерживает полностью аппаратное ускорение альфа-смешивания (прозрачность).

GDI имеет ограниченную поддержку альфа-смешивания. Большинство функций GDI не поддерживают альфа-смешивание, хотя GDI поддерживает альфа-смешивание во время операции BitBlt. GDI+ поддерживает прозрачность, но альфа-смешивание выполняется с помощью ЦП, поэтому этот процесс не получает преимуществ от аппаратного ускорения.

Аппаратное ускорение альфа-смешивания также позволяет использовать сглаживание. Алиасинг является искажением, вызванным дискретизацией непрерывной функции. Например, при преобразовании изогнутой линии в пиксели алиасинг может вызвать зазубренный вид. Любой метод, который уменьшает искажения, вызванные алиасингом, считается формой антиалиасинга. В графике сглаживание выполняется путем смешивания границ с фоном. Например, вот круг, рисуемый GDI, и тот же круг, нарисованный Direct2D.

иллюстрацию методов сглаживания в Direct2D.

На следующем рисунке показана подробная информация о каждом круге.

подробные сведения о предыдущем изображении.

Круг, нарисованный GDI (слева), состоит из черных пикселей, приблизительных к кривой. Круг, нарисованный Direct2D (справа), использует смешение для создания более гладкой кривой.

GDI не поддерживает сглаживание при отрисовке геометрических фигур (линий и кривых). GDI может рисование антиисредованного текста с помощью ClearType; но в противном случае текст GDI также является псевдонимом. Зубчатость особенно заметна при отображении текста, так как зазубренные линии нарушают дизайн шрифта, делая текст менее читаемым. Хотя GDI+ поддерживает сглаживание, оно применяется центральным процессором, поэтому производительность не так хороша, чем у Direct2D.

Векторная графика

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

Далее

диспетчер окон рабочего стола