我正在使用WebGL和Dart,但我不知道如何检查某个对象是否具有某种方法。例如,在 JavaScript 中,我会检查 WebGL 是否可用,window.WebGLRenderingContext
但在 Dart 中是否有相同的方法?
2 回答
IIRC Dart 的目标之一是规范浏览器定义的不一致。因此,WebGL 将始终“可用”,因为它的接口将始终存在于 Dart 中,无论您运行的浏览器是否已本地定义它们。
最好检查是否支持 WebGL,就像在 Javascript 中一样:
WebGLRenderingContext gl = canvas.getContext("experimental-webgl");
如果gl
为 null,则不支持 WebGL。否则就是!
(顺便说一句:仅仅因为window.WebGLRenderingContext
存在于 Javascript 中并不意味着支持 WebGL!这只告诉您浏览器能够调度 WebGL 命令。您运行的系统可能不接受它们。最好还是尝试创建一个上下文并检测它何时失败。)
编辑:顺便说一句,有一种初始化 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