我已经打电话给
glVertexAttribPointer
,没有绑定GL_ARRAY_BUFFER
第一个:
如果指针不为 NULL,则必须将非零命名缓冲区对象绑定到 GL_ARRAY_BUFFER 目标(请参阅 glBindBuffer),否则会生成错误。
我很难找到这个错误,因为调用
GL_NO_ERROR
后错误是 glVertexAttribPointer
,但是 glGet(GL_ARRAY_BUFFER_BINDING)
产生 0,所以这不应该引发这个错误吗?
如果零绑定到 GL_ARRAY_BUFFER 缓冲区对象绑定点并且指针参数不为 NULL,则会生成 GL_INVALID_OPERATION。
当
pointer
不为空时,会发生无法产生错误的情况。
这是我的 OpenGL 驱动程序中的错误吗?还是我以错误的方式寻找错误?
如果您不使用顶点缓冲区对象,那么您必须使用兼容性配置文件上下文。 请参阅OpenGL 上下文。
glVertexAttribPointer
时,必须将命名缓冲区对象绑定到 ARRAY_BUFFER
目标,并且最后一个参数被视为此缓冲区的字节偏移量。
在 Legacy OpenGL(兼容性上下文)中,可以选择绑定零命名缓冲区 (0)。那么最后一个参数是指向缓冲区数据的指针。
但是如果您使用核心配置文件上下文,则无论如何都必须绑定命名缓冲区对象。
在 OpenGL 4.6 API 兼容性配置文件规范中指定了
如果顶点数组非零,则会生成 INVALID_OPERATION 错误 对象已绑定,没有缓冲区绑定到 ARRAY_BUFFER,并且指针未绑定 空。
这或多或少意味着,如果您使用顶点数组对象,那么您也必须使用顶点缓冲区对象。不允许绑定VAO,不允许绑定VBO和设置指针。