2

我正在使用支持 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::
}

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

我不知道是什么原因造成的,有什么建议吗?

4

1 回答 1

7

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

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

于 2013-04-11T10:25:21.497 回答