# Prévoir la disparition du contexte graphique

> Détectez un contexte WebGL perdu, préservez l'état du jeu séparément des objets GPU et testez un chemin de récupération délibéré du moteur de rendu.

- URL: https://oneshotgems.ai/fr/topics/webgl-context-loss
- Catégorie: Pour les développeurs de jeux
- Type: Guide
- Mis à jour le: 5 octobre 2026

Un contexte WebGL peut être perdu lorsque le navigateur ou le système récupère des ressources graphiques, qu'un pilote change ou que le travail du GPU se bloque. Les poignées GPU qui faisaient autrefois référence à des textures, des tampons et des programmes ne peuvent plus être utilisées en toute sécurité après une perte. Un jeu robuste conserve son niveau d'autorité et son état de joueur en dehors de ces ressources, afin de pouvoir reconstruire le moteur de rendu au lieu de nécessiter un redémarrage complet du jeu. La perte de contexte est un cas limite qui mérite d'être étudié délibérément, et non un événement à ne pas tester.

## 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

**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.

## Suivez votre curiosité

- [Traquer les fuites de mémoire dans un jeu par navigateur](https://oneshotgems.ai/fr/topics/game-memory-leaks): Utilisez des contrôles de lecture et de nettoyage répétables pour rechercher les scènes de jeu, les auditeurs, les minuteries et les ressources conservés qui s'accumulent au fil du temps.
- [Trouver les goulots d’étranglement du rendu Canvas](https://oneshotgems.ai/fr/topics/canvas-game-performance): Profilez un jeu 2D sur Canvas avec des scènes reproductibles et ne réduisez les opérations de dessin coûteuses qu’après avoir mesuré où le temps est passé.

## Pour aller plus loin

- [MDN : événement webglcontextlost](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/webglcontextlost_event)
- [MDN : isContextLost()](https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/isContextLost)

---
Page canonique: https://oneshotgems.ai/fr/topics/webgl-context-loss
