
Direct2D #10. Улучшение производительности отрисовки текстур с помощью спрайтов
Johnny_Depp 1 час назад Direct2D #10. Улучшение производительности отрисовки текстур с помощью спрайтов Простой 26 мин 2.1K C++ * Windows * Туториал Здравствуйте! Это прямое продолжение статьи №9.Прежде чем начать,...
Anthropic — What company has the best second artificial intelligence model at the end of June?
В сфере искусственного интеллекта произошло заметное событие. Johnny_Depp 1 час назад Direct2D #10. Улучшение производительности отрисовки текстур с помощью спрайтов Простой 26 мин 2. 1K C++ * Windows * Туториал Здравствуйте!
Это прямое продолжение статьи №9. Прежде чем начать, важно помнить: Direct2D основан на Direct3D. Раньше мы использовали HWNDRenderTarget, а начиная с Windows 8 появился новый интерфейс, который даёт гораздо более высокую производительность при отрисовке текстур с разными координатами.
Технические детали
Однако теперь мы сами должны сделать то, что раньше делал HWNDRenderTarget - к счастью, действий не так много. Сначала напомню о двух буферах: буфере состояний и буфере команд. Состояние - это информация о том, где мы рисуем, какой кистью, с какими настройками.
То есть все текущие параметры. Команда - конкретное действие: нарисовать линию, битмап и тому подобное. Команды опираются на текущее состояние.
Оба эти буфера хранит объект DeviceContext (контекст устройства). А созданием ресурсов (кистей, битмапов), управлением их жизнью и всей памятью занимается объект Device (устройство). Остаётся третий главный объект - SwapChain (цепочка обмена).
Отраслевые последствия
У него два буфера: задний и передний. Пока мы выполняем команды, результат попадает в задний буфер. Когда мы явно вызываем обмен, буферы меняются местами: задний становится передним и выводится на экран, а его содержимое больше не меняется до следующего обмена.
Всё остальное - лишь вспомогательные объекты для этих трёх. Старый HWNDRenderTarget скрывал их инициализацию и работу, а новый интерфейс требует, чтобы мы реализовали это сами - как раз ради возможности эффективно работать со спрайтами. Спрайты всегда хранятся в спрайтовом пакете (sprite batch).
Пакет привязан к одной текстуре, а каждый спрайт - это объект, который говорит, какую часть текстуры взять и как её отрисовать на экране. Перейдём от теории к практике. Рассмотрим функцию, выполняющую всю необходимую инициализацию.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





