在什么情况下glGenBuffers/glGenBuffersARB会失败?

Raz*_*orm 2 c++ opengl ogre3d visual-c++

我正在使用支持OpenGL模式的Ogre3d引擎.

我有一个名为的对象Chunk创建了一个Ogre::ManualObject.因为创建ManualObject需要花费一些时间我将任务放到一个新线程上.

不幸的是,在线程创建之后ManualObject我现在得到以下OgreException:

"无法在GLHardwareVertexBuffer :: GLHardwareVertexBuffer中创建GL顶点缓冲区"

我调查了代码,现阶段失败:

glGenBuffersARB( 1, &mBufferId );

if (!mBufferId)
{
    OGRE_EXCEPT(Exception::ERR_INTERNAL_ERROR,
        "Cannot create GL vertex buffer",
        "GLHardwareVertexBuffer::
}
Run Code Online (Sandbox Code Playgroud)

这表明glGenBuffersARB()没有正确填充mBufferId.

我无法弄清楚造成这种情况的原因,有什么建议吗?

dat*_*olf 7

因为创建ManualObject需要一些时间,所以我将任务放到一个新线程上.

这就是你的问题.OpenGL上下文一次只能在一个线程中激活.如果从没有OpenGL上下文绑定的线程调用OpenGL命令,那么你得到的只是错误.