Как Вы определяете, использует ли WPF Рендеринг программного обеспечения или Аппаратные средства?

Взгляните на фильтр groupBy, чтобы сгруппировать элементы в 3 группы.

https://github.com/a8m/angular-filter#groupby

31
задан rudigrobler 24 October 2008 в 06:47
поделиться

7 ответов

Проверьте RenderCapability. Уровень

[ ОБНОВЛЕНИЕ ]

  • RenderCapability. IsPixelShaderVersionSupported - Получает значение, которое указывает, поддерживается ли указанная версия пиксельного шейдера.
  • RenderCapability. IsShaderEffectSoftwareRenderingSupported - Получает значение, которое указывает, может ли система представить растровые эффекты в программном обеспечении.
  • RenderCapability. Уровень - Получает значение, которое указывает на уровень рендеринга для текущего потока.
  • RenderCapability. TierChanged - Происходит, когда уровень рендеринга изменился для объекта Диспетчера текущего потока.

RenderCapability. Уровень>> 16

  • Уровень Рендеринга 0 - Никакое ускорение аппаратного обеспечения машинной графики. Уровень версии DirectX является меньше, чем Уровень Рендеринга версии 7.0.
  • 1 - Частичное ускорение аппаратного обеспечения машинной графики. Уровень версии DirectX больше, чем или равен версии 7.0 и меньше, чем Уровень Рендеринга версии 9.0.
  • 2 - Большинство графических функций использует ускорение аппаратного обеспечения машинной графики. Уровень версии DirectX больше, чем или равен версии 9.0.
35
ответ дан 27 November 2019 в 22:04
поделиться

На основе ссылки RenderingTier , вот некоторый код:

        logger.InfoFormat("WPF Tier = {0}",RenderCapability.Tier / 0x10000);
        RenderCapability.TierChanged +=
            (sender, args) => logger.InfoFormat("WPF Tier Changed to {0}",
                                                RenderCapability.Tier / 0x10000);

я все еще тестирую и работаю над этим. Посмотрите будущие редактирования/ответы для того, что я нахожу.

6
ответ дан 27 November 2019 в 22:04
поделиться

Возможно, следующее может помочь со второй частью Вашего вопроса, то есть, можете Вы вызывать один конвейер рендеринга по другому:

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

Одна очевидная вещь отметить здесь, хотя... то, что это влияет весь приложения WPF и действительно должно только использоваться для тестирования.

Для отключения аппаратного ускорения:

[HKEY_CURRENT_USER\Software\Microsoft\Avalon.Graphics]
"DisableHWAcceleration"=dword:00000001

Для включения аппаратного ускорения:

[HKEY_CURRENT_USER\Software\Microsoft\Avalon.Graphics]
"DisableHWAcceleration"=dword:00000000

Выезд этот ссылка MSDN для большего количества информации

6
ответ дан 27 November 2019 в 22:04
поделиться

Или используйте Профильные Инструменты ...

флажок New был добавлен для расцветки элементов целевого приложения, которые используют представленные Растровые эффекты SW прежней версии.

4
ответ дан 27 November 2019 в 22:04
поделиться

Для ответа на вторую половину вопроса нет никакого способа, которым я верю действительно для пробиваний по другому. Аппаратный рендеринг автоматически используется при наличии, иначе, программное обеспечение.

, Если необходимо протестировать его в Программном режиме, необходимо будет использовать низкую машину спецификации или использовать Удаленный рабочий стол для просмотра приложения, работающего на другом компьютере. Кроме уменьшенного performance/framerate однако, не должно быть никаких видимых различий по внешности между двумя. Используйте класс RenderCapability, чтобы знать, необходимо ли запретить вещи, такие как анимация или эффекты в пользу производительности.

1
ответ дан 27 November 2019 в 22:04
поделиться

Я согласен со вторым ответом, но он просто кое-что говорит о способности машины работать с использованием hw-рендеринга, а не если приложение действительно hw-рендерингом.

Я сделал простое приложение, используя холст и просто вращение прямоугольника с помощью RotateTransform требует много ресурсов процессора для визуализированного приложения. Это и значение 'RenderCapability.Tier' равно 2, так что у него достаточно возможностей для этого.

Почему тогда нет?

1
ответ дан 27 November 2019 в 22:04
поделиться

.NET 4.0 предоставляет возможность принудительного программного рендеринга в коде:

public partial class App : Application 
{    
    protected override void OnStartup(StartupEventArgs e)    
    {         
        if (WeThinkWeShouldRenderInSoftware())            
            RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly;    
    }
}

См. этот пост для получения дополнительной информации.

11
ответ дан 27 November 2019 в 22:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: