Qt 中编译参数-opengl 探究

在编译Qt的时候,-opengl 这个参数有很多的选项 dynamic、es2、desktop等选项。帮助文档中表示。该选项为开启opengl支持 es2 (default on Windows), desktop (default on Unix), dynamic (Windows only)。

那么这些参数是通过什么手段来影响Qt的功能的,它们决定什么了那些功能,详见以下分析过程

1.部分名词解析

  • egl 渲染API(如OpenGLES)和原生窗口系统之间的接口.可以通过eglBInd 设置不同的渲染API

  • glx x11 封装的对OpenGL(ES)的支持,可以通过config设置不同的渲染API

Qt 中编译参数-opengl 探究_第1张图片

2.功能介绍

  • es2 使能 QOpenGLFunctions_ES_2 类。该类包含了opengl es2 的所有功能。该选项不能与desktop 共存

  • desktop 使能 QPenGLFUnctions_X_X类。这些类包含了opengl各个版本对应的API。该选项同样不能与es2 共存。

Qt 中编译参数-opengl 探究_第2张图片

  • dynamic 只能在window下使用。该参数指明在 platform插件的window 插件中,OpenGL(ES) 是动态加载的。在linux下的图形协议x11中的xcb_glx、xcb_egl ,wayland下wayland_egl 已经实现了opengl (es )的动态加载。所以linux下不需要该参数

  • 注意:desktop 和es2 编译参数不能同时使用,这并不代表我们使用desktop编译的时候就不能采用opengl es来渲染,Qt提供了QPenGLFUnctions类,该类封装了OpenGL(ES)的通用函数,也就是说,使用这个类无论是desktop编译还是 es2的编译参数都没有关系。他们差异在哪里。desktop和es 2的编译参数有什么区别,例如当采用 desktop 作为编译参数的时候,Qt会开启对于desktop特殊API的封装 QPenGLFUnctions_XX_XX 。我们可以使用这些类可以调用特殊的API。另外,当我们使用desktop的时候,渲染后端会默认设置为desktop,es 2 同理。在某些嵌入式平台上GPU不支持desktop版本的opengl。那么就需要手动使用QSurfaceFormat ::setRenderableType设置时渲染后端,同样也是动态加载OpenGL(ES)库。

3.从编译参数到Makefile文件生成的过程

  1. 我们执行configure时,传入的参数会通过configure.json来生成一些配置条件传递给mkspace/featrue/qt_configure.prf解析,并判断传入的参数是否合理,错误则停止。

  1. 在判断参数是否合理的同时,还会根据config.test 来判断相关配置参数了依赖是否满足,config.test 文件夹很多工程。这些工程的目的是测试每一个Qt的配置选项。在configure的时候会编译这些工程,如果正确的编译链接过。表示该功能正常。

  1. 最后,qt_configure.prf根据配置,生成一些.pri和.h文件。pri 文件有pro引用,决定了Makefile文件的生成。.h 定义一些在代码中的宏和功能开关。最后。生成最顶层的Makefile 这也是我们下载源码直接编译某一模块会出现错误的原因

  1. 最后一步,在make的时候 调用qmake ,递归的将pro专为话Makefile文件,执行编译过程。

Qt 中编译参数-opengl 探究_第3张图片

你可能感兴趣的:(qt,开发语言,linux)