4

我正在使用WebGLDart,但我不知道如何检查某个对象是否具有某种方法。例如,在 JavaScript 中,我会检查 WebGL 是否可用,window.WebGLRenderingContext但在 Dart 中是否有相同的方法?

4

2 回答 2

8

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

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

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

如果gl为 null,则不支持 WebGL。否则就是!

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

于 2012-06-06T21:45:00.063 回答
2

编辑:顺便说一句,有一种初始化 WebGL 上下文的 Dart 方式:

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://flags/ 下打开“禁用 WebGL”时,此代码会在 Chrome JavaScript 控制台上打印“不支持 WebGL”。

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

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

编辑:这是 Firefox 的固定错误:https ://bugzilla.mozilla.org/show_bug.cgi?id=645792

于 2013-02-21T17:12:44.377 回答