glBufferData失败,并显示:“数组对象未激活”。

时间:2019-03-07 12:22:07

标签: c++ opengl

编辑:好的,我可能已经发现了部分错误。我以为,所有 GL_DEBUG_TYPE_ERROR 错误消息都是停止执行的正当理由,这就是为什么我的调试消息回调设置为遇到 GL_DEBUG_TYPE_ERROR 时退出程序的原因。 >

我只能忽略此错误,因为它只是严重性通知,然后继续,但是我仍然想知道此错误的含义以及如何防止它。

====原始问题====

当运行一个相对简单的测试项目时,我得到一个

GL_INVALID_OPERATION error generated. Array object is not active.

跑步时

glBufferData(GL_ARRAY_BUFFER, sizeof(mesh), mesh, GL_STATIC_DRAW);

据我所知,我不需要活动的VAO来设置VBO数据,只需为 VertexAttribArray / Pointer 调用即可。

但即使VAO处于活动状态/绑定状态,也会引发相同的错误。

这是我的代码的简化版本:

float mesh[] =
{ -0.5, 0.5, 0.5, 0.5, -0.5, -0.5, 0.5, 0.5, 0.5, -0.5, -0.5, -0.5 };

{
program = glCreateProgram();

// Compile and attach shaders
...

glLinkProgram(program);

    // === Vertex Buffer ===
// Generate new buffer for vertex coordinates
glGenBuffers(1, &vb);
// Use for all ArrayBuffer operations
glBindBuffer(GL_ARRAY_BUFFER, vb);

// Runs until here. glCheckError() reports no error.
// DebugMessageCallback is also not triggered.
glBufferData(GL_ARRAY_BUFFER, sizeof(mesh), mesh, GL_STATIC_DRAW);

...
}

1 个答案:

答案 0 :(得分:0)

问题是,当初始化仍在进行时,我的窗口管理器在单独的线程中调用了draw方法。 为了解决这个问题,我在绘制函数中添加了一个简单的isInitialized检查。