Oneshot Gems
Jetzt spielen

Für Spieleentwickler

Planen Sie, dass der Grafikkontext verschwindet

Ein WebGL-Kontext kann verloren gehen, wenn der Browser oder das System Grafikressourcen zurückfordert, sich ein Treiber ändert oder die GPU-Arbeit ins Stocken gerät. GPU-Handles, die sich einst auf Texturen, Puffer und Programme bezogen, können nach einem Verlust nicht mehr sicher verwendet werden. Ein robustes Spiel behält den maßgeblichen Spielzustand und den Zustand des Spielers außerhalb dieser Ressourcen bei, sodass der Renderer neu erstellt werden kann, anstatt einen vollständigen Neustart des Spiels zu erfordern. Kontextverlust ist ein Randfall, den es wert ist, bewusst ausgeübt zu werden, und kein Ereignis, das man ungetestet lassen sollte.

Auf dieser Seite

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

Spiel weiter.

Kostenlose Browserspiele, jederzeit bereit. Entdecke etwas, das dir Spaß macht, und finde dein nächstes Lieblingsspiel.

Folge deiner Neugier