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

时间:2013-04-10 23:43:29

标签: c++ visual-c++ opengl ogre3d

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

我有一个名为Chunk的对象,它会创建一个Ogre::ManualObject。因为ManualObject的创建需要一些时间,所以我将任务放在一个新线程上。

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

  

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

我查看了代码,它失败了at this stage

glGenBuffersARB( 1, &mBufferId );

if (!mBufferId)
{
    OGRE_EXCEPT(Exception::ERR_INTERNAL_ERROR,
        "Cannot create GL vertex buffer",
        "GLHardwareVertexBuffer::
}

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

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

1 个答案:

答案 0 :(得分:7)

  

因为创建ManualObject需要一些时间我将任务放到新线程上。

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