Direct2D [1] - это программный интерфейс приложения (API) для 2D- векторной графики, разработанный Microsoft и реализованный в Windows 10 , [2] Windows 8 , Windows 7 и Windows Server 2008 R2 , а также в Windows Vista и Windows Server 2008 (с Platform Update установлены). [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. 0 , или когда визуализация графики выполняется на удаленном сервере, а графический результат отправляется обратно на клиентское устройство. Производительность Direct2D и использование памяти линейно масштабируются с учетом примитивов как в программном, так и в аппаратном обеспечении.
Direct2D [6] [7] поддерживает высококачественный рендеринг со следующими ключевыми функциями:
- Высококачественный рендеринг субпиксельного текста с помощью DirectWrite как для оттенков серого, так и для метода ClearType
- Перпримитивное сглаживание
- Рисование и заливка геометрии Безье
- Богатые геометрические операции (например, логические операции , расширение пути, очертание и т. Д.)
- Композитные слои
- Примитивные режимы наложения (например, исходный код, исходное копирование, минимальное смешение и т. Д.)
- Встроенные и настраиваемые эффекты изображения для настройки фотографий, графического преобразования и преобразования цвета
- Градиентная кисть и сетка
- Список команд для буферизации и печати команд
- Масштабируемый росчерк
- Пакет спрайтов для разработки игр
Direct2D обеспечивает полную совместимость с GDI, GDI + и разрешает рендеринг на поверхность Direct3D и из нее, а также в контекст устройства GDI / GDI + (HDC) и из него. Его можно эффективно использовать вместе с Windows Imaging Component (WIC) для кодирования / декодирования изображений и с DirectWrite для форматирования текста и обработки шрифтов. Такая совместимость позволяет разработчикам постепенно заменять критические пути кода кодом Direct2D без необходимости капитального ремонта всего исходного кода. В рамках Windows 10 проект с открытым исходным кодом под названием Win2D был разработан Microsoft для дальнейшего упрощения использования Direct2D и DirectWrite в приложении универсальной платформы Windows (UWP). Win2D - это высокоэффективная оболочка WinRT для Direct2D и DirectWrite, разработанная с нуля для бесшовной интеграции с элементом управления XAML Canvas при сохранении мощности базовой графической подсистемы.
Последующие версии
Direct2D 1.1
Обновленная версия 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]
Direct2D 1.2
В октябре 2013 года в Direct2D с Windows 8.1 были добавлены новые функции : [13] реализации геометрии , [14] API эффектов Direct2D, [15] [16] [17] API списка команд, многопоточные API-интерфейсы, приоритет рендеринга для каждого устройства, поддержка Изображения JPEG YCbCr для меньшего объема памяти и поддержки блочно-сжатых форматов (файлов DDS).
Direct2D 1.3
Выпуск Windows 10 в июле 2015 года принес важные обновления и новые функции для Direct2D, такие как повышение производительности рендеринга масштабируемого текста без растеризации шрифтов , возможность загрузки необходимого шрифта из облака по запросу без необходимости установки шрифта, оптимизация для более быстрой загрузки изображений и рендеринга эффектов изображения, а также более сложного способа применения кисти градиента с использованием 2D-сетки, состоящей из градиентных пятен. В этом выпуске также было представлено совершенно новое расширение API для поддержки цифровых рукописных данных, которое широко используется в новом браузере Microsoft Edge, а также в новом элементе управления XAML ink Canvas .
Выполнение
В своей статье 2012 года о конкурирующем расширении OpenGL рендеринга путей NV Марк Килгард и Джефф Больц объясняют (и критикуют) внутреннее устройство Direct2D следующим образом: «Direct2D работает, преобразуя пути в ЦП и затем выполняя ограниченную трапециевидную тесселяцию каждого пути. Результатом является набор трапеций в пиксельном пространстве и дополнительная закрашенная геометрия для вычисления дробного покрытия для левого и правого краев трапеций. Эти трапеции и закрашенная геометрия затем растрируются графическим процессором. В результате производительность обычно лучше, чем полностью CPU- основанные на подходах и не требуют вспомогательного хранилища для мультисэмплов или состояний трафарета ; 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 не поддерживает ее, в то время как AMD GCN поддерживает. [20] В ответ на запросы клиентов сотрудник службы поддержки Nvidia сообщил, что TIR не может быть просто реализован на уровне драйвера, но требует нового оборудования; [21] [22] Максвелл 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 Maps . [31]
Питер Брайт из Ars Technica летом 2012 года отметил, что «большинство настольных приложений не используют Direct2D». [32]
Microsoft Office 2013 поддерживает Direct2D + DirectWrite или GDI + Uniscribe для визуализации дисплея и типографики. [33]
Смотрите также
- DirectX
- Direct3D
- Cairo - кроссплатформенная библиотека векторной графики
- OpenVG
- Простая и быстрая мультимедийная библиотека
- Starling Framework
- Кварц 2D
Рекомендации
- ^ https://msdn.microsoft.com/en-us/library/windows/desktop/dd370990(v=vs.85).aspx
- ^ «Что нового в Direct2D и DirectWrite для Windows 10 (канал 9)» . Канал 9 . Проверено 3 декабря 2015 .
- ^ «Обновленный Direct2D в марте DirectX SDK - Блог Тома - Домашняя страница сайта - Блоги TechNet» . blogs.technet.com. 2009-03-24 . Проверено 26 декабря 2011 .
- ^ «Direct2D» . MSDN . Проверено 26 декабря 2011 .
- ^ https://stackoverflow.com/questions/38174095/what-exactly-is-lightweight-com
- ^ https://msdn.microsoft.com/en-us/library/windows/desktop/ff729481(v=vs.85).aspx
- ^ https://msdn.microsoft.com/en-us/library/windows/desktop/dd756766(v=vs.85).aspx
- ^ https://msdn.microsoft.com/en-us/library/windows/hardware/dn653328(v=vs.85).aspx#tir
- ^ а б «Windows с C ++ - знакомство с Direct2D 1.1» . Msdn.microsoft.com. 2014-05-02 . Проверено 9 августа 2014 .
- ^ «Обновление платформы для Windows 7 (Windows)» . Msdn.microsoft.com . Проверено 9 августа 2014 .
- ^ Пуйя Эймандар (2013). DirectX 11.1 Программирование игр . Packt Publishing Ltd. стр. 45. ISBN 978-1-84969-481-0.
- ^ http://blogs.msdn.com/b/windowsappdev/archive/2012/03/15/combining-xaml-and-directx.aspx
- ^ https://msdn.microsoft.com/en-us/library/windows/desktop/hh802478(v=vs.85).aspx
- ^ https://msdn.microsoft.com/en-us/library/windows/desktop/dn363632(v=vs.85).aspx
- ^ https://msdn.microsoft.com/en-us/library/windows/desktop/hh973240(v=vs.85).aspx
- ^ https://msdn.microsoft.com/en-us/library/windows/desktop/hh706316(v=vs.85).aspx
- ^ https://msdn.microsoft.com/en-us/library/windows/desktop/hh973241(v=vs.85).aspx
- ^ Килгард, Марк Дж. (2012). «Рендеринг траектории с ускорением на GPU». Транзакции ACM на графике . 31 (6): 1–10. DOI : 10.1145 / 2366145.2366191 .
- ^ a b c Роб Коупленд, при участии Шрирама Субраманиана, Дэна Маклахлана, Кам Ведбрата, Стива Лим и Джианье Лу, а также введение Стивена Синофски. Оборудование, ускоряющее все: графика Windows 8
- ^ «Словесная война между NVIDIA и AMD из-за поддержки DirectX 11.1 продолжается» . Аппаратные Кэнакс. 2012-12-17 . Проверено 9 августа 2014 .
- ^ https://forums.geforce.com/default/topic/511499/geforce-drivers/give-us-dx11-1-driver-support-on-dx11-cards-no-new-hardware-is-required-for -dx11-1 / post / 3642626 / # 3642626
- ^ http://nvidia.custhelp.com/app/answers/detail/a_id/3196/~/fermi-and-kepler-directx-api-support
- ^ http://www.anandtech.com/show/8526/nvidia-geforce-gtx-980-review/4
- ^ http://channel9.msdn.com/Events/Build/2013/3-191 с 19:00 до 20:00 и с 55:00 до 56:30
- ^ Тим, 11 августа 2010 г. Следуйте за Тимом в Твиттере (2010-08-11). «Firefox 4 такой же психоделический, как и IE9 с включенным Direct2D« ITWriting Тима Андерсона » . Itwriting.com . Проверено 6 августа 2014 .CS1 maint: несколько имен: список авторов ( ссылка )
- ^ Шенкленд, Стивен (25 марта 2014 г.). «Firefox 4 beta 4 добавляет аппаратное ускорение» . CNET . Проверено 6 августа 2014 .
- ^ Mozilla бросает вызов Року новой жесткости Microsoft • The Register
- ^ Опубликовано 27 ноября 2009 г. Гаретом Халфакри (27 ноября 2009 г.). «Firefox 3.7 получает поддержку Direct2D» . bit-tech.net . Проверено 9 августа 2014 .
- ^ «Графические элементы» Архив блога »Отрисовка текста DirectWrite в Firefox 6» . Blog.mozilla.org. 2011-08-11. Архивировано из оригинала на 2014-08-10 . Проверено 9 августа 2014 .
- ^ «Композитинг с ускорением графического процессора в Chrome - проекты Chromium» . Проверено 6 августа 2014 .
- ^ Баклер, Крэйг (2011-12-20). «Как включить WebGL для заблокированных видеокарт в Firefox» . Проверено 21 октября 2019 .
- ^ Брайт, Питер (2012-07-24). «Ускорение графического процессора в Windows 8: хорошие новости для Metro» . Ars Technica . Проверено 9 августа 2014 .
- ^ «Office принимает новую технологию отображения Windows - Мюррей Сарджент: математика в офисе - Домашняя страница сайта - Блоги MSDN» . Blogs.msdn.com. 2012-07-29 . Проверено 9 августа 2014 .
Внешние ссылки
- Главная страница Direct2D в MSDN со ссылками на руководство по программированию , новые функции в Windows 8.1 , совместимость с Direct3D и т. Д.
- Блог ведущего разработчика Direct2D Томаса Олсена
- Блог разработчика Direct2D Тома Малкахи
- Windows 7: знакомство с Direct2D и DirectWrite - видео PDC 2008
- Пакет кода Windows API для Microsoft .NET Framework - позволяет разрабатывать приложения Direct2D в управляемом коде.
- Представляем Direct2D - выпуск журнала MSDN Magazine за июнь 2009 г.
- Рисование с помощью Direct2D - выпуск журнала MSDN Magazine за сентябрь 2009 г.
- Direct2D API для Microsoft .Net Framework 4 - Direct2D API для Microsoft .Net Framework 4
- Приложение USPTO для целевой независимой растеризации
- Руководство по миграции Direct2D 1.1 для разработчиков Windows 7
- Чарльз Петцольд «сек колонке на DirectX имеет несколько статей по Direct2D , начиная от вводных них , как Треугольники и тесселяции или Direct2D геометрий и их Манипуляции более продвинутых , как Finger Картина с Direct2D геометрий , 2D - портал в 3D мир , и т.д.