【问题标题】:Check for WebGL support in Dart检查 Dart 中的 WebGL 支持
【发布时间】:2012-06-06 17:06:48
【问题描述】:

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

【问题讨论】:

  • 你在这里问两件事。 Toji 回答了“我如何正确检测 WebGL 在机器上工作”,这实际上不是 Dart 特定的问题。您的第二个问题更微妙:“在 Dart 中,我可以通过检查对象是否具有某种方法来进行特征检测吗?”答案是否定的。在 Dart 中,类是在编译时定义的,API 是固定的。

标签: webgl dart


【解决方案1】:

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

是否支持 WebGL 可能最好以与 Javascript 相同的方式检查:

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

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

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

【讨论】:

    【解决方案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

    【讨论】:

      猜你喜欢
      • 2012-12-09
      • 2012-08-05
      • 2017-04-21
      • 2016-11-14
      • 2012-10-25
      • 2018-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多