在 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 上下文

将 OpenGL 应用程序与 Qt 集成?

在 Qt 的外部类中使用 OpenGL 上下文

如何在 Symfony EasyAdmin 3 中创建数据验证系统

无法在 swift 文件中创建上下文

是否可以在 Qt 的***窗口之间使用相同的 OpenGL 上下文?