如何为 QtQuick 应用程序选择 OpenGL 上下文

Posted

技术标签:

【中文标题】如何为 QtQuick 应用程序选择 OpenGL 上下文【英文标题】:How to choose the OpenGL context for QtQuick applications 【发布时间】:2019-04-15 08:37:57 【问题描述】:

我正在编写一个 QtQuick 应用程序,主要是在 QML 中,但我有一些部分更直接地使用 OpenGL(一个 OpenSceneGraph 场景)。由于某些原因,我想使用 OpenGL 版本 >= 3.3,但 Qt 只选择了 3.0 实现。我的代码是:

main.cpp:

#include <QApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])

    // Create the app.
    QApplication app(argc, argv);

    // Start the UI.
    QQmlApplicationEngine engine;
    engine.load(QUrl("main.qml"));

    return app.exec();

main.qml:

import QtQuick 2.7
import QtQuick.Controls 2.2

ApplicationWindow 
  id: root
  width: 800
  height: 600
  title: "App"

  visible: true

  Label 
    text: "OpenGL: " + OpenGLInfo.majorVersion + ' ' + OpenGLInfo.minorVersion + OpenGLInfo.profile
  

【问题讨论】:

您在哪里阅读有关 OpenGL 3.4 和 3.5 存在的信息? 什么意思?我知道我的计算机上有足够新的 OpenGL 实现(即 Mesa 到 OpenGL 4.5),例如,我的一些 GLSL 着色器需要构建 GLSL 3.30。 我指的是 OpenGL 3.4 & 3.5 don't exist.它从 3.3 到 4.0。 哦,是的,你是对的。我的意思是3.3。但这并没有改变我的问题。 【参考方案1】:

一种方法是在app.exec()之前设置默认的QSurfaceFormat。

#include <QSurfaceFormat>

...

QSurfaceFormat surfaceFormat;
surfaceFormat.setMajorVersion(3);
surfaceFormat.setMinorVersion(3);
surfaceFormat.setProfile(QSurfaceFormat::CoreProfile);
QSurfaceFormat::setDefaultFormat(surfaceFormat);

【讨论】:

以上是关于如何为 QtQuick 应用程序选择 OpenGL 上下文的主要内容,如果未能解决你的问题,请参考以下文章

如何为 OpenGL 文本渲染计算字符映射中的最佳字形边界

如何为 Qt 5 安装 OpenGL

如何为 3rd 方渲染提供空 QML 项的 OpenGL 上下文?

如何为 OpenGL 的线条添加发光效果? [关闭]

如何为我的 GIF tilesheet 制作动画(OpenGL、DevIL、C++)

您如何为 webgl 应用程序创建验收测试?