我在Chrome运行WebGL的网页。
时不时地,铬会报告以下错误。
[.WebGLRenderingContext] GL ERROR:GL_INVALID_OPERATION:glDrawElements:尝试以使与没有附连到使能属性1缓冲器
我试图调试在错误发生,但我不能。我可以可靠地导致它发生,但是当我调试报道在看似随意的线条错误。我怀疑这是因为GPU渲染的异步特性。
有没有调试这个好办法?
您可以使用debug wrapper包WebGL的背景和每一个WebGL的函数调用后gl.getError。
每默认的WebGL不告诉你很多关于它,你要查询你需要自己的所有信息。一旦你知道该怎么做,这些错误会告诉你所有你需要调试。对于你的情况,吸气将
var attribLocation = 1;
gl.getVertexAttrib ( attribLocation, gl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING );
其中,如果您绘制调用之前对其进行查询,可能会返回null
,这意味着建立或切换缓冲区,当你不打电话vertexAttribPointer
正确。
所以,你去在你的代码的地步,你设置的指针,并启用阵列,并确认您只是enableVertexAttribArray
启用位置也返回,如果你在这一点上查询返回缓冲区null
。现在你知道,如果你用指针搞砸。你知道你固定它,当查询返回正确的WebGLBuffer
对象。
有对所有状态干将(WebGL的主要是有关管理状态),他们是有点棘手使用,但使用起来将极大地帮助你了解一切事情的时候,当你需要或不需要拨打电话为了更新状态,并在那里你所犯的错误。
你可以看一下getter和论据,他们采取了in the spec
SpectorJS是针对WebGL的开发商想知道他们的背景下发生的事情的工具。它能够从一帧所有可用的信息捕捉。你将能够看到你的整个命令列表及其相关的可视状态和上下文信息。