翻譯|使用教程|編輯:龔雪|2022-04-07 11:04:37.653|閱讀 258 次
概述:本文主要為大家介紹什么是Qt著色器工具,歡迎大家下載相關(guān)組件體驗(yàn)!
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
Qt技術(shù)交流群:166830288 歡迎一起進(jìn)群討論
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)的主要組件有:
注意:從 Qt 6.2 開始,C++ API 被認(rèn)為是私有的,不建議從應(yīng)用程序直接使用它們,而是直接或間接從 CMake 項(xiàng)目中使用 qsb 命令行工具。
應(yīng)用程序開發(fā)人員通常需要在 Qt Quick 場(chǎng)景中使用自定義著色器代碼,這些場(chǎng)景具有:
例如,考慮以下 QML 片段:
ShaderEffect {
width: 100; height: 100
fragmentShader: "myeffect.frag.qsb"
}
在這里, URL 指的是相對(duì)于 .qml 文件位置的 .qsb 文件,該應(yīng)用程序預(yù)計(jì)將在 .qml 文件旁邊提供 myeffect.frag.qsb。要從 Vulkan 樣式的 GLSL 源(其本身不需要隨應(yīng)用程序一起提供)生成該文件,應(yīng)用程序必須直接或通過 CMake 使用 qsb 工具。
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技術(shù)交流群:166830288 歡迎一起進(jìn)群討論
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:慧都網(wǎng)