【问题标题】:Rats! WebGL hit a snag - how to debug?老鼠! WebGL 遇到了麻烦——如何调试?
【发布时间】:2016-08-12 16:26:46
【问题描述】:

调用 canvas.getContext("webgl"); 会让 Chrome 触发“Rats!WebGL 遇到障碍”消息,但不提供任何信息。我该如何解决?

除了canvas.getContext("webgl") 返回null 之外,我没有得到任何其他信息,如果我自己不使用该设备,我什至不知道 Chrome 会失败并显示占据手机屏幕 25% 的消息,因为这会触发 no错误。

这是一个函数的一部分,它应该通过创建新画布并获取 webGL 上下文来测试是否支持 WebGL:

var webGLIsSupported = function() {
  if (typeof window.webGLIsSupported !== 'undefined') {return window.webGLIsSupported;}

  var canvas = $('<canvas></canvas>')[0];
  var ctx;
  try {
    ctx = canvas.getContext('webgl'); // <- this triggers the message, and fails
  }
  catch (e) {
    window.webGLIsSupported = false;
    return false;
  }
  window.webGLIsSupported = !!ctx;
  return window.webGLIsSupported;
};

我可以从哪里开始获取有关哪些内容不起作用的信息?没有任何日志真是令人沮丧。

canvas.getContext('webgl') 更改为canvas.getContext('experimental-webgl') 没有任何区别。

我在三星 S6 上运行 Chrome 49.0.2623.105。

【问题讨论】:

  • 您可以在收到消息后尝试前往about:gpu。那里可能有日志消息。请务必在收到消息之前进行检查,并将之前的任何消息与之后的消息分开。如果您不介意,也将它们发布在这里。很想看看他们是什么

标签: javascript google-chrome debugging canvas webgl


【解决方案1】:

如您所见,检查null 是一种了解上下文创建是否成功的方法。但是当你只检查它时,没有关于“为什么”的信息。

实际上应该为此触发一个事件:webglcontextcreationerror

它确实包含一个statusMessage 属性,它应该为您提供有关“为什么”它未能创建上下文的更多信息。

来自 MDN:

canvas.addEventListener("webglcontextcreationerror", function(e) {
  console.log(e.statusMessage || "Unknown error"); 
}, false);

但是,我不知道您是否可以对收到的消息做任何事情...

【讨论】:

  • 如果你试试这个,我会很好奇你收到什么消息
  • 谢谢,我不知道。一旦我点击 chrome 消息提供的重新加载选项,消息就消失了(当我重新加载页面时没有)我会在我的代码中添加它,并希望我能在我的许多用户之前再次遇到这个错误,并且会让你知道的!
猜你喜欢
  • 1970-01-01
  • 2020-11-02
  • 1970-01-01
  • 2020-06-15
  • 1970-01-01
  • 2016-06-29
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多