当 glVertexAttribPointer 没有绑定缓冲区时出现 GL_NO_ERROR

问题描述 投票:0回答:1

我已经打电话给

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 opengl-4
1个回答
3
投票

如果您不使用顶点缓冲区对象,那么您必须使用兼容性配置文件上下文。 请参阅OpenGL 上下文


当您使用

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

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

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


OpenGL 4.6 API 兼容性配置文件规范中指定了

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

这或多或少意味着,如果您使用顶点数组对象,那么您也必须使用顶点缓冲区对象。不允许绑定VAO,不允许绑定VBO和设置指针。

© www.soinside.com 2019 - 2024. All rights reserved.