<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span>Hi all,<br>
</span></div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<div><br>
</div>
<div>As outlined by Jani a few weeks ago [1], Qt 6.0 is expected to have a<br>
</div>
<div>Structure and Platform Freeze at the end of June. One essential piece<br>
</div>
<div>there is the graphics story. After evolving for some years (Qt<br>
</div>
<div>Contributor Summit 2017, 2018, 2019 notes can be found in [2], [3]<br>
</div>
<div>[4]), the plan described last spring [5] has been progressing<br>
</div>
<div>nicely. We are now moving on to flip a few switches in the dev branch<br>
</div>
<div>in order to begin switching over to the new rendering architecture in<br>
</div>
<div>earnest.<br>
</div>
<div><br>
</div>
<div>This affects Qt Quick and dependent modules at the moment. Plain<br>
</div>
<div>widget applications, and this includes QOpenGLWindow and<br>
</div>
<div>QOpenGLWidget, are not currently affected by this work. (apart from<br>
</div>
<div>minor restructuring, such as moving most QOpenGL* convenience classes<br>
</div>
<div>into the Qt OpenGL module, out from Qt Gui).<br>
</div>
<div><br>
</div>
<div>As the documentation [6] describes, Qt 5.14 and 5.15 have shipped the<br>
</div>
<div>new, graphics API abstracted Qt Quick scenegraph rendering engine as<br>
</div>
<div>an experimental, opt-in feature, meaning one had to set an environment<br>
</div>
<div>variable or call some C++ APIs to enable it. The same applies to the<br>
</div>
<div>dev branch as of today. This is what's going to change now.<br>
</div>
<div><br>
</div>
<div>== Phase One ==<br>
</div>
<div><br>
</div>
<div>As the first step, the defaults will be switched around. Instead of<br>
</div>
<div>opting in by setting the environment variable QSG_RHI=1, one can now<br>
</div>
<div>opt out, if desired, by setting QSG_NO_RHI=1.<br>
</div>
<div><br>
</div>
<div>This switch is expected to happen as soon as possible. (i.e. today or<br>
</div>
<div>the next few days at latest) This is a temporary, short-term<br>
</div>
<div>measure. The direct OpenGL rendering path is kept available to make<br>
</div>
<div>testing and transitioning easier. However, this will disappear in the<br>
</div>
<div>coming weeks.<br>
</div>
<div><br>
</div>
<div>In fact, some leaf modules, like Qt Quick 3D, have during the last few<br>
</div>
<div>days already merged patches that purge their direct OpenGL rendering<br>
</div>
<div>backends, leaving only the new, QRhi-based rendering code path in<br>
</div>
<div>place. This shows that we are in good shape, and can likely keep the<br>
</div>
<div>length of this phase quite short, moving on to phase two as quickly as<br>
</div>
<div>possible.<br>
</div>
<div><br>
</div>
<div>This phase presents no source breaks, meaning all modules and<br>
</div>
<div>applications continue to compile as-is, but advanced usages of Qt<br>
</div>
<div>Quick, that are not compatible with the RHI-based graphics stack, may<br>
</div>
<div>trigger run time breaks.<br>
</div>
<div><br>
</div>
<div>== Phase Two ==<br>
</div>
<div><br>
</div>
<div>Purging the direct OpenGL bits in Qt Quick is work in progress,<br>
</div>
<div>although none of the patches are merged yet. In this second phase we<br>
</div>
<div>are going to proceed with that work, which means the possibility<br>
</div>
<div>of opting out (QSG_NO_RHI) will disappear.<br>
</div>
<div><br>
</div>
<div>This is the point where one may encounter source breaks due to<br>
</div>
<div>deprecated and/or OpenGL-specific APIs being removed or replaced by<br>
</div>
<div>new alternatives. This will typically affect advanced use cases only,<br>
</div>
<div>such as application code that implements custom scenegraph materials,<br>
</div>
<div>or deals with integrating external rendering engines with Qt Quick.<br>
</div>
<div><br>
</div>
<div>For those interested in more details, there is a set of blog posts [7]<br>
</div>
<div>[8] [9] from last year introducing the new approach to handling<br>
</div>
<div>graphics APIs and shaders. The recording of a Qt World Summit 2019<br>
</div>
<div>talk is also available at [10]. The slides from the March 2020 webinar<br>
</div>
<div>[11] give the most up-to-date overview as of now, but there is also<br>
</div>
<div>going to be a session at this week's Qt Virtual Tech Con 2020 [12] (look for<br>
</div>
<div>"Accelerated 2D / 3D Graphics in Qt 6")<br>
</div>
<div><br>
</div>
<div>Best regards,<br>
</div>
<div>Laszlo<br>
</div>
<div><br>
</div>
<div>[1] https://lists.qt-project.org/pipermail/development/2020-April/039382.html<br>
</div>
<div>[2] https://wiki.qt.io/QtCS2017_QQSG<br>
</div>
<div>[3] https://wiki.qt.io/QtCS2018_Graphics_Vision_2020<br>
</div>
<div>[4] https://wiki.qt.io/Qt_Contributor_Summit_2019_-_QtGui_RHI_3D<br>
</div>
<div>[5] https://lists.qt-project.org/pipermail/development/2019-April/035551.html<br>
</div>
<div>[6] https://doc-snapshots.qt.io/qt5-5.15/qtquick-visualcanvas-scenegraph-renderer.html#rendering-via-the-qt-rendering-hardware-interface<br>
</div>
<div>[7] https://www.qt.io/blog/qt-quick-on-vulkan-metal-direct3d<br>
</div>
<div>[8] https://www.qt.io/blog/qt-quick-on-vulkan-metal-and-direct3d-part-2<br>
</div>
<div>[9] https://www.qt.io/blog/qt-quick-on-vulkan-metal-and-direct3d-part-3<br>
</div>
<div>[10] https://youtu.be/jH2gfeccpqY<br>
</div>
<div>[11] https://github.com/alpqr/talks/blob/master/Qt_Graphics_Webinar_March_2020/qt_graphics_03_2020.pdf<br>
</div>
<div>[12] https://www.qt.io/qtvirtualtechcon2020<br>
</div>
<span></span><br>
</div>
</body>
</html>