我正在使用支持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。
我无法弄清楚造成这种情况的原因,有什么建议吗?
答案 0 :(得分:7)
因为创建ManualObject需要一些时间我将任务放到新线程上。
那就是你的问题。 OpenGL上下文一次只能在一个线程中激活。如果从没有OpenGL上下文绑定的线程调用OpenGL命令,那么你得到的只是错误。