System.Windows.Media.RenderCapability.Tier возвращает не режим рендеринга

2

Я использую 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. Однако изменения применяются к приложению. Если я смотрю с Perforator, режим рендеринга был изменен на желаемый режим.

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

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

Теги:
wpf

1 ответ

2
Лучший ответ

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

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню