在Chrome浏览器中创建WebGL上下文出错,但在Android浏览器中没有出错。

5

我使用Three.js建立了一个非常简单的Web GL网站,展示了一个旋转的立方体。当我通过默认Android浏览器在我的Android手机上运行该网站时,该网站可以正常工作。然而,当我使用Chrome浏览器时,我看到以下错误:

Error creating WebGL context
THREE.WebGLRenderer
Uncaught TypeError: Cannot read property 'getShaderPrecisionFormat' of null

我正在使用Chrome v40.0.2214.109和Android 4.1.2。我也尝试了Chrome Beta并看到了同样的错误。我需要该网站在Chrome Android上正常工作,以便能够在桌面上使用Chrome开发者工具。有什么想法吗?
更新: 当我在Chrome for Android中访问http://get.webgl.org/时,会收到以下消息:
Hmm. While your browser seems to support WebGL, it is disabled or unavailable.

我随后在Chrome for Android中访问了about:flags,并发现WebGL默认被禁用。我启用并重新启动,但仍然看到“嗯。虽然您的浏览器似乎支持WebGL...”。我尝试启用其他标志,但无济于事。最终,我在Chrome for Android中启用了每个标志,但仍然看到上面的消息。该链接在Android浏览器和Firefox for Android中完美运行。有人能解释为什么WebGL在Android v4.1.2上的Chrome for Android中无法工作吗?


three.js 应该可以在桌面版 Chrome 40 上直接使用。请检查 chrome://flags/ 中 WebGL 是否已禁用。否则,您需要发布一些代码以找出问题所在。 - gaitat
我刚刚更新了我的问题... - Mark
2个回答

2
Chrome在某些设备上有一个黑名单,不会让渲染在这样的芯片组上正常工作。 https://www.khronos.org/webgl/wiki/BlacklistsAndWhitelists#Chrome_on_Android 你应该在问题中添加你正在使用的GPU。 顺便说一句,我有一个Android设备,其自带浏览器版本为4.1.2,它运行得非常流畅。 忘记Chrome吧,我在它上面使用WebGL的经验非常负面。 我不建议在移动端和桌面端都使用它。 此外,如果你的演示在自带浏览器上可以运行,它们也将在其他地方运行,因此我认为最好使用它进行开发。 直到今天(2015年7月14日),情况没有改变,甚至Firefox也更好。 编辑:你可以尝试在Chrome Dev for Android中激活一些标志来强制启用WebGL,但如果你恰好使用的是Mali400或PowerVR SGX 540,即使激活了标志,你也不会有任何运气。

2

以下是一种情况下无法呈现webgl上下文的回调方法:

var supportsWebGL = ( function () {
    try {
        return !! window.WebGLRenderingContext && !! document.createElement( 'canvas' ).getContext( 'experimental-webgl' );
    } catch( e ) {
        return false;
    }
} )();

if(supportsWebGL){
    console.log("support");
}else{
    console.log("no support");
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接