Arrêter le rendu et afficher un état récupérable
Écoutez webglcontextlost sur le canevas, empêchez le comportement par défaut lorsque vous avez l'intention de prendre en charge la restauration et arrêtez d'émettre des appels draw lorsque le contexte n'est pas disponible. Donnez au joueur un message discret si la récupération peut prendre du temps, mais conservez l'état actuel du jeu et évitez de traiter cela comme un nouveau niveau ou une sauvegarde perdue.
Conservez les descriptions de ressources, telles que l'image source, le texte du shader et les données de tampon, disponibles indépendamment des handles WebGL. Lors de la restauration, créez un nouvel ensemble d'objets GPU à partir de ces descriptions, reconnectez les attributs et les uniformes, restaurez la fenêtre d'affichage et l'état de rendu, puis reprenez uniquement après qu'une petite scène connue soit correctement dessinée.
Simuler une perte lors d'une interaction réelle
Utilisez l'extension WEBGL_lose_context pendant le développement pour déclencher la perte après le chargement de la scène. Testez la perte de contexte pendant l'ajout d'une texture, pendant que le joueur se déplace et après être revenu à un onglet visible. Confirmez que le chemin de restauration recrée toutes les ressources requises et que toute charge asynchrone en attente est réappliquée en toute sécurité ou supprimée.
MDN documente l'événement de perte et l'extension de test. Vérifiez également isContextLost() avant d'interpréter une opération graphique ayant échoué comme une erreur de shader ou d'actif ordinaire. Enregistrez ce qui s'est passé dans les diagnostics de développement afin qu'un bug de récupération puisse être distingué d'un échec de rendu normal.
Questions sur Jeu de perte de contexte WebGL
La restauration de contexte ramène-t-elle mes textures ?
Non. Considérez le nouveau contexte comme nécessitant de nouvelles ressources GPU. Préservez les données sources ou un moyen de les recharger, puis recréez des textures et d'autres objets lorsque le contexte est restauré.
Comment tester la perte de contexte sans attendre un véritable échec ?
La documentation webglcontextlost de MDN présente l'extension WEBGL_lose_context, qui peut délibérément déclencher une perte afin que vous puissiez exercer le chemin de récupération.
Pour aller plus loin
Vous avez repéré une information dépassée ? Signaler une correction