Dart WebGL调试

Kri*_*abó 4 debugging webgl dart

我已经开始使用Dart和WebGL编写一些技术演示和测试,但我似乎无法弄清楚如何在Dart中调试WebGL.

Markus Notch(Minecraft的创造者)在抽搐时有一个直播,他也用Dart和WebGL编写了他的游戏,但是每当他搞砸了一些东西时,他在WebGL的控制台上都会出现错误记录并记录错误.例如,请查看1:13:30.可悲的是,我找不到在他的代码中进行调试的部分.

当然我可以使用getShaderParameter()和检查我的着色器中getProgramParameter()的错误然后使用适当的getInfoLog()方法获取错误日志,但是对于常规调试(例如检查INVALID_ENUM错误)我可以将错误作为整数获取getError()但不能将其转换为枚举,错误消息或任何人工可读的调试信息.

我试图查看web_gl.dart源代码,但在其中找不到任何允许调试的内容.

任何帮助将非常感谢.

编辑:基于Notch的答案Chromium(可能)会自动记录这些错误.但不适合我,在Chromium控制台为空时gl.getError()报告错误1280.:(

编辑2:找到解决方案,看看我的答案.

Not*_*tch 6

编辑:我完全误解了这个问题.忽略这个答案.

对于着色器(顶点和片段):

gl.compileShader(shader);
boolean isCompiled = gl.getShaderParameter(shader, WebGL.COMPILE_STATUS);
if (isCompiled == false) {
  String compileLog = gl.getShaderInfoLog(shader);
  // Display the compile log
}
Run Code Online (Sandbox Code Playgroud)

对于链接程序:

gl.linkProgram(program);
bool isCompiled = gl.getProgramParameter(program, WebGL.LINK_STATUS);
if (isCompiled == false) {
  String linkLog = gl.getProgramInfoLog(program);
  // Display the link log
}
Run Code Online (Sandbox Code Playgroud)

在某些硬件上,如果没有错误,着色器信息日志和程序信息日志将为空字符串,但您不能依赖此行为.

  • 哦,这就是我在前一天晚上喝酒后想要变得聪明的原因.我不知道该怎么做.我假设Chromium正在输出WebGL错误消息. (2认同)

Kri*_*abó 5

好的,所以我实际上找到了答案,而且非常明显.

Notch是对的:Chromium会自动报告WebGL错误.但是,它会在一段时间(" WebGL: too many errors, no more errors will be reported to the console for this context.")之后停止记录它们,因为我每次都记录东西,我的控制台很快就填满了我自己的信息,将Chromium的日志推到最顶层,甚至删除它们(不确定)调试控制台最多可以存储多少行,但我记得几次滚动到顶部并且我从未见过Chromium的报告.

快速启动和停止应用程序显示了该信息.
一定要喜欢这种错误.