Oneshot Gems
立即玩

游戏开发者指南

计划图形上下文消失

当浏览器或系统回收图形资源、驱动程序更改或 GPU 工作停止时,WebGL 上下文可能会丢失。曾经引用纹理、缓冲区和程序的 GPU 句柄在丢失后将不再可以安全使用。强大的游戏会将其游戏的权威状态和玩家状态保留在这些资源之外,因此它可以重建渲染器,而不需要完全重新启动游戏。上下文丢失是一个值得刻意练习的边缘情况,而不是一个未经测试的事件。

本页内容

停止渲染并显示可恢复状态

侦听画布上的 webglcontextlost,当您打算支持恢复时阻止默认行为,并在上下文不可用时停止发出绘制调用。如果恢复可能需要时间,请给玩家一条克制的消息,但保留当前的游戏状态并避免将其视为新关卡或丢失的保存。

保持资源描述(例如源图像、着色器文本和缓冲区数据)独立于 WebGL 句柄可用。恢复时,根据这些描述创建一组新的 GPU 对象,重新连接属性和 uniform 变量,恢复视口和渲染状态,然后仅在正确绘制一个小的已知场景后恢复。

模拟真实交互过程中的损失

在开发过程中使用 WEBGL_lose_context 扩展来在场景加载后触发丢失。测试在添加纹理时、玩家移动时以及返回可见选项卡后丢失上下文。确认恢复路径重新创建了每个所需的资源,并且任何挂起的异步负载都被安全地重新应用或丢弃。

MDN 记录丢失事件和测试用扩展程序。在将失败的图形操作解释为普通着色器或资源错误之前,还要检查 isContextLost()。记录开发诊断中发生的情况,以便将恢复错误与正常渲染失败区分开来。

关于⁨WebGL 上下文丢失游戏⁩的常见问题

上下文恢复可以恢复我的纹理吗?

不。将新上下文视为需要新的 GPU 资源。保留源数据或重新加载它的方法,然后在恢复上下文时重新创建纹理和其他对象。

如何在不等待真正失败的情况下测试上下文丢失?

MDN 的 webglcontextlost 文档演示了 WEBGL_lose_context 扩展,它可以故意触发丢失,以便您可以执行恢复路径。

延伸阅读

发现信息过时了? 报告需要更正的内容

继续玩下去。

免费浏览器游戏,随时等你开玩。发现喜欢的游戏,让它成为你的下一个最爱。

跟随好奇心探索