在Chrome WebGL的调试

问题描述 投票:3回答:3

我在Chrome运行WebGL的网页。

时不时地,铬会报告以下错误。

[.WebGLRenderingContext] GL ERROR:GL_INVALID_OPERATION:glDrawElements:尝试以使与没有附连到使能属性1缓冲器

我试图调试在错误发生,但我不能。我可以可靠地导致它发生,但是当我调试报道在看似随意的线条错误。我怀疑这是因为GPU渲染的异步特性。

有没有调试这个好办法?

javascript google-chrome webgl google-chrome-devtools
3个回答
4
投票

您可以使用debug wrapper包WebGL的背景和每一个WebGL的函数调用后gl.getError。

an example of one可在the official WebGL Wiki


2
投票

每默认的WebGL不告诉你很多关于它,你要查询你需要自己的所有信息。一旦你知道该怎么做,这些错误会告诉你所有你需要调试。对于你的情况,吸气将

var attribLocation = 1;
gl.getVertexAttrib ( attribLocation, gl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING );

其中,如果您绘制调用之前对其进行查询,可能会返回null,这意味着建立或切换缓冲区,当你不打电话vertexAttribPointer正确。

所以,你去在你的代码的地步,你设置的指针,并启用阵列,并确认您只是enableVertexAttribArray启用位置也返回,如果你在这一点上查询返回缓冲区null。现在你知道,如果你用指针搞砸。你知道你固定它,当查询返回正确的WebGLBuffer对象。

有对所有状态干将(WebGL的主要是有关管理状态),他们是有点棘手使用,但使用起来将极大地帮助你了解一切事情的时候,当你需要或不需要拨打电话为了更新状态,并在那里你所犯的错误。

你可以看一下getter和论据,他们采取了in the spec


1
投票

SpectorJS是针对WebGL的开发商想知道他们的背景下发生的事情的工具。它能够从一帧所有可用的信息捕捉。你将能够看到你的整个命令列表及其相关的可视状态和上下文信息。

https://github.com/BabylonJS/Spector.js

© www.soinside.com 2019 - 2024. All rights reserved.