我有一个WebGL / Three.js游戏,当ANGLE用于提供WebGL时,它有一个无用的着色器程序链接错误。我想在主页上向ANGLE用户显示一个醒目的警告(但不是错误的其他用户)以及显示切换到本机OpenGL渲染器的说明。如果用户没有切换到原生GL,我还想自动禁用有问题的功能(阴影)。
Three.js没有提供检测着色器失败的好方法,我不知道如何检测ANGLE,所以我现在正在考虑使用这种近似:
IF Windows AND ( Chrome OR Firefox ) THEN displayWarning()
有更好的想法吗?
答案 0 :(得分:2)
试试这个,它对我有用。
var _IS_ANGLE_ACTIVE = false;
...
...
var renderer = new THREE.WebGLRenderer( { antialias: true });
...
...
var ctx = renderer.domElement.getContext("webgl");
if (ctx==null)
ctx = renderer.domElement.getContext("experimental-webgl");
if (ctx) {
var h = ctx.getParameter(ctx.ALIASED_LINE_WIDTH_RANGE);
_IS_ANGLE_ACTIVE = (h && h.length==2 && h[0]==1 && h[1]==1);
}
如果ANGLE处于活动状态,或者[1,10]具有原生GL,变量h返回[1,1]。
答案 1 :(得分:0)
我会说不,因为webgl规范试图删除有关GPU等的任何特定信息。
您可以尝试制作一个小型测试用例,用于检测readpixels的特定问题并将其用作警告显示器