我正在尝试组装一个非常基本的OpenGL 3.2(核心配置文件)应用程序。在下面的代码中,应该创建一个包含三角形顶点位置的VBO,但对glVertexAttribPointer
的调用失败,并引发OpenGL错误GL_INVALID_OPERATION
。这意味着什么?我该如何修复它?
GLuint vbo, attribLocation = glGetAttribLocation(...);
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
GLfloat vertices[] = { 0, 1, 0, 1, 0, 0, -1, 0, 0 };
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glEnableVertexAttribArray(attribLocation);
// At this point, glGetError() returns GL_NO_ERROR.
glVertexAttribPointer(attribLocation, 3, GL_FLOAT, GL_FALSE, 0, 0);
// At this point, glGetError() returns GL_INVALID_OPERATION.
1条答案
按热度按时间xam8gpfp1#
首先,这里有一个明显的驱动程序错误,因为
glEnableVertexAttribArray
* 也 * 应该发出GL_INVALID_OPERATION
错误。为什么两个函数都出错?因为你没有使用顶点数组对象。
glEnableVertexAttribArray
在当前 VAO 中设置状态。没有当前VAO,所以... error。glVertexAttribPointer
也是一样。甚至在这两个页面的错误列表中也有。在兼容性上下文中不需要 VAO ,但在核心上下文中需要。这是您要求的。因此......您需要一个:
把它放在你的设置中的某个地方,你的程序就会工作。
顺便说一句:
只有当您的代码要在MacOS的GL 3.2+实现上运行时才需要。除非您将此作为目标,否则它是不必要的,并且可能会造成中断,因为在核心上下文中提供的少量功能不属于向前兼容性(例如,宽行)。