我对OpenGL有一个相当奇怪的问题。当我尝试使用glVertexPointer
没有绑定到GL_ARRAY_BUFFER
的缓冲区并使用顶点数组对象(VAO)时,它会生成无效的操作错误。 glVertexPointer
的文档中没有此错误。
当我生成缓冲区并将其绑定到GL_ARRAY_BUFFER
时,错误消失,但是当我将数据存储在RAM中时,我绑定0并使用指向RAM的指针。另外,通过不绑定VAO我不会再出现错误,但我注意到,当我不使用它时,程序中的其他东西会被破坏。
也许我错过了设置指针的地方,而VAO被绑定而缓冲区没有,将无效的无效操作?从理论上讲,我可以将这些数据移到维也纳国际组织,不要打扰,但我想知道为什么会这样。
答案 0 :(得分:2)
ARB_vertex_array_object的扩展注册表明确指出,它们不能与客户端阵列一起使用。对于支持VAO的核心OpenGL版本,这应该是不同的,并且由于VAO是服务器状态的事实。因此,获得无效操作错误是完全预期的行为。只需将所有内容存储在VBO中(如果数据经常更改,可以使用GL_DYNAMIC_DRAW
或GL_STREAM_DRAW
作为用法)。