gpt4 book ai didi

qt - 为什么我不能在 Qt 中使用 OpenGL ES 3.0?

转载 作者:行者123 更新时间:2023-12-04 18:33:30 52 4
gpt4 key购买 nike

我在我的窗口上设置了一个QSurfaceFormat,这个表面格式将“3.0”设置为它的 GL 版本号。代码:

static QSurfaceFormat createSurfaceFormat() {
QSurfaceFormat format;
format.setSamples(4);
format.setDepthBufferSize(24);
format.setStencilBufferSize(8);
format.setVersion(3, 0);
return format;
}

int main(int argc, char *argv[]) {
// ...

QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
QWindow* window = (QWindow*) engine.rootObjects().first();
window->setFormat(::createSurfaceFormat());

// ...
}

此外,在 main() 中,我启用了 OpenGL ES 模式,如下所示:

QGuiApplication::setAttribute(Qt::AA_UseOpenGLES);

这意味着我正在请求 GL ES 3.0 上下文。

ANGLE docs说(在靠近开头的表格中)实现了 GL ES 3.0 -> D3D 11 API 翻译支持。根据 dxdiag.exe,我的系统支持 D3D 11。

但是当我启动我的应用程序时,其中包含此 QML 代码...

Text {
text: OpenGLInfo.majorVersion + "." + OpenGLInfo.minorVersion
}

...我看到显示“2.0”。另外,使用我描述的方法 here ,我确定我的 PC 上支持的最大着色语言版本是“100”,即 1.0。

同时,来自this Qt blog post我知道 Qt 支持 GL ES 3.0 应用程序。

那么为什么我不能在 Qt 中使用 OpenGL ES 3.0

最佳答案

您需要在创建窗口之前在 QWindow 上设置 QSurfaceFormat(通过 create())。如果您通过 QML 创建顶级窗口,则无法控制何时实际调用 create(),因此解决方案是在创建 Q(Gui)Application 之前更改默认表面格式:

int main(int argc, char **argv) {
// createSurfaceFormat() is the function you pasted above
QSurfaceFormat::setDefaultFormat(createSurfaceFormat());

QApplication app(argc, argv);
// etc.

关于qt - 为什么我不能在 Qt 中使用 OpenGL ES 3.0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40385482/

52 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com