【问题标题】:Under what circumstances would glGenBuffers/glGenBuffersARB fail?在什么情况下 glGenBuffers/glGenBuffersARB 会失败?
【发布时间】:2013-04-10 23:43:28
【问题描述】:

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

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

【问题讨论】:

  • 在致电glGenBuffersARB() 之前和之后,glGetError() 会告诉你什么?

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


【解决方案1】:

因为手动对象的创建需要一些时间我把任务放到一个新线程上。

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

【讨论】:

  • 啊,谢谢!因此,从这一点看来,最好的做法是让一个线程专门用于图形任务。指定哪个线程应该通过 Ogre 绑定 OpenGL 上下文的正确方法是什么?
  • @RazorStorm:抱歉,我从未使用过 Ogre 引擎,所以我也必须先翻阅文档。
  • 好的,没问题!我会查看文档/源代码,看看是否能找到一些东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-05
  • 2014-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多