Oneshot Gems
Jogar agora

Para desenvolvedores de jogos

Planeje o desaparecimento do contexto gráfico

Um contexto WebGL pode ser perdido quando o navegador ou sistema recupera recursos gráficos, um driver é alterado ou o trabalho da GPU é interrompido. Os identificadores de GPU que antes se referiam a texturas, buffers e programas não são mais seguros para uso após a perda. Um jogo robusto mantém o estado autoritativo do jogo e o estado do jogador fora desses recursos, para que possa reconstruir o renderizador em vez de exigir a reinicialização completa do jogo. A perda de contexto é um caso extremo que vale a pena exercitar deliberadamente, e não um evento que não deve ser testado.

Nesta página

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

Continue jogando.

Jogos grátis no navegador, prontos quando você quiser. Encontre um de que goste e faça dele seu próximo favorito.

Siga sua curiosidade