在测试WebGL上下文后删除WebGL上下文

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在测试WebGL上下文后删除WebGL上下文相关的知识,希望对你有一定的参考价值。

出于好奇,我想看看使用以下代码的各种访问者支持WebGL的上下文:

var e = document.createElement('canvas');
var c = ['webgl','ms-webgl','experimental-webgl','moz-webgl']; 
for (var y = -1, len = c.length; ++y < len;)
{
 try {if (e.getContext(c[y])) {/*do-a-jig*/ break;}} catch(e) {}
}

不幸的是,这在Web开发人员控制台中报告了一个非常难以重现的错误:

WebGL警告:超过此主体的16个实时WebGL上下文,丢失最近最少使用的一个。

所以问题只是简单地说,在测试上下文之后如何删除该上下文以避免产生此错误?

答案

您可以尝试以下方法:(未经测试)

var e = document.createElement('canvas');
var c = ['webgl','ms-webgl','experimental-webgl','moz-webgl']; 

var found = '';
for (var y=0; y<c.length; y++)
{
    try {
        var ctx = e.getContext(c[y]);
        if (ctx) {
            found = c[y];
            ctx.getExtension('WEBGL_lose_context').loseContext();
            break;
        }

    } catch(e) { }
}

以上是关于在测试WebGL上下文后删除WebGL上下文的主要内容,如果未能解决你的问题,请参考以下文章

WebGL 2.0:即使 VBO 被删除,Draw 调用也会成功

WebGL入门(四十四)-WebGL上下文丢失事件与上下文恢复事件处理

webgl丢失上下文

如何确定活动WebGL上下文的数量?

WebGL 中批处理调用的最快方法

Autodesk Forge 上的 WebGL 上下文丢失错误