diff options
Diffstat (limited to 'src/gui/kernel')
-rw-r--r-- | src/gui/kernel/qplatformintegration.cpp | 22 | ||||
-rw-r--r-- | src/gui/kernel/qplatformintegration.h | 6 | ||||
-rw-r--r-- | src/gui/kernel/qsurface.cpp | 2 | ||||
-rw-r--r-- | src/gui/kernel/qsurface.h | 1 | ||||
-rw-r--r-- | src/gui/kernel/qwindow.cpp | 24 | ||||
-rw-r--r-- | src/gui/kernel/qwindow.h | 8 | ||||
-rw-r--r-- | src/gui/kernel/qwindow_p.h | 7 |
7 files changed, 70 insertions, 0 deletions
diff --git a/src/gui/kernel/qplatformintegration.cpp b/src/gui/kernel/qplatformintegration.cpp index 9673ad673a..873ec3a33b 100644 --- a/src/gui/kernel/qplatformintegration.cpp +++ b/src/gui/kernel/qplatformintegration.cpp @@ -629,4 +629,26 @@ void QPlatformIntegration::setApplicationIcon(const QIcon &icon) const Q_UNUSED(icon); } +#if QT_CONFIG(vulkan) + +/*! + Factory function for QPlatformVulkanInstance. The \a instance parameter is a + pointer to the instance for which a platform-specific backend needs to be + created. + + Returns a pointer to a QPlatformOpenGLContext instance or \c NULL if the context could + not be created. + + \sa QVulkanInstance + \since 5.10 +*/ +QPlatformVulkanInstance *QPlatformIntegration::createPlatformVulkanInstance(QVulkanInstance *instance) const +{ + Q_UNUSED(instance); + qWarning("This plugin does not support createPlatformVulkanInstance"); + return nullptr; +} + +#endif // QT_CONFIG(vulkan) + QT_END_NAMESPACE diff --git a/src/gui/kernel/qplatformintegration.h b/src/gui/kernel/qplatformintegration.h index 49d41dd576..eeaa7574f7 100644 --- a/src/gui/kernel/qplatformintegration.h +++ b/src/gui/kernel/qplatformintegration.h @@ -78,6 +78,8 @@ class QPlatformSessionManager; class QKeyEvent; class QPlatformOffscreenSurface; class QOffscreenSurface; +class QPlatformVulkanInstance; +class QVulkanInstance; class Q_GUI_EXPORT QPlatformIntegration { @@ -190,6 +192,10 @@ public: virtual void beep() const; +#if QT_CONFIG(vulkan) + virtual QPlatformVulkanInstance *createPlatformVulkanInstance(QVulkanInstance *instance) const; +#endif + protected: void screenAdded(QPlatformScreen *screen, bool isPrimary = false); void destroyScreen(QPlatformScreen *screen); diff --git a/src/gui/kernel/qsurface.cpp b/src/gui/kernel/qsurface.cpp index 3cdd11de8c..63651ee822 100644 --- a/src/gui/kernel/qsurface.cpp +++ b/src/gui/kernel/qsurface.cpp @@ -78,6 +78,8 @@ QT_BEGIN_NAMESPACE requires the use of private API. \value OpenVGSurface The surface is an OpenVG compatible surface and can be used in conjunction with OpenVG contexts. + \value VulkanSurface The surface is a Vulkan compatible surface and can be used + in conjunction with the Vulkan graphics API. */ diff --git a/src/gui/kernel/qsurface.h b/src/gui/kernel/qsurface.h index a96b7a6422..7e09449d12 100644 --- a/src/gui/kernel/qsurface.h +++ b/src/gui/kernel/qsurface.h @@ -66,6 +66,7 @@ public: OpenGLSurface, RasterGLSurface, OpenVGSurface, + VulkanSurface }; virtual ~QSurface(); diff --git a/src/gui/kernel/qwindow.cpp b/src/gui/kernel/qwindow.cpp index 887d79f455..8471102aee 100644 --- a/src/gui/kernel/qwindow.cpp +++ b/src/gui/kernel/qwindow.cpp @@ -2797,6 +2797,30 @@ QDebug operator<<(QDebug debug, const QWindow *window) } #endif // !QT_NO_DEBUG_STREAM +#if QT_CONFIG(vulkan) + +/*! + Associates this window with the specified Vulkan \a instance. + + \a instance must stay valid as long as this QWindow instance exists. + */ +void QWindow::setVulkanInstance(QVulkanInstance *instance) +{ + Q_D(QWindow); + d->vulkanInstance = instance; +} + +/*! + \return the associrated Vulkan instance or \c null if there is none. + */ +QVulkanInstance *QWindow::vulkanInstance() const +{ + Q_D(const QWindow); + return d->vulkanInstance; +} + +#endif // QT_CONFIG(vulkan) + QT_END_NAMESPACE #include "moc_qwindow.cpp" diff --git a/src/gui/kernel/qwindow.h b/src/gui/kernel/qwindow.h index 033678cf5a..529589e67b 100644 --- a/src/gui/kernel/qwindow.h +++ b/src/gui/kernel/qwindow.h @@ -88,6 +88,9 @@ class QWindowContainer; #ifndef QT_NO_DEBUG_STREAM class QDebug; #endif +#if QT_CONFIG(vulkan) +class QVulkanInstance; +#endif class Q_GUI_EXPORT QWindow : public QObject, public QSurface { @@ -269,6 +272,11 @@ public: static QWindow *fromWinId(WId id); +#if QT_CONFIG(vulkan) + void setVulkanInstance(QVulkanInstance *instance); + QVulkanInstance *vulkanInstance() const; +#endif + public Q_SLOTS: Q_REVISION(1) void requestActivate(); diff --git a/src/gui/kernel/qwindow_p.h b/src/gui/kernel/qwindow_p.h index a3b39fb9ca..e8d5830eee 100644 --- a/src/gui/kernel/qwindow_p.h +++ b/src/gui/kernel/qwindow_p.h @@ -105,6 +105,9 @@ public: , hasCursor(false) #endif , compositing(false) +#if QT_CONFIG(vulkan) + , vulkanInstance(nullptr) +#endif { isWindow = true; } @@ -196,6 +199,10 @@ public: bool compositing; QElapsedTimer lastComposeTime; + +#if QT_CONFIG(vulkan) + QVulkanInstance *vulkanInstance; +#endif }; |