《張繼德-Qt+RHI+-+(deepin)_20230322_131331.pdf》由會員分享,可在線閱讀,更多相關《張繼德-Qt+RHI+-+(deepin)_20230322_131331.pdf(17頁珍藏版)》請在三個皮匠報告上搜索。
1、0Qt RHI 在 deepin 中的應用12關于deepin理念目標3參與deepin通過社區官網快速了解社區產品、社區組織和社區介紹在社區里,有多種參與方式,例如豐富多彩的活動、文檔編輯、應用投遞、翻譯、代碼提交等友善、開放的溝通,不定期的培訓,與社區成員一起持續進步,獲得成長通過社區行為準則,了解社區鼓勵行為,并與社區成員順暢溝通4QRHI 是什么Qt Rendering Hardware Interface 無縫切換 Vulkan、OpenGL/ES、Metal、Direct 3D 一套代碼(包括Shader)跨平臺使用 用于Qt Quick、Qt Quick 3D、QQuickWid
2、get(6.4)https:/www.qt.io/blog/graphics-in-qt-6.0-qrhi-qt-quick-qt-quick-3d5Qt圖形發展史-早期QtXLibGCXDrawLineXFillRectangle.Qt3之前 封裝XLib的繪制命令 繪制操作實際上發生在X Server 只能實現簡單的繪圖,局限性大6Qt圖形發展史-初期QtXRenderXRenderCreateLineXRenderFillRectangle.Qt3-Qt4時代 封裝XRender(一個擴展協議)的繪制命令 繪制操作實際上發生在X Server 能實現更復雜的效果,如支持帶Alpha通道的
3、顏色7Qt圖形發展史-中期XShmPutImageQtQRasterPaintEngineQt4.6之后 本地繪制:繪制操作實際上發生在Qt中 通過XShm共享內存機制,Qt與X Server共享位圖數據 在繪制結束后調用XShmPutImage使共享內存里的位圖上屏 Qt可實現像素級控制8Qt圖形發展史-后期OpenGLQMLQt4.7之后 一套全新的UI框架:Qt Quick 默認基于OpenGL繪制 使用GLX或EGL與窗口系統(X)對接X ServerGLXEGLQt QuickQGLPaintEngine9Qt圖形發展史-后期OpenGLQMLQt5之后 重新設計QtQuick:Qt
4、 Quick2 不再使用QPainter,直接使用OpenGL接口X ServerGLXEGLQt QuickQSGRenderer10Qt圖形發展史-QRHIOpenGLQt6開始 不強制依賴OpenGL 在不同的平臺上,選擇不同的實現(性能更優),Windows上默認D3D11(允許修改)X ServerQt RHIVulkanMetalD3DWSI.GLXEGLSPIRV-CrossglslangQt Shader Tools11QRHI實現方式 編寫Vulkan風格的GLSL cmake中將GLSL編譯為SPIR-V(使用glslang)再將SPIR-V反編譯為GLSL(OpenGL風格)、HLSL、MSL等(使用SPIRV-Cross)運行時選擇相應的著色器代碼12QRHI&deepinDTKOpenGL硬件渲染Vulkan軟件渲染Qt RHIQPainter窗口合成器應用程序 DTK支持QtQuick(dtkdeclarative)DDE&deepin應用程序遷移至QtQuick版DTK 根據硬件/驅動程序的環境自動選擇最優的渲染后端 添加系統設置允許用戶指定渲染后端QtCairo13軟件渲染14OpenGL渲染15Vulkan渲染16