Direct2D [1] — это интерфейс прикладного программирования (API) для векторной 2D- графики , разработанный Microsoft и реализованный в Windows 10 , [2] Windows 8 , Windows 7 и Windows Server 2008 R2 , а также Windows Vista и Windows Server 2008 (с обновлением платформы). установлен). [3]
Direct2D использует преимущества аппаратного ускорения с помощью графического процессора ( GPU ), который имеется в совместимых видеокартах персонального компьютера, планшета, смартфона и современного графического устройства. Он обеспечивает высокое качество изображения и высокую производительность рендеринга, сохраняя при этом полную совместимость с классическими графическими API Win32, такими как GDI /GDI+, и современными графическими API, такими как Direct3D . [4]
Direct2D — это API собственного кода , основанный на C++ , который может вызываться управляемым кодом и использует подход «облегченного COM » [5] , как и Direct3D , с минимальным количеством абстракции. Однако, в отличие от WPF и аналогично GDI/GDI+, Direct2D представляет собой API рендеринга «немедленного режима» с простыми вызовами BeginDraw/Draw/EndDraw; Direct2D не имеет понятия «сцены» и не использует сохраняемые древовидные структуры, а состояние рендеринга сохраняется между вызовами отрисовки.
Direct2D может минимизировать загрузку ЦП и использовать аппаратный рендеринг на видеокарте с минимальной поддержкой Direct3D Feature Level 9 с драйверами WDDM 1.1 . Приложения могут использовать его исключительно с ЦП, так называемый программный рендеринг, используя его вместе с WARP10 в ситуациях, когда аппаратные возможности недоступны, например, при работе на устройстве с минимальной поддержкой графического процессора, в терминальной службе , сеансе Windows. или когда рендеринг графики выполняется на удаленном сервере, а графический результат отправляется обратно на клиентское устройство. Производительность Direct2D и использование памяти линейно масштабируются в зависимости от количества примитивов как в программном, так и в аппаратном обеспечении.
Direct2D [6] [7] поддерживает высококачественный рендеринг со следующими ключевыми функциями:
Direct2D обеспечивает полную совместимость с GDI, GDI+ и позволяет выполнять рендеринг на поверхность Direct3D и с нее, а также в контекст устройства GDI/GDI+ (HDC) и обратно. Его можно эффективно использовать вместе с компонентом Windows Imaging (WIC) для кодирования/декодирования изображений, а также с DirectWrite для форматирования текста и обработки шрифтов. Такая совместимость позволяет разработчикам постепенно заменять критические участки кода кодом Direct2D без необходимости переделки всего исходного кода. Во времена Windows 10 Microsoft разработала проект с открытым исходным кодом под названием Win2D для дальнейшего упрощения использования Direct2D и DirectWrite в приложении универсальной платформы Windows (UWP). Win2D — это высокоэффективная оболочка WinRT для Direct2D и DirectWrite, разработанная с нуля для полной интеграции с элементом управления XAML Canvas, сохраняя при этом мощность базовой графической подсистемы.
Обновленная версия Direct2D была запущена вместе с Windows 8 в октябре 2012 года. [8] Она также была перенесена в Windows 7 SP1 (но не в Windows Vista) через обновление платформы Windows 7 . [9] [10] [11] Исходная версия Direct2D была привязана к DirectX 11 (аппаратно используется вплоть до Direct3D 10.1), тогда как эта версия Direct2D интегрируется с DirectX 11.1. [9] В Windows 8 также добавлена совместимость между XAML и Direct2D, а также компонентами Direct3D, которые можно смешивать в приложении. [12]
В октябре 2013 года в Direct2D с Windows 8.1 были добавлены новые функции : [13] Реализация геометрии, [14] API эффектов Direct2D, [15] [16] [17] API списка команд, многопоточные API, приоритет рендеринга для каждого устройства, поддержка Изображения JPEG YCbCr для меньшего объема памяти и поддержки форматов блочного сжатия (файлы DDS).
Выпуск Windows 10 в июле 2015 года принес важные обновления и новые функции для Direct2D, такие как повышение производительности рендеринга масштабируемого текста без растеризации шрифта , возможность загрузки необходимого шрифта из облака по требованию без необходимости этапа установки шрифта, оптимизация. для более быстрой загрузки изображений и рендеринга эффектов изображения, а также для более сложного способа применения градиентной кисти с помощью 2D-сетки, состоящей из участков градиента. В этом выпуске также представлено совершенно новое расширение API для поддержки цифрового рукописного ввода, которое активно используется браузером Microsoft Edge , а также элементом управления XAML Ink Canvas .
В своей статье 2012 года о конкурирующем расширении OpenGL для рендеринга путей NV Марк Килгард и Джефф Больц объясняют (и критикуют) внутреннюю структуру Direct2D следующим образом: «Direct2D работает путем преобразования путей в ЦП, а затем выполнения ограниченной трапециевидной тесселяции каждого пути. Результатом является набор трапеций в пространстве пикселей и дополнительная затененная геометрия для расчета дробного покрытия для левого и правого краев трапеций. Эти трапеции и затененная геометрия затем растеризуются графическим процессором. Полученная производительность обычно лучше, чем полностью процессорная. основаны на подходах и не требует вспомогательного хранилища для мультисэмплирования или состояния трафарета ; Direct2D выполняет рендеринг непосредственно в псевдонимный фреймбуфер с правильно сглаженными результатами. Основной недостаток Direct2D заключается в том, что конечная производительность определяется не графическим процессором (выполняющим довольно тривиальную растеризацию), а скорее ЦП выполняет преобразование и трапециевидную тесселяцию каждого пути, а также работу по проверке Direct3D». [18]
В июле 2012 года команда Windows 8 опубликовала в блоге Стивена Синофски следующее : «Чтобы улучшить производительность рендеринга геометрии в Windows 8, мы сосредоточились на снижении затрат ЦП, связанных с тесселяцией, двумя способами. Во-первых, мы оптимизировали нашу реализацию тесселяции. при рендеринге простых геометрических объектов, таких как прямоугольники, линии, прямоугольники со скругленными углами и эллипсы». [19] Эти типичные оптимизации утверждают, что улучшают производительность в диапазоне от 184% до 438%, в зависимости от примитива. Далее в сообщении говорилось: «Во-вторых, чтобы повысить производительность при рендеринге неправильной геометрии (например, географических границ на карте), мы используем новую функцию графического оборудования под названием Target Independent Rasterization или TIR. TIR позволяет Direct2D тратить меньше циклов процессора на тесселяцию, поэтому он может передавать инструкции по рисованию графическому процессору более быстро и эффективно, не жертвуя качеством изображения. TIR доступен в новом оборудовании графического процессора, разработанном для Windows 8 и поддерживающем DirectX 11.1». [19] За этим последовал тест с использованием около 15 SVG , в котором было заявлено улучшение производительности в диапазоне от 151% до 523%. В заключение раздела говорилось: «Мы тесно сотрудничали с нашими партнерами по графическому оборудованию при разработке TIR. Благодаря этому партнерству стали возможны значительные улучшения. Аппаратное обеспечение DirectX 11.1 уже сегодня на рынке, и мы работаем с нашими партнерами, чтобы обеспечить большее количество TIR- мощные продукты будут широко доступны». [19]
Функция TIR была среди тех, которые вызвали «войну слов» между Nvidia и AMD примерно в декабре 2012 года, поскольку семейство графических процессоров Nvidia Kepler не поддерживает ее, тогда как GCN AMD поддерживает. [20] В ответ на требования клиентов сотрудник службы поддержки Nvidia сообщил, что TIR невозможно просто реализовать на уровне драйвера, а требует нового оборудования; [21] [22] Таким аппаратным обеспечением является архитектура Maxwell 2 , представленная в сентябре 2014 года. [23]
В Windows 8.1 Direct2D может использовать аппаратные тесселяторы Direct3D11, но только в сочетании с D2D1_FILL_MODE_ALTERNATE
. Если используется другой режим заполнения (например D2D1_FILL_MODE_WINDING
, ), то Direct2D возвращается к тесселяции на ЦП, но по-прежнему использует TIR для сглаживания (если TIR доступен). Поскольку аппаратная тесселяция доступна в базовом Direct3D11 (не обязательно 11.1), Microsoft заявила о значительном улучшении производительности с помощью Direct2D в Windows 8.1 (по сравнению с Windows 8) на оборудовании, отличном от TIR. [24]
Internet Explorer 9 и более поздние версии используют Direct2D и DirectWrite для повышения производительности и качества изображения. [25] [26] [27] Поддержка Direct2D была добавлена в альфа-версию Firefox 3.7, что примерно удвоило скорость рендеринга. [28] (В Firefox 4 также добавлена поддержка DirectWrite, но для некоторых шрифтов в Firefox 7 она стала нестандартной из-за жалоб пользователей на качество рендеринга. [29] Google Chrome использует собственную 2D-библиотеку под названием Skia , которая, в свою очередь, выполняет рендеринг. через ANGLE в Windows. [30] ) В Firefox 70.0 на старом оборудовании Direct2D отключен для старых графических драйверов, занесенных в черный список, если в них отсутствуют функции и область затемнена, например, в Картах Google . [31]
Летом 2012 года Питер Брайт из Ars Technica отметил, что «большинство настольных приложений не используют Direct2D». [32]
Microsoft Office 2013 поддерживает Direct2D+DirectWrite или GDI+ Uniscribe для рендеринга дисплея и типографики. [33]
{{cite web}}
: |author=
имеет общее имя ( справка )CS1 maint: несколько имен: список авторов ( ссылка ) CS1 maint: числовые имена: список авторов ( ссылка ){{cite web}}
: CS1 maint: числовые имена: список авторов ( ссылка )