如何为 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 上下文的主要内容,如果未能解决你的问题,请参考以下文章
如何为 3rd 方渲染提供空 QML 项的 OpenGL 上下文?