H5游戏无法在安卓UC客户端上使用WebGL绘制的解决办法

代码位置:engine/cocos2d/core/platform/CCSys.js#L902行

我们可以看到CCSys.js的902行,是这样判断是否支持webgl的
if (win.WebGLRenderingContext) {
考虑到不是所有的浏览器都会将WebGLRenderingContext挂载到window全局对象里面,可能有些浏览器的实现会顺便挂载进去,但这并不是约定俗成的一件事,实际上从MDN上推荐用这种方式来判断是否支持webgl:

function detectWebGLContext () {
// Create canvas element. The canvas is not added to the
// document itself, so it is never displayed in the
// browser window.
var canvas = document.createElement(“canvas”);
// Get WebGLRenderingContext from canvas element.
var gl = canvas.getContext(“webgl”)
|| canvas.getContext(“experimental-webgl”);
// Report the result.
if (gl && gl instanceof WebGLRenderingContext) {
return true;
} else {
return false;
}
}


另外再看一下为什么不支持UC浏览器使用webgl
位置:engine/cocos2d/core/platform/CCSys.js#L934行
很忧伤的一件事情,switch case到sys.BROWSER_TYPE_UC:这个路径的时候少了个break,直接最后当作false了


        case sys.BROWSER_TYPE_UC:
            if (browserVer > 11.0) {
                _supportWebGL = true;
            } else {
                _supportWebGL = false;
            }
        case sys.BROWSER_TYPE_360:
            _supportWebGL = false;
        }

另外这是我在cocos creator的github上提的issue,希望cocos大神们尽快关注一下,并能在下个cocos creator版本修复

自己修改呀

@jare Creator 的问题,请关注一下

Cocos Creator 不在 Cocos2d-x/JavaScript 的范畴内了,现在是和 Cocos2d-x 并列的产品,有单独的讨论分区

当时并不是不支持,而是 UC webgl 性能太慢了,实现起来有问题,只好禁用。不过我记得 1.9 版本已经去掉这个限制了,你升级到最新版试试吧。

https://github.com/cocos-creator/engine/blob/master/cocos2d/core/platform/CCSys.js#L955

在github上看没有去掉呢,至少第一个判断是否是webgl就有问题。还有还是少了个break

关于当时UC webgl性能问题而故意不支持,是否随着时间流逝不断的bugfix而已经不复存在了。

另外我们的UC内核同学非常迫切并欢迎和cocos共同发现并解决现有可能的webgl性能问题。