提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:吴园园|2020-05-21 09:41:03.953|阅读 1480 次
概述:分析Qt 5.14中的新特性。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
Qt是目前最先进、最完整的跨平台C++开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。
Qt 5.14新功能页面提到:添加了独立于图形API的Scene Graph渲染引擎,这是第一个预览版而且是一个可选功能。这使得Qt Quick应用程序,除了OpenGL以外,还可以运行在Vulkan、Metal或Direct3D 11上
这具体是什么意思?
Qt 6技术概览一文中说过,Qt 6的一个主要目标是避免在Qt的许多代码中直接使用OpenGL,通过适当的抽象来兼容更多的图形API,比如Vulkan、Metal和Direct3D。当然,OpenGL(和OpenGL ES)仍然是一种选择。这背后的主要动机不是提升性能,而是确保Qt Everywhere在未来仍然成立,未来可能运行在不支持或不推荐使用OpenGL的平台和设备上。同时,能有这样一套先进的、结构简单且清晰易懂的API还可以创造许多可能性,特别是对于那些需要提高性能的场景(比如,更少的API开销实现更低的CPU占用率),以及在Qt Quick背后的渲染引擎和其他模块中增加新的功能,比如最近公布的Qt Quick 3D。
此外,能够使用平台首选的、支持最好的图形API来渲染用户界面,这对于那些使用Qt来呈现UI,同时还用到原生API写的2D或3D图形的应用程序来说是个好消息。在这种应用中,一般Qt无法决定使用何种图形API:例如,一个macOS上的桌面应用程序希望使用Metal去渲染自己的3D内容,同时依靠Qt Quick去呈现2D UI元素,此时如果Qt Quick也使用Metal渲染会大有好处。对于那些过去关注Qt 5.x时代图形部分变化的人来说,这一点很熟悉:概念上,这和当时Qt Quick渲染引擎引入对OpenGL core profile上下文的操作的支持一样 —— Qt Quick本身并不需要关心这个,但是为了能够集成使用了core profile的外部渲染代码,Qt Quick必须顾及和它们协同的能力。所以从这个角度看,这是Qt 5的自然延续,现在扩展到OpenGL之外的其他图形API。
到这里,有两个显而易见问题:
那么Qt 5.14中有什么?
对Qt所有(或至少大部分)有关图形渲染的部分进行全面的检查确实是Qt 6的目标。然而,停止支持Qt 5.x,然后试图设计、开发和重构一切,并指望一切都能变好,并不现实。正如Qt开发者过去、现在仍会提及的,任何API刚开始迭代时都可能不是最优的。因此,我们采用并行开发的方法,先专注于Qt中的一种特定的UI技术:Qt Quick。
Qt 5.14将发布使用全新渲染方法的Qt Quick预览版。默认情况下,不启用新的渲染方法,因此对应用程序来说不需要任何特殊的更改——会像在以往版本中一样,内部使用相同的直接基于OpenGL的渲染路径。但是,那些希望尝试新方法的人可以选择通过设置环境变量或使用main()中的C++ API启用新的渲染路径。我们希望尽早得到反馈,我们好继续迭代和演进,而不必等到Qt 6.0的发布。
并不是所有的应用程序都能直接使用QSG_RHI环境变量运行。在Scene Graph节点中执行OpenGL调用、或在自定义材质中使用GLSL着色器代码定制的QQuickItem实现,就不能启用RHI渲染。这同样适用于带有GLSL代码的ShaderEffect元件。其实有更好的自定义材质和效果的办法,但是这些需要对应用程序进行移植。在Qt 5.14和Qt 5.15之间我们会尝试做一些适配,但是在Qt 6.0之前,不会进行大范围的推广和移植。另一方面,许多现有的QML应用程序应该可以正常工作,即使底层渲染引擎使用完全不同的API(如Vulkan或Metal)。
为什么不采用XYZ类型的转换层?
首先,需要说明的是,尽管不能总是实现开箱即用,使用API和着色器转换层(如MoltenVK、MoltenGL、ANGLE、Zink等)的可能性仍然存在。例如,MoltenVK允许基于Vulkan在macOS上渲染Qt Quick的UI。如果Qt Quick应用程序希望只使用Vulkan,并且仍然希望在macOS上运行,就也可以采用MoltenVK。(只要用户系统中安装了正确配置的Qt库,MoltenVK也已经就绪,那就可以运行)
把这个转换层变成一个强制性的依赖,并基于此将它和Qt一起部署,情况就完全不一样了。
因此,Qt没有采用依赖低级API转换程序的方法,而是自己定义了3D图形的高级抽象(内部使用,暂时不向应用程序开放)。抽象层的后端有许多针对特定API的实现,这和许多Qt组件的模式差不多。有些后端和操作系统平台是固定搭配(Metal,D3D),而其他后端可以对应多个平台(Vulkan,OpenGL)。有一个新开发的着色器管理单元来实现不同后台的切换,它用到了一些第三方库,比如glslang和SPIRV-Cross。更多细节将在之后的博文中详述。现在,让我们的视线转向稍高层面,看看它会给Qt 5.14中的Qt Quick带来什么。
真的会有效吗?
让我们来看一个例子,即QUIt Coding著名的Qt5 Cinematic Experience演示程序。我们使用的是稍作修改的版本,其中少数Shader Effect Item被更新为同时可以使用两种Qt Quick Scene Graph渲染路径的格式。该版本可在这里找到。
正常启动应用程序,设置QSG_INFO=1,得到:
就像在调试输出中打印的日志一样,这是在Linux桌面的OpenGL上运行的:
qt.scenegraph.general: threaded render loop qt.scenegraph.general: Using sg animation driver qt.scenegraph.general: Animation Driver: using vsync: 16.95 ms qt.scenegraph.general: opengl texture atlas dimensions: 2048x1024 qt.scenegraph.general: GL_VENDOR: X.Org qt.scenegraph.general: GL_RENDERER: AMD Radeon (TM) R9 M360 (VERDE, DRM 3.23.0, 4.15.0-62-generic, LLVM 8.0.1) qt.scenegraph.general: GL_VERSION: 4.5 (Compatibility Profile) Mesa 19.2.0-devel (git-08f1cef 2019-07-25 bionic-oibaf-ppa) qt.scenegraph.general: GL_EXTENSIONS: ... qt.scenegraph.general: Max Texture Size: 16384 qt.scenegraph.general: Debug context: false
如果我们设置QSG_RHI=1,会发生什么变化?
qt.scenegraph.general: Using QRhi with backend OpenGL graphics API debug/validation layers: 0 QRhi profiling and debug markers: 0 qt.scenegraph.general: threaded render loop qt.scenegraph.general: Using sg animation driver qt.scenegraph.general: Animation Driver: using vsync: 16.95 ms qt.rhi.general: Created OpenGL context QSurfaceFormat(version 4.5, options QFlags<QSurfaceFormat::FormatOption>(DeprecatedFunctions), depthBufferSize 24, redBufferSize 8, greenBufferSize 8, blueBufferSize 8, alphaBufferSize 0, stencilBufferSize 8, samples -1, swapBehavior QSurfaceFormat::DoubleBuffer, swapInterval 1, colorSpace QSurfaceFormat::DefaultColorSpace, profile QSurfaceFormat::CompatibilityProfile) qt.rhi.general: OpenGL VENDOR: X.Org RENDERER: AMD Radeon (TM) R9 M360 (VERDE, DRM 3.23.0, 4.15.0-62-generic, LLVM 8.0.1) VERSION: 4.5 (Compatibility Profile) Mesa 19.2.0-devel (git-08f1cef 2019-07-25 bionic-oibaf-ppa) qt.scenegraph.general: MSAA sample count for the swapchain is 1. Alpha channel requested = no. qt.scenegraph.general: rhi texture atlas dimensions: 2048x1024
乍一看差别不大。它似乎还在使用OpenGL。然而,内部没有直接使用OpenGL,也没有Qt Quick Scene Graph中各处穿插的GLSL着色器源码。相反,会使用QRhi(即QtGui模块中的一个私有API,全称为Qt Rendering Hardware Interface)进行渲染。
让我们把它变得更有趣一点。设置QSG_RHI_BACKEND=vulkan:
qt.scenegraph.general: Using QRhi with backend Vulkan graphics API debug/validation layers: 0 QRhi profiling and debug markers: 0 qt.scenegraph.general: threaded render loop qt.scenegraph.general: Using sg animation driver qt.scenegraph.general: Animation Driver: using vsync: 16.95 ms WARNING: radv is not a conformant vulkan implementation, testing use only. qt.rhi.general: Physical device 0: 'AMD RADV CAPE VERDE (LLVM 8.0.1)' 19.1.99 qt.rhi.general: using this physical device qt.rhi.general: queue family 0: flags=0xf count=1 qt.rhi.general: queue family 1: flags=0xe count=2 qt.rhi.general: 55 device extensions available qt.scenegraph.general: MSAA sample count for the swapchain is 1. Alpha channel requested = no. qt.scenegraph.general: rhi texture atlas dimensions: 2048x1024 qt.rhi.general: Creating new swapchain of 3 buffers, size 1280x720, presentation mode 2
处理的很好。显然它现在正在通过Vulkan渲染。甚至更奇异的Qt Quick特性,如distance field text渲染、着色器效果和粒子效果都如预期的那样存在。
在RenderDoc中运行应用程序并捕获帧,结果如下所示。Qt Quick确实正在构建Vulkan管道状态对象和命令缓冲区,着色器代码以SPIR-V字节码格式提供。
就这些了。在本系列的第二篇博文中,我们将研究Qt 5.14为macOS和Windows提供了什么。在那之后,我们将继续研究所有这些是如何在底层工作的,以及对需要自定义材质和特效的应用程序有什么影响。
想要购买Qt正版授权的朋友可以点击""哦~~~
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@capbkgr.cn
文章转载自:本文探讨 SQL Server 中 NULL 和空值之间的区别,并讨论如何有效地处理它们。
Unity 是一款功能极其丰富的游戏引擎,允许开发人员将各种媒体集成到他们的项目中。但是,它缺少最令人兴奋的功能之一 - 将 Web 内容(例如 HTML、CSS 和 JavaScript)直接渲染到 3D 场景中的纹理上的能力。在本文中,我们将介绍如何使用 DotNetBrowser 在 Unity3D 中将 Web 内容渲染为纹理。
DevExpress v24.2帮助文档正式发布上线了,请按版本按需下载~
本教程将向您展示如何用MyEclipse构建一个Web项目,欢迎下载最新版IDE体验!
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@capbkgr.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢