gpt4 book ai didi

google-chrome - 如果在程序中使用属性而没有启用和绑定(bind)缓冲区,会发生什么情况?

转载 作者:行者123 更新时间:2023-12-01 14:02:56 27 4
gpt4 key购买 nike

最近,当我阅读 webgl 规范时。我有以下问题,因为我的程序因此在 chrome 浏览器上随机出错:

如果在调用 drawArrays 或 drawElements 的过程中未绑定(bind)缓冲区并在程序中使用属性并启用该属性,会发生什么情况?

规范只说:

If a vertex attribute is enabled as an array, a buffer is bound to that attribute, but the attribute is not consumed by the current program, then regardless of the size of the bound buffer, it will not cause any error to be generated during a call to drawArrays or drawElements.

If a vertex attribute is enabled as an array via enableVertexAttribArray but no buffer is bound to that attribute via bindBuffer and vertexAttribPointer, then calls to drawArrays or drawElements will generate an INVALID_OPERATION error

谁能帮我解决这个问题??

最佳答案

第二段说,如果你启用了一个属性但没有绑定(bind)缓冲区,你总是会得到一个错误。

有四种可能

  1. 您有一个启用了缓冲区绑定(bind)的属性,并且该属性由当前着色器程序使用。

    在这种情况下,缓冲区必须足够大以处理您尝试绘制的任何内容。换句话说,如果您有一个包含 3 个顶点的缓冲区,但您要求 WebGL 绘制 4 个顶点,您将得到一个错误。或者,如果您调用 gl.drawElements 并且您的其中一个索引大于 2,您将收到错误消息。

  2. 您有一个启用了缓冲区绑定(bind)的属性,并且当前着色器程序使用该属性。

    在这种情况下,即使缓冲区不够大也不会出错,因为缓冲区没有被使用。

  3. 您有一个启用了 NO BUFFER 绑定(bind)的属性。

    在这种情况下,您总是会收到错误消息。

  4. 您禁用了一个属性

    在这种情况下,它将使用通过调用 gl.vertexAttrib4f 或其变体之一提供的值。

您从规范中引用的 2 个段落涵盖了上面的案例 2 和 3。

关于google-chrome - 如果在程序中使用属性而没有启用和绑定(bind)缓冲区,会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21128464/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com