Stoppen Sie das Rendern und zeigen Sie einen wiederherstellbaren Zustand an
Achten Sie auf webglcontextlost auf der Leinwand, verhindern Sie das Standardverhalten, wenn Sie die Wiederherstellung unterstützen möchten, und beenden Sie die Ausgabe von Zeichenaufrufen, während der Kontext nicht verfügbar ist. Geben Sie dem Spieler eine zurückhaltende Nachricht, wenn die Wiederherstellung einige Zeit in Anspruch nehmen könnte, aber behalten Sie den aktuellen Spielstatus bei und vermeiden Sie, dies als ein neues Level oder einen verlorenen Spielstand zu behandeln.
Halten Sie Ressourcenbeschreibungen – wie Quellbild, Shader-Text und Pufferdaten – unabhängig von WebGL-Handles verfügbar. Erstellen Sie bei der Wiederherstellung einen neuen Satz GPU-Objekte aus diesen Beschreibungen, verbinden Sie Attribute und Uniformen erneut, stellen Sie das Ansichtsfenster und den Renderstatus wieder her und fahren Sie dann erst fort, nachdem eine kleine bekannte Szene korrekt dargestellt wurde.
Simulieren Sie den Verlust während einer echten Interaktion
Verwenden Sie während der Entwicklung die Erweiterung WEBGL_lose_context, um nach dem Laden der Szene einen Verlust auszulösen. Testen Sie den Verlust des Kontexts, während eine Textur hinzugefügt wird, während sich der Player bewegt und nachdem Sie zu einer sichtbaren Registerkarte zurückgekehrt sind. Bestätigen Sie, dass der Wiederherstellungspfad alle erforderlichen Ressourcen neu erstellt und dass alle ausstehenden asynchronen Lasten entweder sicher erneut angewendet oder verworfen werden.
MDN dokumentiert das Verlustereignis und die Test-Erweiterung. Überprüfen Sie auch isContextLost(), bevor Sie einen fehlgeschlagenen Grafikvorgang als gewöhnlichen Shader- oder Asset-Fehler interpretieren. Zeichnen Sie auf, was in der Entwicklungsdiagnose passiert ist, damit ein Wiederherstellungsfehler von einem normalen Rendering-Fehler unterschieden werden kann.
Fragen zu WebGL-Kontextverlustspiel
Bringt die Kontextwiederherstellung meine Texturen zurück?
Nein. Behandeln Sie den neuen Kontext so, als ob er neue GPU-Ressourcen benötigt. Erhalten Sie Quelldaten oder eine Möglichkeit, sie neu zu laden, und erstellen Sie dann Texturen und andere Objekte neu, wenn der Kontext wiederhergestellt ist.
Wie kann ich den Kontextverlust testen, ohne auf einen echten Fehler zu warten?
Die webglcontextlost-Dokumentation von MDN demonstriert die Erweiterung WEBGL_lose_context, die absichtlich einen Verlust auslösen kann, damit Sie den Wiederherstellungspfad nutzen können.
Weiterlesen
Etwas nicht mehr aktuell? Korrektur melden