我在我的窗口上设置了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 ?
答案 0 :(得分:4)
您需要在创建窗口之前在QWindow上设置QSurfaceFormat(通过create()
)。如果您通过QML创建顶级窗口,则无法控制实际调用create()
的时间,因此解决方案是在创建Q(Gui)应用程序之前更改默认表面格式:
int main(int argc, char **argv) {
// createSurfaceFormat() is the function you pasted above
QSurfaceFormat::setDefaultFormat(createSurfaceFormat());
QApplication app(argc, argv);
// etc.