¿Cómo se determina si WPF está utilizando Renderizado por Hardware o Software?


Estoy comparando una aplicación WPF en varias plataformas y necesito una manera fácil de determinar si WPF está utilizando renderizado por hardware o software.

Me parece recordar una llamada para determinar esto, pero no puedo poner mis manos sobre él en este momento.

Además, ¿hay una forma sencilla, basada en código, de forzar una canalización de renderizado sobre la otra?

Author: rudigrobler, 2008-09-29

7 answers

Compruebe la capacidad de renderizado.Nivel

[UPDATE]

  • RenderCapability.IsPixelShaderVersionSupported - Obtiene un valor que indica si la versión de sombreado de píxel especificada es apoyar.
  • RenderCapability.IsShaderEffectSoftwareRenderingSupported - Obtiene un valor que indica si el sistema puede renderizar efectos de mapa de bits en software.
  • RenderCapability.Tier - Obtiene un valor que indica el nivel de procesamiento para el subproceso actual.
  • RenderCapability.TierChanged - Ocurre cuando el nivel de renderizado ha cambiado para el objeto Dispatcher del subproceso actual.

Capacidad de representación.Grada >> 16

  • Renderización de nivel 0 - Sin aceleración de hardware de gráficos. El nivel de versión de DirectX es menor que la versión 7.0.
  • Renderización de nivel 1 - Aceleración parcial de hardware de gráficos. El nivel de versión de DirectX es mayor o igual a la versión 7.0, y menor que la versión 9.0.
  • Renderización de nivel 2 - La mayoría de las características gráficas utilizan aceleración de hardware de gráficos. El nivel de versión de DirectX es mayor o igual a la versión 9.0.
 33
Author: rudigrobler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-01 00:57:37

. NET 4.0 proporciona la capacidad de forzar la representación de software en código:

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

Ver este post para más información.

 11
Author: user259509,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-19 15:56:04

Basado en los enlaces RenderingTier , aquí hay un código:

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

Todavía estoy probando y trabajando en esto. Ver ediciones futuras / respuestas para lo que encuentro.

 6
Author: Chasler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:31:12

Tal vez lo siguiente pueda ayudar con la segunda parte de su pregunta, es decir, puede forzar una canalización de renderizado sobre otra:

Puede cambiar una configuración del registro para deshabilitar la aceleración de hardware y forzar la representación de software en todo momento. A menudo usamos esto para ver si estamos viendo un problema en particular ... está relacionado con los controladores de vídeo. Como un ejemplo de lo que estoy hablando ver este WPF foro post.

Una cosa obvia a tener en cuenta aquí sin embargo ... es que esto afecta a todas las aplicaciones WPF y realmente solo debería usarse con fines de prueba.

Para desactivar la aceleración de hardware:

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

Para habilitar la aceleración de hardware:

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

Echa un vistazo a este enlace MSDN para más información.

 6
Author: cplotts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-01 14:27:35

O utilice las Herramientas de perfilado ...

Se agregó una nueva casilla de verificación para teñir los elementos de la aplicación de destino que usan efectos de mapa de bits heredados renderizados por SW.

 4
Author: rudigrobler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-29 18:14:45

Estoy de acuerdo con la segunda respuesta, pero eso solo dice algo acerca de la capacidad de la máquina para ejecutar utilizando hw renderizado no si la aplicación es en realidad hw renderizado.

Hice una aplicación simple usando un lienzo y simplemente girando un rectángulo con RotateTransform usa mucho CPU para una aplicación renderizada hw. Eso y el 'RenderCapability.El valor del nivel es 2, por lo que hay suficiente capacidad de hw para hacerlo.

¿Por qué no lo hace entonces?

 1
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-17 09:35:33

Para responder a la segunda mitad de su pregunta, no hay manera que creo realmente para forzar una manera sobre la otra. La representación de hardware se utiliza automáticamente si está disponible, de lo contrario, el software lo está.

Si necesita probarlo en modo Software, necesitará usar una máquina de especificaciones bajas o usar Escritorio remoto para ver la aplicación que se ejecuta en otro equipo. Sin embargo, aparte de la reducción del rendimiento/velocidad de fotogramas, no debería haber diferencias visibles en la apariencia entre los dos. Utilice el Clase RenderCapability para saber si debe desactivar cosas como la animación o los efectos a favor del rendimiento.

 1
Author: Nidonocu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-07 12:39:42