System.Windows.Media.RenderCapability.Tier возвращает не режим рендеринга - PullRequest
2 голосов
/ 17 июня 2010

использую System.Windows.Media.RenderCapability.Tier , чтобы показать текущий режим рендеринга на панели диагностики моего приложения. Если я заставлю приложение (3.5sp1) изменить режим рендеринга с помощью следующего кода

HwndSource hwndSource = PresentationSource.FromVisual(visual) as System.Windows.Interop.HwndSource;
HwndTarget hwndTarget = hwndSource.CompositionTarget;
hwndTarget.RenderMode = renderMode;

не срабатывает ни System.Windows.Media.RenderCapability.TierChanged, ни свойство System.Windows.Media.RenderCapability.Tier не изменялось. Однако изменения применяются к приложению. Если я смотрю с Перфоратор , режим рендеринга был изменен на нужный режим.

Хотя во многих местах я обнаружил, что System.Windows.Media.RenderCapability.Tier может использоваться для определения текущего состояния рендеринга (также msdn, см. this ), похоже, System.Windows .Media.RenderCapability дает только информацию о возможностях, а не о текущем режиме. Это также имеет смысл, если я посмотрю на название класса.

Есть ли другой источник, чтобы узнать, как отображается фактический wpf-контент, или я что-то не так делаю?

1 Ответ

2 голосов
/ 17 июня 2010

Просто объедините RenderCapability.Tier и HwndTarget.RenderMode вместе, и вы получите то, что ищете:

  • RenderCapability.Tier сообщает вам, что поддерживает текущая графическая карта
  • HwndTarget.RenderMode сообщает вам, будет ли WPF фактически использовать графический процессор или нет

RenderCapability.Tier изменяется и запускается TierChanged каждый раз, когда поверхность Direct3D переключается на новую видеокарту (например, при перетаскивании окна между мониторами или переключении дисплея на новый монитор).

HwndTarget.RenderMode изменяется только кодом пользователя, но не имеет механизма уведомления о его изменении. Если вы устанавливаете его только в одном месте, вы можете просто уведомить оттуда, в противном случае вам может понадобиться использовать таймер для периодической проверки.

В основном, если HwndTarget.RenderMode == RenderMode.Default и RenderCapability.Tier достаточно высок, у вас аппаратное ускорение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...