在什么情况下glGenBuffers/glGenBuffersARB失败?
我正在使用支持OpenGL模式的Ogre3d引擎。在什么情况下glGenBuffers/glGenBuffersARB失败?
我有一个对象叫做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::
}
这表明glGenB uffersARB()没有正确填充mBufferId。
我无法弄清楚是什么原因造成的,有什么建议吗?
由于ManualObject的创建需要一些时间我把任务放到一个新的线程上。
这就是你的问题。 OpenGL上下文一次只能在一个线程中处于活动状态。如果你从一个没有OpenGL上下文绑定的线程中调用OpenGL命令,你所得到的只是错误。
啊谢谢你!所以从这个角度来看,最好的行动方式是让一个线程专用于图形任务。 什么是正确的方式来指定哪个线程应通过Ogre绑定OpenGL上下文? – 2013-04-11 22:12:27
@RazorStorm:对不起,我从来没有使用Ogre引擎,所以我也必须先查阅文档。 – datenwolf 2013-04-11 22:36:00
好的,没问题!我会查看文档/源代码,看看我能找到什么。 – 2013-04-11 22:39:21
在调用'glGenBuffersARB()'之前和之后'glGetError()'告诉你什么? – user1118321 2013-04-11 05:21:52