介紹
Qt Shader Tools模塊建立在 SPIR-V 開源生態(tài)系統(tǒng)之上,為了編譯成 SPIR-V,使用 glslang,而翻譯和反射是通過 SPIRV-Cross 完成的。
為了允許在 Qt 應(yīng)用程序和庫中編寫一次著色器代碼,所有著色器都應(yīng)該用一種語言編寫,然后編譯成 SPIR-V。 這種著色語言目前是與 Vulkan 兼容的 GLSL,這不同于OpenGL風(fēng)格的GLSL Qt 5.x所期望的。
然后通過翻譯 SPIR-V 字節(jié)碼以及反射信息(輸入、輸出、著色器資源)生成其他著色語言的源代碼,例如 GLSL、HLSL 和Metal Shading語言。特別是對(duì)于 GLSL,這還涉及生成多個(gè)變體,這意味著適用于不同 GLSL 版本的源代碼,例如 GLSL ES 100、GLSL ES 300、GLSL 120、150 等。然后將其全部打包到可序列化的 QShader 容器對(duì)象中, 通常以 .qsb 擴(kuò)展名的文件形式存儲(chǔ)在磁盤中。Qt 渲染硬件接口直接使用 QShader 實(shí)例,選擇最適合運(yùn)行時(shí)使用的圖形 API 的著色器源或字節(jié)碼,QShader 對(duì)象通常從應(yīng)用程序附帶的 .qsb 文件或 Qt 資源系統(tǒng)中的 Qt 本身反序列化。
一些平臺(tái)提供將著色器源代碼編譯為類似于 SPIR-V 的中間格式選項(xiàng),這涉及運(yùn)行特定于平臺(tái)的工具。對(duì)于 Direct 3D,qsb 工具提供了在生成 HLSL 源代碼后從 windows SDK 調(diào)用 fxc 工具的選項(xiàng),然后它用 fxc 生成的 DXBC 二進(jìn)制文件替換 HLSL 源代碼。這可以對(duì)應(yīng)用程序的運(yùn)行時(shí)性能產(chǎn)生積極影響,因?yàn)樗鼈儾辉傩枰约哼M(jìn)行第一階段的編譯(HLSL 源到 DXBC)。對(duì)于 macOS 和 IOS,XCode SDK 提供了類似的工具,這種方法的缺點(diǎn)是只能在它們各自的平臺(tái)上運(yùn)行這些工具。因此這最適合與 qsb 的 CMake 集成結(jié)合使用,因?yàn)樵趹?yīng)用程序構(gòu)建時(shí)進(jìn)行著色器調(diào)節(jié)隱含地帶有目標(biāo)平臺(tái)所需的知識(shí)以及可以調(diào)用哪些特定于平臺(tái)的工具。
下圖描述了調(diào)用 qsb 工具期間發(fā)生的步驟:
Qt 著色器調(diào)節(jié)系統(tǒng)的主要組件有:
- qsb 命令行工具
- qsb 工具的 CMake 集成
- QShader(QtGui 模塊的一部分)
- QShaderBaker(本模塊的一部分,相當(dāng)于 qsb 工具的庫)
注意:從 Qt 6.2 開始,C++ API 被認(rèn)為是私有的,不建議從應(yīng)用程序直接使用它們,而是直接或間接從 CMake 項(xiàng)目中使用 qsb 命令行工具。
Qt Quick 的典型用法
應(yīng)用程序開發(fā)人員通常需要在 Qt Quick 場景中使用自定義著色器代碼,這些場景具有:
- ShaderEffect項(xiàng)目,或
- QQuickItem子類將場景圖節(jié)點(diǎn)與通過子類化QSGMaterial.構(gòu)建的自定義材質(zhì)結(jié)合使用。
例如,考慮以下 QML 片段:
ShaderEffect {
width: 100; height: 100
fragmentShader: "myeffect.frag.qsb"
}
在這里,fragmentShader URL 指的是相對(duì)于 .qml 文件位置的 .qsb 文件,該應(yīng)用程序預(yù)計(jì)將在 .qml 文件旁邊提供 myeffect.frag.qsb。要從 Vulkan 樣式的 GLSL 源(其本身不需要隨應(yīng)用程序一起提供)生成該文件,應(yīng)用程序必須直接或通過 CMake 使用 qsb 工具。
Qt Quick 3D 的典型用法
Qt Quick 3D 直接使用 Shader Tools 模塊在運(yùn)行時(shí)執(zhí)行著色器調(diào)節(jié),此外還提供了在構(gòu)建時(shí)為材質(zhì)預(yù)生成著色器的解決方案,以防對(duì)著色器編譯器和其他工具的運(yùn)行時(shí)依賴性不理想。 在任何一種情況下,開發(fā)人員都不需要直接使用 qsb 工具,因?yàn)樗怯?Qt Quick 3D 自己的框架和工具封裝的。
Qt商用組件推薦
- QtitanRibbon - Ribbon UI組件:是一款遵循Microsoft Ribbon UI Paradigm for Qt技術(shù)的Ribbon UI組件,QtitanRibbon致力于為Windows、linux和Mac OS X提供功能完整的Ribbon組件。
- QtitanChart - Qt類圖表組件:是一個(gè)C ++庫,代表一組控件,這些控件使您可以快速地為應(yīng)用程序提供漂亮而豐富的圖表。
- QtitanDataGrid - Qt網(wǎng)格組件:提供了一套完整的標(biāo)準(zhǔn) QTableView 函數(shù)和傳統(tǒng)組件無法實(shí)現(xiàn)的獨(dú)特功能。使您能夠?qū)⒉煌瑏碓吹母黝悢?shù)據(jù)加載到一個(gè)快速、靈活且功能強(qiáng)大的可編輯網(wǎng)格中,支持排序、分組、報(bào)告、創(chuàng)建帶狀列、拖放按鈕和許多其他方便的功能。
- QtitanNavigation:QtitanNavigationDesignUI 組件是一組 GUI 控件,它實(shí)現(xiàn)了菜單、導(dǎo)航框、命令欄等導(dǎo)航界面,并讓您以更少的滾動(dòng)和點(diǎn)擊次數(shù)有效地查看所有實(shí)體(工作區(qū)、網(wǎng)格或其他項(xiàng)目)。
- QtitanDocking:允許您像 Visual Studio 一樣為您的偉大應(yīng)用程序配備可??棵姘搴涂赏?抗ぞ邫?。黑色、白色、藍(lán)色調(diào)色板完全支持 Visual Studio 2019 主題!






