如何确定Qt在我的电脑上使用哪个GLSL(ESSL)版本?

时间:2016-11-02 13:28:42

标签: qt opengl-es qml glsl

我在Qt中通过Canvas3D使用 ESSL (OpenGL ES着色语言)。在我的机器上运行Windows并设置了以下内容:

QGuiApplication::setAttribute(Qt::AA_UseOpenGLES);
<{1>}中的

,这意味着GL调用由Qt转换为GL ES调用,由ANGLE转换为Direct3D调用。至少我相信这意味着什么。我使用以下测试QML代码来查看使用的OpenGL版本:

main()

显示&#34; 2.0&#34;。我不确定这是GL API版本还是GL ES API版本。此外,我不确定此GL / GLES版本映射到哪个ESSL版本。我找到了一个映射版本here的表格,但这对我来说不够可靠。与ESSL文档不同,它以无小数点格式列出ESSL版本,例如版本&#34; 330&#34;而不是&#34; 3.3&#34;,而它缺乏例如版本3.00(又名300)the ESSL docs提到。

所以问题是:
如何确定Qt在我的电脑上使用的ESSL版本?

旁注 - 提示我的问题:

我想使用Text { text: OpenGLInfo.majorVersion + "." + OpenGLInfo.minorVersion } ESSL功能,但我收到以下错误:

textureSize

我的测试着色器看起来像这样:

ERROR: 0:4: 'textureSize' : no matching overloaded function found 
ERROR: 0:4: '=' :  cannot convert from 'const float' to 'highp 2-component vector of int'

2 个答案:

答案 0 :(得分:0)

我找到了一种迂回的方式来做到这一点。在着色器中执行以下操作:

if(__VERSION__  > 150) {
    gl_FragColor = vec4(1.0, 0.0. 0.0, 1.0);
}

并使用数字150来查找它何时绘制红色,何时不显示。

但这种方式并不好。

答案 1 :(得分:0)

我找到了一个更好的方法:

gl.getString(gl.SHADING_LANGUAGE_VERSION);

但是,它似乎不适用于Canvas3D。请参阅此post of mine