检查 Dart 中的 WebGL 支持



我正在玩WebGLDart,我不知道如何检查某些对象是否有某些方法。例如,在JavaScript中,我会检查WebGL是否可用于window.WebGLRenderingContext但是有没有办法在Dart中实现相同的方法?

IIRC Dart的目标之一是规范化哪个浏览器定义什么的不一致。因此,WebGL将始终"可用",因为它的接口将始终存在于Dart中,无论您运行的浏览器是否在本地定义了它们。

是否支持WebGL可能最好像在Javascript中一样检查:

WebGLRenderingContext gl = canvas.getContext("experimental-webgl");

如果gl为空,则不支持 WebGL。否则就是这样!

(顺便说一句:仅仅因为Javascript中存在window.WebGLRenderingContext并不意味着支持WebGL!这只告诉你浏览器能够调度WebGL命令。您正在运行的系统可能不接受它们。最好还是尝试创建上下文并检测何时失败。

编辑:顺便说一下,有一种Dart方法来初始化WebGL上下文:

RenderingContext gl = canvas.getContext3d();
if (gl == null) {
  print("WebGL: initialization failure");
}

旧答案:

WebGLRenderingContext gl = canvas.getContext("experimental-webgl");
if (gl == null) {
    print("WebGL is not supported");
    return;
}

此代码在Chrome JavaScript控制台上打印"WebGL不受支持",当我在 chrome://flags/下打开"禁用WebGL"时。

但是,在 Firefox (about:config -> webgl.disabled;true )下禁用 WebGL 后,它会在 Web 控制台上产生错误:

NS_ERROR_FAILURE:组件返回的失败代码:0x80004005 (NS_ERROR_FAILURE) [nsIDOMHTMLCanvasElement.getContext]

编辑:这是火狐浏览器的修复错误:https://bugzilla.mozilla.org/show_bug.cgi?id=645792

最新更新