Pare a renderização e mostre um estado recuperável
Ouça webglcontextlost na tela, evite o comportamento padrão quando pretende oferecer suporte à restauração e pare de emitir chamadas de desenho enquanto o contexto estiver indisponível. Dê ao jogador uma mensagem contida se a recuperação demorar, mas mantenha o estado atual do jogo e evite tratar isso como um novo nível ou um salvamento perdido.
Mantenha as descrições dos recursos, como imagem de origem, texto de sombreamento e dados de buffer, disponíveis independentemente dos identificadores WebGL. Na restauração, crie um novo conjunto de objetos GPU a partir dessas descrições, reconecte atributos e uniformes, restaure a janela de visualização e o estado de renderização e retome somente depois que uma pequena cena conhecida for desenhada corretamente.
Simule perda durante uma interação real
Use a extensão WEBGL_lose_context durante o desenvolvimento para acionar a perda após o carregamento da cena. Teste a perda de contexto enquanto uma textura está sendo adicionada, enquanto o player está se movendo e depois de retornar a uma guia visível. Confirme se o caminho de restauração recria todos os recursos necessários e se qualquer carga assíncrona pendente é reaplicada ou descartada com segurança.
O MDN documenta o evento de perda e a extensão de teste. Verifique também isContextLost() antes de interpretar uma operação gráfica com falha como um erro comum de shader ou erro de ativo. Registre o que aconteceu nos diagnósticos de desenvolvimento para que um bug de recuperação possa ser diferenciado de uma falha normal de renderização.
Perguntas sobre Jogo de perda de contexto WebGL
A restauração de contexto traz minhas texturas de volta?
Não. Trate o novo contexto como uma necessidade de novos recursos de GPU. Preservar os dados de origem ou uma forma de recarregá-los e, em seguida, recriar texturas e outros objetos quando o contexto for restaurado.
Como posso testar a perda de contexto sem esperar por uma falha real?
A documentação webglcontextlost do MDN demonstra a extensão WEBGL_lose_context, que pode acionar deliberadamente a perda para que você possa exercitar o caminho de recuperação.
Leitura complementar
Viu alguma informação desatualizada? Informar uma correção