编辑:好的,我可能已经发现了部分错误。我以为,所有 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);
...
}
答案 0 :(得分:0)
问题是,当初始化仍在进行时,我的窗口管理器在单独的线程中调用了draw方法。 为了解决这个问题,我在绘制函数中添加了一个简单的isInitialized检查。