Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
"Dispositivo perdido" hace referencia a una situación en la que el dispositivo gráfico de GPU deja de usarse para una mayor representación. Esto puede ocurrir debido a un mal funcionamiento del hardware de GPU, errores de controladores, actualizaciones de software del controlador o al cambiar la aplicación de una GPU a otra. Ya no se puede usar un dispositivo perdido y cualquier intento de hacerlo desde Win2D producirá una excepción. Para recuperarse de esta situación, la aplicación debe crear un nuevo dispositivo y volver a crear todos sus recursos gráficos.
No todas las aplicaciones se molestan en intentar recuperarse del dispositivo perdido. Esta es una situación que esperamos sea poco frecuente, ¡con suerte!, por lo que algunos desarrolladores simplemente dejarán que sus aplicaciones se bloqueen si ocurre. Para aquellos que prefieren controlar el dispositivo perdido de forma sólida, en este artículo se explica cómo hacerlo.
Dispositivo perdido al usar controles XAML
Los controles Win2D (CanvasControl
y CanvasVirtualControl
CanvasAnimatedControl
) intentan controlar automáticamente el dispositivo perdido en nombre de la aplicación.
Cuando se detecte la pérdida de un dispositivo, estos controles recrearán sus CanvasDevice
y, a continuación, generarán el evento CreateResources
pasando un CanvasCreateResourcesReason
de NewDevice
. Las aplicaciones deben responder a este evento volviendo a crear todos sus recursos gráficos mediante el nuevo dispositivo y actualizando las estructuras de datos que puedan contener referencias a los recursos antiguos y ya no válidos.
Los controles pueden detectar y controlar automáticamente las excepciones de pérdida del dispositivo que producen sus controladores de eventos CreateResources
, Update
, Draw
o RegionsInvalidated
. Si llamas a las API de dibujo de Win2D desde otros lugares (por ejemplo, en un controlador de eventos de entrada de puntero o teclado), consulta la sección siguiente.
Control manual del dispositivo perdido
Si estás usando Win2D sin los controles integrados, o desde fuera de los manejadores de eventos CreateResources
, Update
o Draw
, entonces es tu responsabilidad capturar e informar de las excepciones de dispositivo perdidas. Esto se hace con los IsDeviceLost(Int32)
métodos y RaiseDeviceLost()
:
try
{
DrawStuff();
}
catch (Exception e) where canvasDevice.IsDeviceLost(e.ErrorCode)
{
canvasDevice.RaiseDeviceLost();
}
Al llamar a RaiseDeviceLost
, se indica a los controles que están compartiendo este dispositivo que inicien su ruta de recuperación de dispositivos extraviados. Si obtuvo su dispositivo de un lugar distinto a un supervisor, use el evento DeviceLost
para ser informado cuando se pierda.
Cómo probar el control perdido del dispositivo
La manera más fácil de probar que la aplicación hará lo correcto en respuesta al dispositivo perdido es deshabilitar la GPU de hardware mientras se ejecuta la aplicación:
- Abra el Administrador de dispositivos (ventana Explorador:> haga clic con el botón derecho en "Este EQUIPO" -> "Propiedades" -> "Administrador de dispositivos")
- Expanda el nodo "Adaptadores de visualización"
- Haga clic con el botón derecho en la entrada de su GPU y luego en "Deshabilitar". Esto omitirá su GPU de hardware, momento en el cual Windows cambiará a un dispositivo de representación de software WARP y todas las aplicaciones activas experimentarán una pérdida del dispositivo.
No olvide volver a habilitar la GPU después de realizar esta prueba. Si quieres probar el dispositivo perdido más de una vez, es mejor reiniciar la aplicación cada vez (siempre iniciarla con la GPU habilitada). Activar y desactivar repetidamente la GPU mientras se ejecuta una aplicación no hace que se pierdan dispositivos de forma confiable, ya que puede seguir usando el dispositivo de software WARP.
Al probar el control de dispositivos perdidos, probablemente también quieras asegurarte de que la aplicación se ocupa correctamente de los cambios dinámicos mostrar ppp.