summaryrefslogtreecommitdiffstats
path: root/src/opengl/qopenglcompositor.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Merge tag 'v6.5.6-lts' into tqtc/lts-6.5-opensourceTarja Sundqvist2025-03-301-13/+21
|\ | | | | | | | | | | Qt 6.5.6-lts release Change-Id: I643db9810dfb5cb32ace8f069ebd77d43234ec8f
| * OpenGL: Add parameters to choose FBO grab orientationMikko Hallamaa2024-03-131-13/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We want to be able to pass as an argument whether the texture grabbed to an FBO is supposed to have a flipped y-axis or not. This is required for screen capture on the EGLFS platform. Task-number: QTBUG-121835 Change-Id: I6dddc879a4be7ff2c2c189747193423644be55a0 Reviewed-by: Laszlo Agocs <[email protected]> Reviewed-by: Artem Dyomin <[email protected]> (cherry picked from commit 342ae435a198acdd794e575dc54ccab1d33b320b) Reviewed-by: Qt Cherry-pick Bot <[email protected]> (cherry picked from commit d33437c4f91f717b1ec2fc9ad7077941a98c56a3) (cherry picked from commit e544c665dc59f3db0ee9eee17425143078d8a26e)
* | Merge tag 'v6.5.5-lts' into tqtc/lts-6.5-opensourceTarja Sundqvist2025-01-281-3/+14
|\| | | | | | | | | | | Qt 6.5.5-lts release Change-Id: Ic87e42480ba30910eade465936c0618ab9cfb971
| * Add an opportunity to grab via QOpenGLCompositor to FBOArtem Dyomin2024-01-131-3/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | The feature is needed for screen capturing Qt multimedia in order to have better performance of getting frames (avoid recreating fbo). In QtMM, we're going to create FBO and use it as a hw frame (or just render it to image on the first stage) Change-Id: Id08a86b76447faa0f341c6967c2dad8f34c84959 Reviewed-by: Laszlo Agocs <[email protected]> (cherry picked from commit b96160191fc79514173b202bf6325553a798926d) Reviewed-by: Qt Cherry-pick Bot <[email protected]> (cherry picked from commit 12fb9c4dbba1f393feb8d7f99713a76ed6eda63b) (cherry picked from commit bdaada60629d03f1c6013257311b82abc449dd1b)
* | Revert "Update commercial SPDX-License-Identifier"Tarja Sundqvist2025-01-031-1/+1
|/ | | | | | | | | | This reverts commit afae67bdc82301c0dfdb752e743f2af8fea7d5ad. Revert of commercial SPDX license identifiers is required for the Qt 6.5.x opensource releases, Qt 6.5.4 onwards. Change-Id: I6b2d8388d03b4f6138217cc1b80696b8dc2e66ce Reviewed-by: Volker Hilsheimer <[email protected]>
* Update commercial SPDX-License-IdentifierTarja Sundqvist2023-11-221-1/+1
| | | | | | | | | | | | Updated the commercial SPDX-License-Identifier to the files in tqtc-qtbase. Examples, tests, build files, or documentation files are not updated. Task-number: QTQAINFRA-5900 Change-Id: I8ae86f7feb9183219de3dce8caa4b9d15b0eefaf Reviewed-by: Edward Welbourne <[email protected]> Reviewed-by: Fabian Kosmale <[email protected]> Reviewed-by: Volker Hilsheimer <[email protected]>
* eglfs: Improve z-order handlingSérgio Martins2022-10-291-4/+18
| | | | | | | | | | | | | | In 9ccbbeecbd we've added basic z-order handling, so main window always stacks behind tool windows. After extensive testing we found more basic cases to be handled: - Modal windows go on top - Qt::Popup goes on top of Qt::Tool Fixes: QTBUG-105707 Pick-to: 6.4 Change-Id: I00eba330864c7abc31652226d55f66f4b7f44dc0 Reviewed-by: Laszlo Agocs <[email protected]>
* eglfs: Ensure correct z-order of windowsSérgio Martins2022-08-041-3/+51
| | | | | | | | | | | - The main window needs to be at the back always, since it's fullscreen. If the root window gets in front then there's no way to retrieve the secondary windows. - Qt::Tool and transient child windows go to front as in other QPAs Change-Id: I4a2793628250756bc07daaee0763ea7174a7bebd Pick-to: 6.3 6.4 Reviewed-by: Laszlo Agocs <[email protected]>
* Use SPDX license identifiersLucie Gérard2022-05-161-38/+2
| | | | | | | | | | | | | Replace the current license disclaimer in files by a SPDX-License-Identifier. Files that have to be modified by hand are modified. License files are organized under LICENSES directory. Task-number: QTBUG-67283 Change-Id: Id880c92784c40f3bbde861c0d93f58151c18b9f1 Reviewed-by: Qt CI Bot <[email protected]> Reviewed-by: Lars Knoll <[email protected]> Reviewed-by: Jörg Bornemann <[email protected]>
* QtOpenGL: includemocsMarc Mutz2022-04-291-0/+2
| | | | | | | | | | | Including moc files directly into their classes' TU tends to improve codegen and enables extended compiler warnings, e.g. about unused private functions or fields. Pick-to: 6.3 6.2 5.15 Task-number: QTBUG-102886 Change-Id: I60fb8c22a310dfd10cd3611fb603e2175ac6dbcc Reviewed-by: Mårten Nordheim <[email protected]>
* Revive eglfs' raster window supportLaszlo Agocs2022-04-271-3/+6
| | | | | | | | | | | | | | | | | | | A number of consequences of the new rhi-based backingstore composition were not handled. Most importantly, the fact that RasterGLSurface is not a thing anymore in practice causes challenges because we can no longer decide just based on the surfaceType what a QWindow with OpenGLSurface would be. (a plain GL window or a GL window with a backing store?) Also, the backingstore needs to be able to initialize its backing QRhi by itself, because with eglfs going through OpenGL is the only way. Amends 68a4c5da9a080101cccd8a3b2edb1c908da0ca8e Fixes: QTBUG-102750 Change-Id: Ia1ca59d01e3012264a76b50e591612fdcc2a0bd6 Reviewed-by: Qt CI Bot <[email protected]> Reviewed-by: Andy Nichols <[email protected]>
* Compose render-to-texture widgets through QRhiLaszlo Agocs2022-03-111-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | QPlatformTextureList holds a QRhiTexture instead of GLuint. A QPlatformBackingStore now optionally can own a QRhi and a QRhiSwapChain for the associated window. Non-GL rendering must use this QRhi everywhere, whereas GL (QOpenGLWidget) can choose to still rely on resource sharing between contexts. A widget tells that it wants QRhi and the desired configuration in a new virtual function in QWidgetPrivate returning a QPlatformBackingStoreRhiConfig. This is evaluated (among a top-level's all children) upon create() before creating the repaint manager and the QWidgetWindow. In QOpenGLWidget what do request is obvious: it will request an OpenGL-based QRhi. QQuickWidget (or a potential future QRhiWidget) will be more interesting: it needs to honor the standard Qt Quick env.vars. and QQuickWindow APIs (or, in whatever way the user configured the QRhiWidget), and so will set up the config struct accordingly. In addition, the rhiconfig and surface type is (re)evaluated when (re)parenting a widget to a new tlw. If needed, this will now trigger a destroy - create on the tlw. This should be be safe to do in setParent. When multiple child widgets report an enabled rhiconfig, the first one (the first child encountered) wins. So e.g. attempting to have a QOpenGLWidget and a Vulkan-based QQuickWidget in the same top-level window will fail one of the widgets (it likely won't render). RasterGLSurface is no longer used by widgets. Rather, the appropriate surface type is chosen. The rhi support in the backingstore is usable without widgets as well. To make rhiFlush() functional, one needs to call setRhiConfig() after creating the QBackingStore. (like QWidget does to top-level windows) Most of the QT_NO_OPENGL ifdefs are eliminated all over the place. Everything with QRhi is unconditional code at compile time, except the actual initialization. Having to plumb the widget tlw's shareContext (or, now, the QRhi) through QWindowPrivate is no longer needed. The old approach does not scale: to implement composeAndFlush (now rhiFlush) we need more than just a QRhi object, and this way we no longer pollute everything starting from the widget level (QWidget's topextra -> QWidgetWindow -> QWindowPrivate) just to send data around. The BackingStoreOpenGLSupport interface and the QtGui - QtOpenGL split is all gone. Instead, there is a QBackingStoreDefaultCompositor in QtGui which is what the default implementations of composeAndFlush and toTexture call. (overriding composeAndFlush and co. f.ex. in eglfs should continue working mostly as-is, apart from adapting to the texture list changes and getting the native OpenGL texture id out of the QRhiTexture) As QQuickWidget is way too complicated to just port as-is, an rhi manual test (rhiwidget) is introduced as a first step, in ordewr to exercise a simple, custom render-to-texture widget that does something using a (not necessarily OpenGL-backed) QRhi and acts as fully functional QWidget (modeled after QOpenGLWidget). This can also form the foundation of a potential future QRhiWidget. It is also possible to force the QRhi-based flushing always, regardless of the presence of render-to-texture widgets. To exercise this, set the env.var. QT_WIDGETS_RHI=1. This picks a platform-specific default, and can be overridden with QT_WIDGETS_RHI_BACKEND. (in sync with Qt Quick) This can eventually be extended to query the platform plugin as well to check if the platform plugin prefers to always do flushes with a 3D API. QOpenGLWidget should work like before from the user's perspective, while internally it has to do some things differently to play nice and prevent regressions with the new rendering architecture. To exercise this better, the qopenglwidget example gets a new tab-based view (that could perhaps replace the example's main window later on?). The openglwidget manual test is made compatible with Qt 6, and gets a counterpart in form of the dockedopenglwidget manual test, which is a modified version of the cube example that features dock widgets. This is relevant in particular because render-to-texture widgets within a QDockWidget has its own specific quirks, with logic taking this into account, hence testing is essential. For existing applications there are two important consequences with this patch in place: - Once the rhi-based composition is enabled, it stays active for the lifetime of the top-level window. - Dynamically creating and parenting the first render-to-texture widget to an already created tlw will destroy and recreate the tlw (and the underlying window). The visible effects of this depend on the platform. (e.g. the window may disappear and reappear on some, whereas with other windowing systems it is not noticeable at all - this is not really different from similar situtions with reparenting or when moving windows between screens, so should be acceptable in practice) - On iOS raster windows are flushed with Metal (and rhi) from now on (previously this was through OpenGL by making flush() call composeAndFlush(). Change-Id: Id05bd0f7a26fa845f8b7ad8eedda3b0e78ab7a4e Reviewed-by: Tor Arne Vestbø <[email protected]>
* Move QtPlatformCompositorSupport into QtOpenGLTor Arne Vestbø2020-05-281-0/+308
Task-number: QTBUG-83255 Change-Id: Id9ea654db8efb00b487d53aea03d7f23a7ab1a54 Reviewed-by: Laszlo Agocs <[email protected]>