【发布时间】:2012-11-04 10:10:24
【问题描述】:
我正在尝试组合一个非常基本的 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.
【问题讨论】:
-
这都是在同一个函数里面吗?
-
是的。当它真正起作用时我会重构它:P
-
您确定
GL_INVALID_OPERATION错误来自glVertexAttribPointer?请记住:OpenGL 存储错误并仅在您调用glGetError时返回它们。所以如果你不经常purging the error queue,你可能会遇到更老的错误。 -
它肯定来自 glVertexAttribPointer - 当我将错误检查移到上面的行时,没有报告错误。
-
@robinjam:请在问题中添加具体的错误检查代码,包括您看到错误的最新点和出现错误的最早点。因为我认为您的错误来自
glEnableVertexAttribArray。