Detener el renderizado y mostrar un estado recuperable
Escuche webglcontextlost en el lienzo, evite el comportamiento predeterminado cuando pretenda admitir la restauración y deje de emitir llamadas de dibujo mientras el contexto no esté disponible. Dale al jugador un mensaje restringido si la recuperación puede llevar tiempo, pero conserva el estado actual del juego y evita tratar esto como un nuevo nivel o una partida guardada perdida.
Mantenga las descripciones de los recursos (como la imagen de origen, el texto del sombreador y los datos del búfer) disponibles independientemente de los identificadores de WebGL. Durante la restauración, cree un nuevo conjunto de objetos de GPU a partir de esas descripciones, vuelva a conectar atributos y uniformes, restaure la ventana gráfica y el estado de renderizado, luego reanude solo después de que una pequeña escena conocida se dibuje correctamente.
Simular la pérdida durante una interacción real
Utilice la extensión WEBGL_lose_context durante el desarrollo para activar la pérdida después de cargar la escena. Pruebe perder contexto mientras se agrega una textura, mientras el jugador se mueve y después de regresar a una pestaña visible. Confirme que la ruta de restauración vuelva a crear todos los recursos necesarios y que cualquier carga asincrónica pendiente se vuelva a aplicar o se descarte de forma segura.
MDN documenta el evento de pérdida y la extensión de prueba. También verifique isContextLost() antes de interpretar una operación de gráficos fallida como un sombreador normal o un error de activo. Registre lo que sucedió en los diagnósticos de desarrollo para que se pueda distinguir un error de recuperación de una falla de renderizado normal.
Preguntas sobre Juego de pérdida de contexto WebGL
¿La restauración del contexto recupera mis texturas?
No. Trate el nuevo contexto como si necesitara nuevos recursos de GPU. Conserve los datos de origen o una forma de recargarlos, luego vuelva a crear texturas y otros objetos cuando se restablezca el contexto.
¿Cómo puedo probar la pérdida de contexto sin esperar a que se produzca un fallo real?
La documentación webglcontextlost de MDN demuestra la extensión WEBGL_lose_context, que puede desencadenar deliberadamente una pérdida para que puedas ejercer la ruta de recuperación.
Más información
¿Has visto algo desactualizado? Notificar una corrección