OpenGL:使用Qt的OpenGL无法正确显示,出现QOpenGLBuffer::bind: buffer is not valid in the current context的错误

4 篇文章 1 订阅

OpenGL:使用Qt的OpenGL无法正确显示,出现QOpenGLBuffer::bind: buffer is not valid in the current context的错误

使用OpenGL的时候发现图形无法正确加载,最后定位到bug是在下面这段代码中。

buffer->bind();
buffer->allocate(data, static_cast<int>(data.size()));
buffer->release();

同时控制台输出了一句信息:QOpenGLBuffer::bind: buffer is not valid in the current context,也就是bind()未生效导致数据没有写到QOpenGLBuffer里。

各个平台搜索结果无果,最后鬼使神差看到了有人提到了QOpenGLWidget::makeCurrent()函数,这个函数的功能详见官方文档QOpenGLWidget。关键是这段话:

Your widget’s OpenGL rendering context is made current when paintGL(), resizeGL(), or initializeGL() is called. If you need to call the standard OpenGL API functions from other places (e.g. in your widget’s constructor or in your own paint functions), you must call makeCurrent() first.

翻译一下:

调用paintGL()、resizeGL()或initializeGL()时,小部件的OpenGL渲染上下文变为当前。如果需要从其他位置(例如,在小部件的构造函数或自己的绘制函数中)调用标准OpenGL API函数,则必须首先调用makeCurrent()。

所以,问题在于出bug的代码不在上面提到的三个特殊函数里,因此必须在bind前加上makeCurrent,改过之后:

QOpenGLWidget::makeCurrent();

buffer->bind();
buffer->allocate(data, static_cast<int>(data.size()));
buffer->release();

问题解决!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值