在 Qt 中创建原始 GL 上下文?
Posted
技术标签:
【中文标题】在 Qt 中创建原始 GL 上下文?【英文标题】:Create raw GL context in Qt? 【发布时间】:2014-01-30 04:45:52 【问题描述】:我正在将 Qt 用于一个项目。它有一些 QGLWidgets 并且它们工作得很好。
问题是,我想使用一些遗留代码,这些代码使用原始 OpenGL 命令进行一些纹理和网格处理(将网格渲染到图像等)。我想在我的 Qt 代码中调用这些函数,但当然这需要我在调用 OpenGL 命令之前设置一个新的 OpenGL 上下文。
我尝试执行以下操作:
QGLContext context(QGLFormat::defaultFormat());
std::cout << "context creation: " << context.create() << std::endl;
if(!context.isValid())
std::cout << "Cannot create GL context" << std::endl;
return false;
context.makeCurrent();
callLegacyOpenGLCode();
但它不起作用。 QGLContext::create() 返回错误。这是在 Windows 7 上使用 Qt 4.8 编译的,支持 OpenGL。
这是要求 Qt 为我创建新的 OpenGL 上下文的错误方式吗?我应该怎么做?
【问题讨论】:
创建一个您不显示的新 glwidget 并使用它的上下文 【参考方案1】:对于其他搜索此问题的人,@ratchetfreak 的建议是一个很好的建议。以下代码正常工作:
QGLWidget tmpwidget;
if(!tmpwidget.isValid())
std::cout << "Cannot create GL context" << std::endl;
return false;
tmpwidget.makeCurrent();
callLegacyOpenGLCode();
【讨论】:
这在最近的版本中是否不再起作用(使用 QOpenGLWidget 而不是 QGLWidget)?至少当我在你有 callLegacyOpenGLCode() 的地方调用 glGetString(GL_VERSION) 时,它返回 null以上是关于在 Qt 中创建原始 GL 上下文?的主要内容,如果未能解决你的问题,请参考以下文章
在 SDL 1.3 中创建 OpenGL 3.2/3.x 上下文