• 10285阅读
  • 7回复

[提问]Qt5中编译参数"-opengl desktop"、'-no-angle'的作用 [复制链接]

上一主题 下一主题
离线isml
 

只看楼主 倒序阅读 楼主  发表于: 2014-11-23
这几个参数我看了半天没完全搞明白其中的作用,这里只说在Windows平台下:

1、Qt4 中没有这些参数,是不是说明Qt 4的GUI都是通过DirectX来渲染的?

2、在Qt5中,如果使用“-opengl desktop”,是不是说明GUI是通过OpenGL渲染?如果不使用,是不是就是通过DirectX渲染?

3、“-no-angle”对是用DirectX还是OpenGL渲染有什么影响?
离线dbzhang800

只看该作者 1楼 发表于: 2014-11-23
在Qt4时代,Qt既不使用 OpenGL, 也不用 DirectX。(当然,QGLWidget 这一部分东西除外。)

在Qt5时代,QtQuick2 使用的是OpenGL。这样一来,Windows下面的问题就出来了:Windows下的显卡驱动支持的是DirectX,默认带的OpenGL版本非常低,基本不能用。

要解决这个问题,有两种方式:

1. 确保你安装了支持OpenGL 2 或以上版本的显卡驱动。
2. 使用Angle将DirectX封装一下,模拟出一套OpenGL接口。

至于哪种方式好,自己选。
离线isml

只看该作者 2楼 发表于: 2014-11-23
多谢版主,我明白一点了。
对于Qt5中的QtQuick2,如果使用angle,这样OpenGL驱动不需要最新的,如果不使用angle,则需要确保高版本的OpenGL驱动,这样理解没错吧?

而不管是Qt4还是Qt5,QtWidgets都是没区别的吧?
离线isml

只看该作者 3楼 发表于: 2014-11-23
另外,上面的说明只解释了“-no-angle”的作用。对于"-opengl desktop",在编译的时候,加不加这个参数有什么区别呢?
离线彩阳

只看该作者 4楼 发表于: 2014-11-24
Qt编译有两种控制方式:
1、取决于是否使用什么层次的OpenGL API:这里有三个选择:-opengl desktop、-opengl es2和-no-opengl,将来还会增加-opengl es3;
2、如果选用OpenGL ES 2的API渲染的话,Qt也给出了三种方案:-no-angle,直接使用OpenGL的API进行渲染,需要显卡厂商支持OpenGL ES 2.0,对应libGLESv2.dll、libEGL.dll;-angle,如果客户机器不支持OpenGL ES 2.0渲染,但是支持OpenGL 1.5,或者支持DirectX 9.0,那么可以使用-angle这个解决方案转换为DirectX的渲染API进行渲染,需要D3DCompiler_4(x).dll以及libGLESv2.dll、libEGL.dll;-angle-d3d11,如果客户机器支持DirectX 11(需要Windows 7以上,通常情况也支持OpenGL ES 2.0),想用最新的DirectX API进行渲染,那么可以使用这个方法进行编译。

最后Qt 5.4想将选用渲染API的逻辑推后到运行期,目前Qt 5.4 beta这点还有问题,所以目前还是不行的。
2条评分好评度+1贡献值+1
prcseraph 好评度 +1 - 2014-12-15
prcseraph 贡献值 +1 - 2014-12-15
上海Qt开发联盟,热忱地欢迎你的加入!
离线isml

只看该作者 5楼 发表于: 2014-11-24
多谢解释。
对应于Qt官方网站上的预编译包,我能不能这样理解:
1.Qt 5.3.2 for Android (Windows 32-bit, 817 MB) (Info)
是用“-opengl es2”编译的
2.Qt 5.3.2 for Windows 32-bit (VS 2013, OpenGL, 559 MB) (Info)
是用"-opengl desktop"编译的
3.Qt 5.3.2 for Windows 32-bit (VS 2013, 561 MB) (Info)
没有使用"-opengl"编译的
离线dbzhang800

只看该作者 6楼 发表于: 2014-11-25
首先,for Windows的和 for Android没必要放一块比较。无论是 angle 还是 opengl desktop 和 Android都没有关系。

其次,Qt官方为Windows平台提供两种预编译包,一种使用Angle模拟的OpenGL (ES2)接口;一种使用系统提供的OpenGL (deskop)接口。Configure的时候,默认是前者,传入 -opengl desktop的话,则是后者!


彩阳对这两个选项的解释很到位。从他的解释中,你可以知道:在Windows下,还有另外两种组合:使用系统提供的OpenGL接口(但只使用ES2);完全不使用OpenGL(包括QtQuick在内的大批东西将无法使用)。

即:

1. 完全不用OpenGL:  选项 -no-opengl
2. 使用Angle模拟的OpenGL ES2 接口  -opengl es2 -angle (默认选项)
3. 使用系统OpenGL提供的 ES2 接口部分  -opengl es2 -no-angle
4. 使用系统 OpenGL 提供的完整接口 -opengl desktop

在实际操作中,1、3 这两个东西没什么用。剩下的就是 2、4这两个(也对应官方为你准备的两种预编译包)。
7条评分好评度+2贡献值+2金钱+1威望+2
wangcaipo 好评度 +1 - 2018-05-08
wangcaipo 贡献值 +1 - 2018-05-08
wangcaipo 威望 +1 - 2018-05-08
wangcaipo 金钱 +1 - 2018-05-08
prcseraph 好评度 +1 - 2014-12-15
prcseraph 贡献值 +1 - 2014-12-15
prcseraph 威望 +1 - 2014-12-15
离线isml

只看该作者 7楼 发表于: 2014-11-25
多谢版主。
这么说,对应关系应该是这样的?
Qt 5.3.2 for Windows 32-bit (VS 2013, 561 MB)  是对应 -opengl es2 -angle
Qt 5.3.2 for Windows 32-bit (VS 2013, OpenGL, 559 MB) 是对应-opengl desktop

我一直以为这两个预编译包的区别是OpenGL和DirectX的区别。。。
快速回复
限100 字节
 
上一个 下一个