【问题标题】:GL_NO_ERROR when glVertexAttribPointer has no bound buffer当 glVertexAttribPointer 没有绑​​定缓冲区时的 GL_NO_ERROR
【发布时间】:2019-08-30 08:12:37
【问题描述】:

我已经调用了glVertexAttribPointer,没有绑定GL_ARRAY_BUFFERfirst

如果指针不为 NULL,则必须将非零命名缓冲区对象绑定到 GL_ARRAY_BUFFER 目标(请参阅 glBindBuffer),否则会产生错误。

我很难找到这个错误,因为在调用glVertexAttribPointer 后错误是GL_NO_ERROR,但glGet(GL_ARRAY_BUFFER_BINDING) 产生0,所以这不应该引发这个错误吗?

如果零绑定到 GL_ARRAY_BUFFER 缓冲区对象绑定点并且指针参数不为 NULL,则生成 GL_INVALID_OPERATION。

pointer 不为空时,会发生这种无法产生错误的情况。

这是我的 OpenGL 驱动程序中的错误吗?还是我以错误的方式查找错误?

【问题讨论】:

    标签: opengl


    【解决方案1】:

    如果您不使用Vertex Buffer Object,那么您必须使用兼容性配置文件上下文。 见OpenGL Context


    当您使用glVertexAttribPointer 时,必须将命名缓冲区对象绑定到ARRAY_BUFFER 目标,并且最后一个参数被视为此缓冲区的字节偏移量。

    Legacy OpenGL(兼容性上下文)中,可以选择绑定一个名为缓冲区(0)的零。那么最后一个参数是指向缓冲区数据的指针。

    但是,如果您使用核心配置文件上下文,则在任何情况下都必须绑定命名缓冲区对象。


    OpenGL 4.6 API Compatibility Profile Specification中指定

    如果顶点数组非零,则会生成 INVALID_OPERATION 错误 对象已绑定,没有缓冲区绑定到 ARRAY_BUFFER,指针未绑定 空。

    这意味着更多或更少,如果您使用Vertex Array Object,那么您也必须使用Vertex Buffer Object。不允许绑定VAO、不绑定VBO和设置指针。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-08
      相关资源
      最近更新 更多