编辑:好的,我可能发现了部分错误。我以为,所有 gl_debug_type_error 错误消息是停止执行的有效理由,这就是为什么如果我的调试消息回调设置为退出程序,则如果遇到 gl_debug_type_error 。。p>我只能忽略此错误,因为它只是严重性通知,然后继续,但是我仍然想知道此错误的含义以及如何预防。
====原始问题=====
运行相对简单的测试项目时,我会得到
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);
...
}
问题是,我的窗口管理器在仍在进行初始化时在单独的线程中调用Draw方法。为了解决此问题,我在Draw功能中添加了一个简单的Isitializatized检查。