1、Qt5迁移到Qt6上的渲染性能问题研讨Qt Group中国资深解决方案工程师于海鹏Agenda1.Qt 6对于对于3D图形的抽象层图形的抽象层2.Qt 6.9改进改进移动移动/嵌入式设备上使用嵌入式设备上使用 GLES的的MSAAWindows和和D3D上的延迟上的延迟3.Benchmarking Qt 5 vs.Qt 6区别区别CPU和内存使用情况调查结果和内存使用情况调查结果26 May 20256 May 20253Qt 5.15OpenGL(ES)QWindow,QOpenGLContext,QOpenGLFunctions,Qt QuickQt MultimediaQt Quick
2、3DOpenGL(ES)QWindow,QOpenGLContext,QVulkanInstance,VulkanDirect 3DMetalQRhi,Shader pipelineQt 6.8Qt QuickQt MultimediaQt Quick 3D Qt 6直接支持五大主流3D API 优先考虑各平台主要的、厂商支持的 API 旧版 API 中未包含的功能 正在逐步淘汰/模拟 OpenGL(ES)的平台 性能评估 本身并非旨在显著提升性能 降低驱动程序开销+以不同的方式处理 抽象层聚焦:成本,机会6 May 20254支持现代 API 的价值 如果硬件支持,可以使用 GL_EXT_m
3、ultisampled_render_to_texture GL 实现隐式分配多重采样缓冲区 自动解析为(非多重采样)纹理6 May 20255新功能:MSAA,GLES(Qt 6.9)Create multisample renderbuffer-render to it-resolve to(non-multisample)textureglFramebufferTexture2DMultisampleEXT(,texture,.,sample_count)-render to it 不需要多重采样数据-无需将其从片上写入外部存储器 Might play nicer with tile-b
4、ased GPU architectures(Adreno,Mali,.)View3D,item layers,ShaderEffect适用于此功能 Qt Quick 3D测试:41-55 FPS(Mali GPU,Android 平板)6 May 20256新功能:MSAA,GLES(Qt 6.9)QWindow:requestUpdate(),同时驱动QQuickWindow 更新 自 Qt 6.6 起,当频率 60 Hz 时,5 毫秒定时器默认自动减少 优化一些平台上的效果 CVDisplayLink在macOS/iOS上 在 D3D11/12上执行类似操作 在专用线程上调用IDXGIO
5、utput:WaitForVBlank Qt 6.8:帧延迟可等待对象 确保在帧仍在呈现时不会开始渲染 SetMaximumFrameLatency(2)降低延迟6 May 20257新功能:Windows上的驱动更新Qt 6.76 May 20258新特性:Windows 6.9上的驱动更新6 May 20259新特性:Windows 6.9上的驱动更新Qt 6.8Qt 6.9Qt 5 6 Benchmarking FindingsQt 6 是否更好?(CPU/memory 使用情况)区别修复6 May 2025106 May 202511https:/ 5.15.18 OpenGLQt 6
6、 D3D11Qt 6 OpenGLQt 6 Vulkan%,lower is betterIt Depends 不同的渲染目标大小使所有比较无效 Qt 5渲染基于1280 x720.Qt 6渲染基于1600 x900.我刚好在1440p屏幕上使用了125%的缩放比例 1280 x720*1.25=1600 x900 无论是否启用Qt:AA_EnableHighDpiScaling,Qt 5都不会执行相同的操作 非整型缩放因子6 May 202512区别:高DPI支持Plain bugs6 May 202513 一些“Qt 5到6性能回归”是6.x 的错误