summaryrefslogtreecommitdiffstats
path: root/src/opengl
Commit message (Collapse)AuthorAgeFilesLines
* Doc: Enable automatic linking to sources on code.qt.ioTopi Reinio2025-05-271-0/+3
| | | | | | | | | | | | Since 6.10, QDoc is capable of generating links to the declaration in the source code for each documented C++ API entity in their `Detailed description`. Add the required configuration to enable this feature in online documentation builds. Change-Id: Iaafabc5aea50a6cd72549bb1c04007bb4de498ca Reviewed-by: Paul Wicking <[email protected]>
* Lazily create global share context when Qt::AA_ShareOpenGLContexts is setTor Arne Vestbø2025-05-231-1/+1
| | | | | | | | | | | | | | The requirement to set Qt::AA_ShareOpenGLContexts before creating QGuiApp was forcing users to also set the default surface format before QGuiApp, which prevents us from initializing a default surface format based on the platform integration. By creating the global share context lazily when requested via the Qt::AA_ShareOpenGLContext application attribute we open up this possibility. Change-Id: I958639c997e96321013b1080c31e2533a36c13ff Reviewed-by: Allan Sandfeld Jensen <[email protected]>
* For qdebug operator<< of pointer types, always check for nullptrDaniel Trevitz2025-05-171-1/+1
| | | | | | | | Also, use a consistent syntax for when the pointer is null. Fixes: QTBUG-135856 Change-Id: I2f5c80a5650b1be6cc0d70cde7cd1e1c1990df9a Reviewed-by: Christian Ehrlicher <[email protected]>
* Silence a few "No relevant classes found" moc warningsTor Arne Vestbø2025-04-251-0/+4
| | | | | | | | Ideally we'd have a moc macro/define to opt out of the warning, but for now this will have to do. Change-Id: Iffe943191edc553840e1a83dc307926813a5d6f1 Reviewed-by: Alexandru Croitor <[email protected]>
* Add trusted content notes to QOpenGLShader(Program)Laszlo Agocs2025-03-111-0/+20
| | | | | | Pick-to: 6.9 6.8 Change-Id: I089044e6834ebbb992b36c898eb956959f430522 Reviewed-by: Andy Nichols <[email protected]>
* Doc: Fix method docs for QOpenGLTexture::setWrapModeAndreas Eliasson2025-01-241-1/+2
| | | | | | | | | The current method description seems like a copy-paste left-over. Fixes: QTBUG-57209 Pick-to: 6.9 6.8 6.7 6.5 6.2 5.15 Change-Id: Ife9f9f7bc97d990f5d447208bd39c2d2b6a614fd Reviewed-by: Laszlo Agocs <[email protected]>
* QOpenGLEngineSharedShaders: disable copy/movesGiuseppe D'Angelo2025-01-231-0/+1
| | | | | | | | | | | | The class manages resources via raw pointers, and as such it's certainly not copiable. Explicitly disallow such copies. (It might be made movable, but no-one needs to move it, so I'm disabling moves as well.) This fixes warnings in QMetaType, which would otherwise pick up copy/moves as the class is also marked as a Q_GADGET. Change-Id: I983765b35304c8ab9ad42d31bcb729cfc9bfa2ac Reviewed-by: Laszlo Agocs <[email protected]>
* Remove unused qdebug.h include from private headersAhmad Samir2025-01-161-2/+0
| | | | | | Pick-to: 6.9 Change-Id: I03c951d03ab2410298878d0689c0d50bdd4eedf2 Reviewed-by: Mårten Nordheim <[email protected]>
* Replace qdebug.h includes in public headers with forward-declarationsAhmad Samir2025-01-151-1/+1
| | | | | | | | | | | | | | | | | | | qdebug.h includes many Qt and STL headers, so if you include a Qt header you get all those transitive includes, which may affect build time. - Where appropriate use the printf-like syntax of qDebug() and co., these don't need the QDebug streaming operators - qfloat16 is used in an inline member function, so include it explicitly [ChangeLog][Potentially Source Incompatible Changes] Various Qt public headers don't include QDebug any more; if you need QDebug's streaming you'll have to include it in your code. Task-number: QTBUG-132439 Pick-to: 6.9 Change-Id: I750587e17a3b38fa226cd3af8eaccc8da580f436 Reviewed-by: Thiago Macieira <[email protected]>
* Q*PaintEngineState: use canonical signature for the copy constructorGiuseppe D'Angelo2025-01-122-2/+2
| | | | | | | | I'm not sure why this code had copy constructors taking by non-const reference. Add the missing const. Change-Id: Ie6d1cb6eab7b829a59e21f1874b041a00a52d1e9 Reviewed-by: Allan Sandfeld Jensen <[email protected]>
* Add Qt::Orientations based flip and flipped functionsAllan Sandfeld Jensen2024-11-293-13/+14
| | | | | | | | Is easier to read and more bool-trap safe. Old form header deprecated from 6.10 Fixes: QTBUG-129575 Change-Id: Id785b9ce159007ce745c04120b2112c8bb9b0802 Reviewed-by: Volker Hilsheimer <[email protected]>
* Replace QPair/qMakePair with std::pair in qtbase/openglIsak Fyksen2024-11-2140-113/+111
| | | | | | Task-number: QTBUG-115841 Change-Id: Ic7a362a41fb52d39d8a168f0ba4ed6d33458dd73 Reviewed-by: Matthias Rauter <[email protected]>
* eglfs: change the condition to destroy the openglcompositorInho Lee2024-11-211-3/+3
| | | | | | | | | | | | | | | | With an openglcompositor, only first QEglFSWindow is set with a flag, HasNativeWindow and when it is destroyed, the openglcompositor is destroyed, too. For now, when using openglcompositor, Qt will not check HasNativeWindow for its nativeWindow because it is not possible to add a HasNativeWindow flag in an existing window. And the openglcompositor will be destroyed after the all the QEglFSWindows are closed. Fixes: QTBUG-129576 Pick-to: 6.8 6.5 Change-Id: I620a904a03d29e8db1738d9392f716b3ebf5b553 Reviewed-by: Laszlo Agocs <[email protected]>
* Create qdoc macros for C++ class docs 1.4: member-swap(), \internalMarc Mutz2024-11-081-1/+1
| | | | | | | | | | | | | | | | | | | We have some patterns for how to document certain functions, but we also vary the sentences a lot, and you have to look up one documentation piece and copy it, essentially. If we ever want to change them, we end up with shotgun surgery. So apply DRY to the documentation and start a collection of macros to help with repetitive C++ class documentation tasks. The first macro is for member-swap(), and this fourth patch is for documentation that used to be \internal. But the classes are public, so don't hide the swap() member functions, document them. Task-number: QTBUG-129573 Pick-to: 6.8 6.7 6.5 6.2 Change-Id: Id81b5ace05a7ccaf2a2194ebd56af10e8a98d7be Reviewed-by: Ivan Solovev <[email protected]>
* eglfs: Restore raster window support code that went missingLaszlo Agocs2024-11-051-0/+4
| | | | | | | | | | | Restore the snippet added in 4bc8f548222a0dd2967063a23e76c37d302253cb Amends 0a10d23c4a49dd14a1ded41b7cc6921909b0ee7a Change-Id: Id83ff523e6343003c198600fe0ee91a71fb6e3e0 Pick-to: 6.8 Fixes: QTBUG-129512 Reviewed-by: Inho Lee <[email protected]>
* Create qdoc macros for C++ class docs 1.1: member-swap(), traditional phrasingMarc Mutz2024-11-052-7/+3
| | | | | | | | | | | | | | | | | | | | | | | | | We have some patterns for how to document certain functions, but we also vary the sentences a lot, and you have to look up one documentation piece and copy it, essentially. If we ever want to change them, we end up with shotgun surgery. So apply DRY to the documentation and start a collection of macros to help with repetitive C++ class documentation tasks. The first macro is for member-swap(), and the first patch is for documentation that used the traditional phrasing ("Swaps the X \a other with this X."). This doesn't change the documentation, except as follows: * adds the "very fast and never fails" blurb, if it was missing * changes the function's argument name to `other`, as required by the macro. Task-number: QTBUG-129573 Pick-to: 6.8 6.7 6.5 6.2 Change-Id: Ib494bd218334724b3b43796ba6f71fb52b83aa94 Reviewed-by: Ivan Solovev <[email protected]>
* Doc: Remove usage of defunct QDoc commandPaul Wicking2024-08-281-2/+0
| | | | | | | | | | | | | | The QDoc command `\tableofcontents` was rendered useless by a change more than a decade ago. Remove the use of `\tableofcontents` as it serves no purpose, and ensure that the surrounding context still makes sense for the reader, by removing preceding text that refers to a non-existing table of contents, such as `Contents:`. Task-number: QTBUG-128173 Pick-to: 6.8 Change-Id: Ibb5a6af0e80f70fa487cdf6a7e38009a9ef60cbf Reviewed-by: Safiyyah Moosa <[email protected]> Reviewed-by: Venugopal Shivashankar <[email protected]>
* Docs: Organize topics in the qtbase repoAlexei Cazacov2024-08-131-1/+7
| | | | | | | | | | This commit organizes the articles, so they: - have a reasonable tree structure - can be navigated through the topic tree in the Qt Creator help viewer Task-number: QTBUG-127046 Change-Id: I66f2b131b8aacc887b35a770e51c1425431dffb5 Reviewed-by: Topi Reiniö <[email protected]>
* Move destruction logic to QOpenGLWindow from PrivateEven Oscar Andersen2024-07-041-9/+9
| | | | | | | | | | QOpenGLWindow has been destroyed when QOpenGLWindowPrivate destructor runs Fixes: QTBUG-126845 Pick-to: 6.8 Change-Id: I4f0208c4adf1a875cdcaca91fc239cf4e6200e4d Reviewed-by: Tor Arne Vestbø <[email protected]>
* OpenGL functions: use removed_api to remove old version from APIVolker Hilsheimer2024-06-134-126/+127
| | | | | | | | | Implement them out-of-line in removed_api.cpp to call the GLsizeiptr overloads explicitly. Pick-to: 6.8 Change-Id: I7a4b937c2c6f444f2dc8e874ab9e07ddd52437e9 Reviewed-by: Marc Mutz <[email protected]>
* eglfs: Revive QWidget renderingLaszlo Agocs2024-06-131-23/+11
| | | | | | | | | | | | | | | After recent changes to widgets and backingstores, attempting to run any widget-based application with eglfs resulted in a crash. The backingstore implementation used here was not fully migrated. Update flush() to create the rendering infrastructure if needed, and make it call into rhiFlush(). Amends eb4cb719257d3b57cd801273d4011579d8c81714 Change-Id: I253c37200f5a902a0e61b62581ac456549f3aeba Pick-to: 6.8 Fixes: QTBUG-126221 Reviewed-by: Tor Arne Vestbø <[email protected]>
* Remove GENERATE_CPP_EXPORTS argumentAlexey Edelev2024-06-121-1/+0
| | | | | | | | | The behavior that argument was enabling is the default one now. Pick-to: 6.8 Task-number: QTBUG-90492 Change-Id: I11711d4c794f0b22169abb595b8ffad2eeb1300d Reviewed-by: Alexandru Croitor <[email protected]>
* widgets: Use per-surface-format RHI support and compositorTor Arne Vestbø2024-06-011-10/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The RHI support and compositor in QPlatformBackingStore were tied to the surface format of the top level window owning the backing store. This meant that inserting an RHI-enabled widget (QRhiWidget, QOpenGLWidget, QQuickWidget, QWebEngineView) into the widget hierarchy required recreating the top level window with a matching surface format that could support the RHI composition. It also meant that we could not have two RHI enabled widgets with different surface format requirements (Metal and OpenGL for example) in the same top level widget hierarchy. The recreation of the window had various visual side effects, such as temporarily switching out of full screen state, or the widget rendering a frame of black, as well as more serious problems such as not correctly restoring the window geometry. In addition, if client code had pulled out the winId() of the window, and did not invalidate these references on window destruction via QEvent::WinIdChange or QEvent::PlatformSurface, the client would reference stale window handles. Although this is a programming error (QWidget::winId() specifically mentions this requirement), we should avoid recreation if we can. We were already supporting flushing the backingstore to individual native child widgets, but always did so via a single RHI managed by the platform backingstore. By expanding QPlatformBackingStore to keep one set of RHI support and compositor per surface format, we can refine the logic in QWidget and QWidgetRepaintManager to not require recreating the top level. Native child widgets are then flushed independently, including any RHI textures and raster content that overlaps with the widget. We still assume that a single RHI support and compositor can be be used for multiple windows, as long as those windows have the same surface format. In the future, if needed, we can refine this to use one set per surface format e.g. Fixes: QTBUG-119221 Fixes: QTBUG-121181 Fixes: QTBUG-120096 Task-number: QTBUG-115652 Task-number: QTBUG-108344 Task-number: QTBUG-113557 Task-number: QTBUG-119309 Change-Id: I2635ed3d20c2fb76eab3b8130007dd656a0b93e5 Reviewed-by: Laszlo Agocs <[email protected]>
* QOpenGL2PaintEngineEx: Store context via QPointerTor Arne Vestbø2024-05-301-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | The QOpenGLBuffers used by QOpenGL2PaintEngineEx are tied to a specific share group on creation, via QOpenGLSharedResourceGuard. If QOpenGL2PaintEngineEx is later used with a recreated QOpenGLContext, that happens to live at the same address as the previous one, we will fail to detect that the context has changed by using a naked pointer comparison (ABA problem). If the share group of the new context is different, this will cause problems down the line in QOpenGLBuffers::bind(). This scenario has been observed on Android, where the context created in QOpenGLWidgetPrivate::initialize() ends up with the same address, but then adopts a new share context from RHI, because the widget has been moved to a different top level window. To remedy this, we store the QOpenGL2PaintEngineEx's cached context via a QPointer, so that we pick up the B state of ABA (null), and correctly throw away the old buffers in QOpenGL2PaintEngineEx::begin. Pick-to: 6.7 Change-Id: I5c221a37fd95f846d96e72509bba54f3d10fee3a Reviewed-by: Giuseppe D'Angelo <[email protected]>
* Add QPaintDevice metric query to get precise fractional DPR valueEirik Aavitsland2024-05-301-0/+4
| | | | | | | | | | | | | | | | | | | | | For compatibility reasons, QPaintDevice needs to query subclasses for device metrics as int values. To report fractional DPR values, they have been multiplied with a large constant and divided back afterwards. However, the loss of accuracy introduced by this, though tiny, could still lead to rounding errors and painting artefacts when the values where multiplied up for large coordinates. Avoid this issue by adding a metric query that transports the full floating point value encoded as two ints. [ChangeLog][QtGui] Added new QPaintDevice metrics for querying fractional device pixel ratios with high precision. Custom paintdevice classes that support fractional DPRs are recommended to implement support for these queries in metric(). Others can ignore them. Fixes: QTBUG-124342 Change-Id: Ia6fa46e68e9fe981bdcbafb41daf080b4d1fb6d7 Reviewed-by: Tor Arne Vestbø <[email protected]>
* Long live [[nodiscard]] QFile::openGiuseppe D'Angelo2024-04-171-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Having already caught some bugs in real code because of unchecked calls to QFile::open, this commit marks QFile::open (and open() in other file-I/O classes) as [[nodiscard]]. Since it's going to raise warnings, the plan is to keep the existing behavior up to and including the next LTS. Then the warnings will switch on by default. All of this is protected by system of macros to opt-in or opt-out the behavioral change at any time. A possible counter-argument for doing this is that QFile::open is also used for opening files in the the resource system, and that opening "cannot fail". It clearly can, if the resource is moved away or renamed; code should at a minimum use a Q_ASSERT in debug builds. Another counter-argument is the opening of file handles or descriptors; but again, that opening may fail in case the handle has been closed or if the flags are incompatible. --- Why not marking *every* open() override? Because some are not meant to be called directly -- for instance sockets are supposed to be open via calls to `connectToHost` or similar. One notable exception is QIODevice::open() itself. Although rarely called directly by user code (which just calls open() on a specific subclass, which likely has an override), it may be called: 1) By code that just takes a `QIODevice *` and does something with it. That code is arguably more rare than code using QFile directly. Still, being "generic" code, they have an extra responsibility when making sure to handle a possible opening failure. 2) By QIODevice subclasses, which are even more rare. However, they usually ignore the return from QIODevice::open() as it's unconditionally true. (QIODevice::open() doesn't use the protected virtual pattern.) I'll try and tackle QIODevice in a future commit. [ChangeLog][QtCore][QFileDevice] The open() functions of file-related I/O classes (such as QFile, QSaveFile, QTemporaryFile) can now be marked with the "nodiscard" attribute, in order to prevent a category of bugs where the return value of open() is not checked and the file is then used. In order to avoid warnings in existing code, the marking can be opted in or out, by defining QT_USE_NODISCARD_FILE_OPEN or the QT_NO_USE_NODISCARD_FILE_OPEN macros. By default, Qt will automatically enable nodiscard on these functions starting from Qt 6.10. Change-Id: Ied940e1c0a37344f5200b2c51b05cd1afcb2557d Reviewed-by: Thiago Macieira <[email protected]> Reviewed-by: Edward Welbourne <[email protected]>
* Correct the internal signatures in the GL 4.5 func wrappersLaszlo Agocs2024-04-163-9/+135
| | | | | | | | | | | | | | | | | | | | | | There are 9 functions in the 4.5 API that were initially specified to use GLsizei, but later "magically" became GLsizeiptr (i.e. 64-bit or 32-bit depending on the arch). The current gl.xml, unlike old ones, uses GLsizeiptr, as do the extension headers and most of the online docs, except some that of the reference pages are stuck with GLsizei. Assuming that today's OpenGL implementations expect GLsizeiptr, fix the the internal signatures, so that calling into the GL implementation is done using the correct argument sizes. In addition, add GLsizeiptr signatures in the public API guarded with >= QT_VERSION(7, 0, 0). Pick-to: 6.7 6.6 6.5 Fixes: QTBUG-67807 Change-Id: Ifc7e97b0479a186000a56709c37ba7f77b6f1ff2 Reviewed-by: Christian Strømme <[email protected]>
* OpenGL: Add parameters to choose FBO grab orientationMikko Hallamaa2024-03-132-16/+31
| | | | | | | | | | | | 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 Pick-to: 6.7 6.6 6.5 Change-Id: I6dddc879a4be7ff2c2c189747193423644be55a0 Reviewed-by: Laszlo Agocs <[email protected]> Reviewed-by: Artem Dyomin <[email protected]>
* Mention QChronoTimer in API docsAhmad Samir2024-03-031-1/+1
| | | | | Change-Id: Iaf9fb31994f1580b2051dbd0b1b8eef2a218aa39 Reviewed-by: Thiago Macieira <[email protected]>
* Correct doc snippet licenseLucie Gérard2024-02-281-1/+1
| | | | | | | | | | | | | | All file under doc/snippet should be license as Documentation snippets and according to QUIP-18 [1] this is LicenseRef-Qt-Commercial OR BSD-3-Clause [1]: https://contribute.qt-project.org/quips/18 Pick-to: 6.7 Task-number: QTBUG-121787 Change-Id: I76eedfb6b15c4091f726a5652e3530001d7cdaf7 Reviewed-by: Volker Hilsheimer <[email protected]>
* Refix invalid glTexImage2D operation in FramebufferObjectEirik Aavitsland2024-02-091-1/+3
| | | | | | | | | | | | | | | | | | A recent change fixed the texture format parameter to be RGB instead of RGBA for opaque internal formats. However, this broke the RGB10 case, since the pixel type is then GL_UNSIGNED_INT_2_10_10_10_REV. The doc says: "GL_INVALID_OPERATION is generated if type is [...] GL_UNSIGNED_INT_2_10_10_10_REV [...] and format is neither GL_RGBA nor GL_BGRA." https://registry.khronos.org/OpenGL-Refpages/gl4/html/glTexImage2D.xhtml This modifies ba9e57d65f15c935632b0ad22db0bead9a7d5f90. Pick-to: 6.7 6.6 6.5 Change-Id: I9a004331513179a3f840a007af0418d14e7f5dff Reviewed-by: Laszlo Agocs <[email protected]>
* QOpenGLFramebufferObject: Avoid illegal call to glTexImage2DAleix Pol2024-01-311-3/+15
| | | | | | | | | | | | | | | According to the documentation: GL_INVALID_OPERATION is generated if the combination of internalFormat, format and type is not one of those in the tables above. https://registry.khronos.org/OpenGL-Refpages/es3.0/html/glTexImage2D.xhtml We were allowing the RGB values be passed as RGBA, after this change we don't do so anymore. This would result for KWin in: Mesa: User error: GL_INVALID_OPERATION in glTexImage2D(format = GL_RGBA, type = GL_UNSIGNED_BYTE, internalformat = GL_RGB8) Pick-to: 6.5 6.6 6.7 Change-Id: Ifde8a570eff01be573f780655d8cedbb96f5ba2b Reviewed-by: Laszlo Agocs <[email protected]>
* Make sure OpenGLContext is not nullptrJacek Poplawski2024-01-101-0/+2
| | | | | | | | | In QOpenGLCompositorBackingStore::resize it is already checked whether dstWin is valid, but dstCtx may also be nullptr at this point. Pick-to: 6.7 Task-number: QTBUG-120078 Change-Id: I4a6ad71dd8225b94baff05984275ad1860298dfc Reviewed-by: Laszlo Agocs <[email protected]>
* Add an opportunity to grab via QOpenGLCompositor to FBOArtem Dyomin2024-01-072-3/+17
| | | | | | | | | | | 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) Pick-to: 6.7 6.6 6.5 Change-Id: Id08a86b76447faa0f341c6967c2dad8f34c84959 Reviewed-by: Laszlo Agocs <[email protected]>
* Doc: Fix \fn template arguments for Qt OpenGLTopi Reinio2023-11-181-1/+1
| | | | | | | | | Upcoming changes to QDoc require accurate definition for template arguments in \fn commands. Task-number: QTBUG-118080 Change-Id: I3fde4b0c8867eaf50162dec3178e5c6e5dad3a6f Reviewed-by: Luca Di Sera <[email protected]>
* Include what you need: <QPointer>Marc Mutz2023-10-121-0/+2
| | | | | | | | | | | | | | | | | | | | | | | All these TUs relied on transitive includes of qpointer.h, maybe to a large extent via qevent.h, though, given that qevent.h is more or less the only public QtBase header that includes qpointer.h, something else seems to be at play here. Said qevent.h actually needs QPointer in-name-only, so a forward declaration would suffice. Prepare for qevent.h dropping the include. The algorithm I used was: If the TU mentions 'passiveGrabbers', the name of the QEvent function that returns QPointers, and the TU doesn't have qpointer.h included explicitly, include it. That may produce False Positives, but better safe than sorry. Otherwise, in src/, add an include to all source and header files which mention QPointer. Exception: if foo.h of a foo.cpp already includes it, don't include again. Task-number: QTBUG-117670 Change-Id: I3321cccdb41ce0ba6d8a709cea92427aba398254 Reviewed-by: Fabian Kosmale <[email protected]>
* Doc: Fix warnings and linking issuesTopi Reinio2023-10-091-0/+3
| | | | | | | | | | | | | | | | | | | | Remove or replace links to examples that were removed or moved under manual tests. Replace code snippets that were quoting the now-missing examples. Fix documentation of QSet::removeIf(). Fix typo in documentation macro: Unknown command '\examplecateogry'. Add qtopengl, qtshadertools dependencies to Qt Widgets documentation project to enable correct linking to those topics. Mark all documentation sets in qtbase as free of warnings. Pick-to: 6.6 6.5 Change-Id: I058cd5f2063aa933ea310bceff906f05422a7cb2 Reviewed-by: Topi Reiniö <[email protected]>
* QOpenGLCompositorBackingStore: ensure backing store on flushed windowsAxel Spoerl2023-09-132-0/+6
| | | | | | | | | | | | | | | | | | | | | | | When the first QEglFSWindow got created for a QWindow, a backing store was created with it and associated to the new QEglFSWindow. When the window was hidden on the platform screen, the QEglFSWindow got deleted and re-created when it was supposed to be shown. The re-created QEglFSWindow was no longer associated to the backing store. It was therefore not rendered on the screen. => ensure that the backing store is re-associated to the QEglFSWindow, corrsponding to the QWindow argument passed to flush(). No autotest is added, because the fix is purely visual. The widgets/menus example can be used to test the functionality manually (see bug reports). Fixes: QTBUG-115196 Fixes: QTBUG-116769 Pick-to: 6.6 6.5 6.2 Change-Id: I92ce2e8f7e76bd2d26e713a4d20612d079fb4717 Reviewed-by: Qt CI Bot <[email protected]> Reviewed-by: Eirik Aavitsland <[email protected]>
* Doc: Qt OpenGL: Remove duplicate source dir from documentation configTopi Reinio2023-08-221-7/+6
| | | | | | | | | | | | | | As /examples/opengl is already listed in exampledirs, .qdoc source files under that directory do not need to be listed in sourcedirs. Doing so will cause the example to be listed twice in lists generated by the \generatelist and \annotatedlist QDoc commands. Same applies to imagedirs variable. Pick-to: 6.6 6.5 Change-Id: I168dbfe111a4cb9615626eb9869f97d3814a14b7 Reviewed-by: Venugopal Shivashankar <[email protected]> Reviewed-by: Safiyyah Moosa <[email protected]>
* Enable QT_NO_CONTEXTLESS_CONNECT for most of QtBaseGiuseppe D'Angelo2023-07-111-0/+1
| | | | | | | | | It's clean now, keep it as such. Enabling it for QtCore is still OK, because it just hides a function template declared in a header. Change-Id: I8e7dfae179732ba04241a6a3258c2d722e8259df Reviewed-by: Thiago Macieira <[email protected]>
* QOpenGLFunctions: fix -Wunused-private-field (Clang 15)Marc Mutz2023-07-0518-22/+11
| | | | | | | | | | | | | | | | | | I see this with -unity-build -unity-build-batch-size 32, but I don't know whether it's unity-build or just Clang 15, so also pick to 6.2. The issue exists in 5.15, too, presumably, but I have no desire to find a non-C++17 fix. It appears the generator (glgen) is out-of-sync with the state of its supposed output as of at least 18aae36a90c0753f1b1e615ba8437d8ebd1bd2fb, so don't try to update the generator (I failed to find where these fields originate from, anyway). Pick-to: 6.6 6.5 6.2 Task-number: QTBUG-115031 Change-Id: Ia27620b8f8034c3e8eff383abb849e6ce93dce8a Reviewed-by: Qt CI Bot <[email protected]> Reviewed-by: Volker Hilsheimer <[email protected]>
* Docs: Add link to OPenGL examples to OpenGL indexSafiyyah Moosa2023-06-302-2/+2
| | | | | | | Task-number: QTBUG-112824 Pick-to: 6.5 6.6 Change-Id: Ib507e8c32518442fd211f3486c4317b4907ea414 Reviewed-by: Topi Reiniö <[email protected]>
* Use a global value for warning limit when testing documentation in CITopi Reinio2023-06-271-3/+0
| | | | | | | | | | | | | | | | | | | The most common limit for the maximum number of allowed documentation warnings is zero. Use a global value for 'warninglimit', adopted by all Qt module documentation projects that include the configuration from qtbase/doc/global. This allows for a temporary increase of the limit across all modules as needed - for example, when updating the QDoc binary that the CI provisions to a version that introduces new types of documentation warnings. Increase this base limit temporarily to 10 to help re-enable documentation testing in CI as it's currently disabled. Task-number: QTBUG-113326 Change-Id: I8b66951ca9324bcfaec3b5a7ec2cff544c62feb0 Reviewed-by: Paul Wicking <[email protected]>
* rhi: Make it a QPA-style private but semi-public APILaszlo Agocs2023-05-212-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | qrhi.h, qshader.h, qshaderdescription.h (and qshaderbaker.h from shadertools; done separately) become "RHI APIs", following the concept of QPA APIs. Mirror completely what is done for QPA headers, but using the "rhi" prefix for the headers. This involves updating syncqt to handle the new category of headers. (a note on the regex: matching everything starting with "qrhi" is not acceptable due to incorrectly matching existing and future headers, hence specifying the four header names explicitly) There is going to be one difference to QPA: the documentation for everything RHI is going to be public and part of the regular docs, not hidden with \internal. In addition to the header renaming and adding the comments and documentation notes and warnings, there is one significant change here: there is no longer a need to do API-specific includes, such as qrhid3d11[_p].h, qrhivulkan[_p].h, etc. These are simply merged into a single header that is then included from qrhi.h. This means that users within Qt, and any future applications can just do #include <rhi/qrhi.h> (or rhi/qshader.h if the QRhi stuff is not relevant), no other headers are needed. There are no changes to functionality in this patch. Only the documentation is expanded, quite a lot, to eliminate all qdoc warnings and make the generated API docs complete. An example, with a quite extensive doc page is added as well. Task-number: QTBUG-113331 Change-Id: I91c749826348f14320cb335b1c83e9d1ea2b1d8b Reviewed-by: Volker Hilsheimer <[email protected]> Reviewed-by: Qt CI Bot <[email protected]>
* Clarify module changes in Qt6Jaishree Vyas2023-05-091-1/+1
| | | | | | | | | Changed Briefs for better understanding Fixes: QTBUG-109324 Pick-to: 6.5 Change-Id: I15b0c0dc12b1bf96626fb8ea4ad16d04b2b118ca Reviewed-by: Kai Köhne <[email protected]>
* gl: Check for image validity in readbackLaszlo Agocs2023-04-251-6/+12
| | | | | | | | | | | Returning a null QImage is preferable over passing a null bits() to glReadPixels. (matters when QImage's malloc() gives null, thus 'd' is null -> isNull() == true) Fixes: QTBUG-113127 Pick-to: 6.5 6.4 6.2 5.15 Change-Id: Ieca4d91eefdea47da5251dabe77cc31b48eb0e28 Reviewed-by: Allan Sandfeld Jensen <[email protected]>
* Use Qt CMake APIs to exclude files from Unity BuildAmir Masoud Abdol2023-04-031-8/+7
| | | | | | | | | | | | | | | | | | | | This is a bit of a cleanup, mainly around unity build, and a few other minor things: - I replaced the direct inclusion of sources files using `set_source_files_properties`, and instead used `NO_UNITY_BUILD_SOURCES` when possible. In most cases, they are being excluded in their respective `qt_internal_extend_target` but sometimes I had to make a new extension. - In few cases, we had to manually exclude the NO_PCH files, so, I instead passed them directly to the NO_PCH_SOURCES which also exclude them from the unity build as well. - Removed a few unnecessary "" Pick-to: 6.5 Task-number: QTBUG-109394 Change-Id: I466576592c1d115a2da4d88672c1e4b9f995f2ed Reviewed-by: Alexandru Croitor <[email protected]>
* Add QImage null check when QOpenGLTexture convertsLaszlo Agocs2023-03-211-1/+6
| | | | | | | | | | | ...the image to RGBA8888. Just mirror the first null check that is done for the user-provided QImage. The same should be done for the result of convertToFormat(). Pick-to: 6.5 6.5 6.2 5.15 Fixes: QTBUG-68884 Change-Id: I77091d7a2bc6e32d2aa292dc7650c1af091fcec1 Reviewed-by: Andy Nichols <[email protected]>
* QOpenGLTexture: Add a doc note about the unavoidable conversionLaszlo Agocs2023-03-161-0/+6
| | | | | | | | | | | As requested by users. Explicitly stated in the docs that the QImage is going to be converted, to avoid surprises. Pick-to: 6.5 6.2 5.15 Fixes: QTBUG-105364 Change-Id: Ia6a8930bcee8bd3cdbef016083599bd435b37a09 Reviewed-by: Kristoffer Skau <[email protected]> Reviewed-by: Andy Nichols <[email protected]>
* Add QOpenGLWindow/Widget doc note about depth/stencilLaszlo Agocs2023-03-161-0/+17
| | | | | | | | Pick-to: 6.5 6.2 5.15 Fixes: QTBUG-108050 Change-Id: If011d6efff996870ff23eff3c2d1cf455d31b7a6 Reviewed-by: Kristoffer Skau <[email protected]> Reviewed-by: Andy Nichols <[email protected]>