2

执行以下代码

int object::draw(){

glBindBuffer(GL_ARRAY_BUFFER, vbobuffer);
if(myglError("glBindBuffer in object.draw")){
    //return 0;
}

glDrawArrays(GL_TRIANGLES, 0, buffer_size);
if(myglError("glDrawArrays in object.draw")){
    return 0;
}

return 1;
}

在哪里

inline int myglError(const char* location) {
GLenum error = GL_NO_ERROR;
error = glGetError();
if (GL_NO_ERROR != error) {
    printf("GL Error %x encountered in %s.\n", error, location);
    //exit(-1);
    return 1;
}
return 0;
}

我在 object.draw 的 glBindBuffer 中得到输出 GL Error 502。

然而 glDrawArrays 仍然绘制三角形。

通过检查文档http://www.opengl.org/sdk/docs/man/xhtml/glBindBuffer.xml glBindBuffer 可以返回 GL_INVALID_ENUM 或 GL_INVALID_VALUE ...但是没有关于 glBindBuffer 给出 GL_INVALID_OPERATION 的信息

这里发生了什么?

4

1 回答 1

1

我没有仔细阅读 glGetError 并且忽略了 glGetError 的工作原理。它只报告自上次 glGetError 调用以来发生的所有错误,而不仅仅是 gl 函数调用后的状态。

于 2013-07-03T12:32:22.077 回答