- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
张继德Qt+RHI+deepin20230322131331
展开查看详情
1 .Qt RHI 在 deepin 中的应用 0
2 .1
3 .关于deepin 目标 理念 ➢ ➢ ➢ ➢ 2
4 .参与deepin 通过社区官网快速了解社 通过社区行为准则,了解社区 在社区里,有多种参与方式, 友善、开放的沟通,不定期的 区产品、社区组织和社区 鼓励行为,并与社区成员顺畅 例如丰富多彩的活动、文档 培训,与社区成员一起持续进 介绍 沟通 编辑、应用投递、翻译、代 步,获得成长 码提交等 3
5 . QRHI 是什么 Qt Rendering Hardware Interface ➢ 无缝切换 Vulkan、OpenGL/ES、 Metal、Direct 3D ➢ 一套代码(包括Shader)跨平台使 用 ➢ 用于Qt Quick、Qt Quick 3D、 QQuickWidget(6.4) https://www.qt.io/blog/graphics-in-qt-6.0-qrhi-qt-quick-qt-quick-3d 4
6 .Qt图形发展史-早期 Qt3之前 ➢ 封装XLib的绘制命令 XLib Qt ➢ 绘制操作实际上发生在X Server GC ➢ 只能实现简单的绘图,局限性大 XDrawLine XFillRectangle ...... 5
7 .Qt图形发展史-初期 Qt3-Qt4时代 ➢ 封装XRender(一个扩展协议) XRender Qt 的绘制命令 ➢ 绘制操作实际上发生在X Server XRenderCreateLi ➢ 能实现更复杂的效果,如支持带 ne XRenderFillRecta Alpha通道的颜色 ngle ...... 6
8 .Qt图形发展史-中期 Qt4.6之后 ➢ 本地绘制:绘制操作实际上发生 XShmPutImage QRasterPaintEngine 在Qt中 ➢ 通过XShm共享内存机制,Qt与X Qt Server共享位图数据 ➢ 在绘制结束后调用XShmPutImage 使共享内存里的位图上屏 ➢ Qt可实现像素级控制 7
9 .Qt图形发展史-后期 Qt4.7之后 ➢ 一套全新的UI框架:Qt Quick QML X Server ➢ 默认基于OpenGL绘制 ➢ 使用GLX或EGL与窗口系统(X)对 OpenGL Qt Quick 接 GLX EGL QGLPaint Engine 8
10 .Qt图形发展史-后期 Qt5之后 ➢ 重新设计QtQuick:Qt Quick2 QML X Server ➢ 不再使用QPainter,直接使用 OpenGL接口 OpenGL Qt Quick GLX EGL QSGRenderer 9
11 .Qt图形发展史-QRHI Qt6开始 OpenGL ➢ 不强制依赖OpenGL X Server Qt RHI ➢ 在不同的平台上,选择不同的实 Vulkan Qt Shader 现(性能更优),Windows上默 GLX EGL Tools 认D3D11(允许修改) Metal WSI ... glslang D3D SPIRV-Cross 10
12 .QRHI实现方式 ➢ 编写Vulkan风格的GLSL ➢ cmake中将GLSL编译为SPIR-V (使用glslang) ➢ 再将SPIR-V反编译为GLSL (OpenGL风格)、HLSL、MSL 等(使用SPIRV-Cross) ➢ 运行时选择相应的着色器代码 11
13 .QRHI & deepin 窗口合成器 应用程序 ➢ DTK支持QtQuick(dtkdeclarative) ➢ DDE & deepin应用程序迁移至 QtQuick版DTK DTK ➢ 根据硬件/驱动程序的环境自动 选择最优的渲染后端 Qt RHI QPainter ➢ 添加系统设置允许用户指定渲 硬件渲染 软件渲染 染后端 OpenGL Vulkan Qt Cairo 12
14 .软件渲染 13
15 .OpenGL渲染 14
16 .Vulkan渲染 15
17 .16