Окно со скином: Win32 API и DirectX - PullRequest
1 голос
/ 11 марта 2012

Я пытаюсь создать окно без полей, используя окно в стиле WS_EX_LAYERED.Цель состоит в том, чтобы визуализировать графику, используя DirectX, непосредственно на рабочем столе, используя альфа-канал для смешивания с текущими окнами рабочего стола.

Теперь в моей системе эта техника, кажется, работает идеально.Я могу установить различные альфа-уровни и достичь разных уровней прозрачности.К сожалению, некоторые пользователи сообщили о серьезных проблемах с производительностью и низкой частотой кадров, что делает эту технику непригодной для использования.

Настройка кода следующая:

  1. Создание многоуровневого ( WS_EX_LAYERED расширенный стиль).
  2. Инициализируйте DirectX с помощью окна HWND.
  3. Создайте цель рендеринга, используя CreateRenderTarget Метод DirectX.

Затем во время цикла рендеринга:

  1. Визуализация графики для цели рендеринга с использованием вызовов DirectX.
  2. Получение дескриптора HDC для целевой поверхности рендеринга DirectX с помощью GetDC method.
  3. Обновите содержимое окна с помощью функции UpdateLayeredWindow , указав поверхность DirectX HDC.

Мой вопрос: я что-то не так делаю?Есть ли способ улучшить производительность окна обновления.Я пробовал разные вещи, такие как блокировка цели рендеринга и ручное копирование битов в раздел DIB для отображения в области окна, но безуспешно.

1 Ответ

0 голосов
/ 12 марта 2012

Насколько велико ваше окно?Обратите внимание, что в документации MSDN по адресу http://msdn.microsoft.com/en-us/library/windows/desktop/ms633556%28v=vs.85%29.aspx сказано: «Для лучшей производительности при рисовании многослойным окном и любыми нижележащими окнами многослойное окно должно быть как можно меньше».

Возможно, вы получите повышение производительности, есликомпозитинг (Aero) включен.Если Windows уже выполняет компоновку, ей не нужно будет делать столько дополнительной работы, чтобы рисовать многоуровневые окна.

Если вы не видите никакой разницы в производительности в зависимости от компоновки, то я, вероятно, совершенно не согласен.

...