C++用户界面开发框架Qt 6.x入门级指南 – Qt着色器工具

为开源UI开发框架QT提供商业组件的供应商Developer Machines——中国区正式代理-慧都网

介绍

Qt Shader Tools模块建立在 SPIR-V 开源生态系统之上,为了编译成 SPIR-V,使用 glslang,而翻译和反射是通过 SPIRV-Cross 完成的。

为了允许在 Qt 应用程序和库中编写一次着色器代码,所有着色器都应该用一种语言编写,然后编译成 SPIR-V。 这种着色语言目前是与 Vulkan 兼容的 GLSL,这不同于OpenGL风格的GLSL Qt 5.x所期望的。

然后通过翻译 SPIR-V 字节码以及反射信息(输入、输出、着色器资源)生成其他着色语言的源代码,例如 GLSL、HLSL 和Metal Shading语言。特别是对于 GLSL,这还涉及生成多个变体,这意味着适用于不同 GLSL 版本的源代码,例如 GLSL ES 100、GLSL ES 300、GLSL 120、150 等。然后将其全部打包到可序列化的 QShader 容器对象中, 通常以 .qsb 扩展名的文件形式存储在磁盘中。Qt 渲染硬件接口直接使用 QShader 实例,选择最适合运行时使用的图形 API 的着色器源或字节码,QShader 对象通常从应用程序附带的 .qsb 文件或 Qt 资源系统中的 Qt 本身反序列化。

一些平台提供将着色器源代码编译为类似于 SPIR-V 的中间格式选项,这涉及运行特定于平台的工具。对于 Direct 3D,qsb 工具提供了在生成 HLSL 源代码后从 Windows SDK 调用 fxc 工具的选项,然后它用 fxc 生成的 DXBC 二进制文件替换 HLSL 源代码。这可以对应用程序的运行时性能产生积极影响,因为它们不再需要自己进行第一阶段的编译(HLSL 源到 DXBC)。对于 macOS 和 iOS,XCode SDK 提供了类似的工具,这种方法的缺点是只能在它们各自的平台上运行这些工具。因此这最适合与 qsb 的 CMake 集成结合使用,因为在应用程序构建时进行着色器调节隐含地带有目标平台所需的知识以及可以调用哪些特定于平台的工具。

下图描述了调用 qsb 工具期间发生的步骤:

C++用户界面开发框架Qt 6.x入门级指南 - Qt着色器工具

Qt 着色器调节系统的主要组件有:

  • qsb 命令行工具
  • qsb 工具的 CMake 集成
  • QShader(QtGui 模块的一部分)
  • QShaderBaker(本模块的一部分,相当于 qsb 工具的库)

注意:从 Qt 6.2 开始,C API 被认为是私有的,不建议从应用程序直接使用它们,而是直接或间接从 CMake 项目中使用 qsb 命令行工具。

Qt Quick 的典型用法

应用程序开发人员通常需要在 Qt Quick 场景中使用自定义着色器代码,这些场景具有:

  • ShaderEffect项目,或
  • QQuickItem子类将场景图节点与通过子类化QSGMaterial.构建的自定义材质结合使用。

例如,考虑以下 QML 片段:

ShaderEffect {
width: 100; height: 100
fragmentShader: "myeffect.frag.qsb"
}

在这里,fragmentShader URL 指的是相对于 .qml 文件位置的 .qsb 文件,该应用程序预计将在 .qml 文件旁边提供 myeffect.frag.qsb。要从 Vulkan 样式的 GLSL 源(其本身不需要随应用程序一起提供)生成该文件,应用程序必须直接或通过 CMake 使用 qsb 工具。

Qt Quick 3D 的典型用法

Qt Quick 3D 直接使用 Shader Tools 模块在运行时执行着色器调节,此外还提供了在构建时为材质预生成着色器的解决方案,以防对着色器编译器和其他工具的运行时依赖性不理想。 在任何一种情况下,开发人员都不需要直接使用 qsb 工具,因为它是由 Qt Quick 3D 自己的框架和工具封装的。

Qt商用组件推荐

  • QtitanRibbon – Ribbon UI组件:是一款遵循Microsoft Ribbon UI Paradigm for Qt技术的Ribbon UI组件,QtitanRibbon致力于为Windows、LinuxMac OS X提供功能完整的Ribbon组件。
  • QtitanChart – Qt类图表组件:是一个C 库,代表一组控件,这些控件使您可以快速地为应用程序提供漂亮而丰富的图表。
  • QtitanDataGrid – Qt网格组件:提供了一套完整的标准 QTableView 函数和传统组件无法实现的独特功能。使您能够将不同来源的各类数据加载到一个快速、灵活且功能强大的可编辑网格中,支持排序、分组、报告、创建带状列、拖放按钮和许多其他方便的功能。
  • QtitanNavigation:QtitanNavigationDesignUI 组件是一组 GUI 控件,它实现了菜单、导航框、命令栏等导航界面,并让您以更少的滚动和点击次数有效地查看所有实体(工作区、网格或其他项目)。
  • QtitanDocking:允许您像 Visual Studio 一样为您的伟大应用程序配备可停靠面板和可停靠工具栏。黑色、白色、蓝色调色板完全支持 Visual Studio 2019 主题!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2023年3月20日 上午8:41
下一篇 2023年3月20日 上午8:51

相关推荐

  • 每年科研项目申报时间不一样

    每年科研项目申报时间不一样 随着科技的不断发展,科研项目申报时间也越来越多样化。有些项目可能在一年中多次申报,而有些项目则可能只在特定的时间段内申报。这种变化使得项目申报的时间变得…

    科研百科 2024年4月10日
    142
  • 科研项目转向生产方案

    科研项目转向生产方案:从概念到实践 近年来,随着科技的不断发展,科研项目的转向生产方案已经成为一个热门话题。科研项目转向生产方案是指将科研项目从概念转化为实际生产的过程,这个过程需…

    科研百科 2025年3月27日
    1
  • 四川省卫健委科研项目标书

    四川省卫健委科研项目标书 项目名称: 川西高原高山草甸生态系统保护与恢复研究 项目编号: [[项目编号]] 项目背景: 四川地处川西高原,是长江上游的水源地和全国重要的粮食生产基地…

    科研百科 2024年4月9日
    118
  • 项目管理指南(项目管理指南第七版)

    项目:项目包括一组独特的过程,其组成包括带有开始日期和结束日期,受协调和控制的活动,这些活动的实施用于实现项目目标。项目目标的实现需要提供符合特定要求的可交付成果。一个项目可能会受…

    科研百科 2023年9月6日
    223
  • 企业 科研项目经费 税

    企业科研项目经费税:促进科技创新的利器 随着科技的快速发展,企业科研项目经费税已经成为各国政府促进科技创新的重要措施之一。科研项目经费税是指对企业提供的科研项目经费进行税收减免,以…

    科研百科 2025年3月19日
    1
  • 四款手机工程小软件!测量图集算量管理造价全包含!这还不心动?

    四款手机工程小软件!测量图集算量管理造价全包含!这还不心动? 咱们工程人手机里啊,总要有这四个小软件才行,不然干啥都不方便。 我们这人手一份工程管理软件,建筑图集规范软件,工程测量…

    2022年6月7日
    319
  • 共享电动滑板车电动车小程序app开发方案(电动滑板车 共享)

    随着共享经济的发展,城市中便民交通工具越来越丰富多样,共享单车、共享电动车、共享汽车、共享电动滑板车等共享车辆让出行更加方便。我们今天着重讲下共享电动滑板车,新兴时尚的共享交通工具…

    科研百科 2024年5月6日
    134
  • 科研项目中后期管理包括

    科研项目中后期管理包括: 中后期管理是指在科研项目进行过程中,对项目进行有效的监督、管理和控制。这一过程中,项目团队需要对项目的进度、质量、成本等方面进行全面的管理。中后期管理的重…

    科研百科 2025年5月6日
    1
  • 如何精细化合同管理,实现无纸化高效管楼?(合同无纸化解决方案)

    在越来越多的办公场景中,我们都能看到这样的画面:行走在办公楼内的白领们,手上无一例外的都拿着电脑或平板。但若将时间往后推5年,同样场景下,电脑则会变成堆积如山的文件夹。 无纸化办公…

    科研百科 2024年3月17日
    166
  • 项目管理软件 建筑

    项目管理软件在建筑行业中的重要性 建筑行业是一个庞大而复杂的领域,需要协调各种资源和时间,以确保项目的按时完成和高质量的交付。在这个领域中,项目管理软件是一种必要的工具,可以帮助建…

    科研百科 2024年8月19日
    45