From 8386dfee05d35057836f93d182ef96674a6fd11e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kaj=20Gr=C3=B6nholm?= Date: Mon, 18 Nov 2024 14:07:13 +0200 Subject: [PATCH] QRhiWidget: Add a protected constructor This can be useful for QRhiWidget subclasses with PIMPL. Also add Q_WIDGETS_EXPORT for QRhiWidgetPrivate. Change-Id: Idec480454dca59313f8baaa8d6369cb4a85ea567 Reviewed-by: Volker Hilsheimer Reviewed-by: Laszlo Agocs --- src/widgets/kernel/qrhiwidget.cpp | 28 +++++++++++++++++++++++----- src/widgets/kernel/qrhiwidget.h | 2 ++ src/widgets/kernel/qrhiwidget_p.h | 3 ++- 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/widgets/kernel/qrhiwidget.cpp b/src/widgets/kernel/qrhiwidget.cpp index bf562631134..276069cf83f 100644 --- a/src/widgets/kernel/qrhiwidget.cpp +++ b/src/widgets/kernel/qrhiwidget.cpp @@ -174,18 +174,36 @@ QRhiWidget::QRhiWidget(QWidget *parent, Qt::WindowFlags f) : QWidget(*(new QRhiWidgetPrivate), parent, f) { Q_D(QRhiWidget); + d->init(); +} + +/*! + * \internal + */ +QRhiWidget::QRhiWidget(QRhiWidgetPrivate &dd, QWidget *parent, Qt::WindowFlags f) + : QWidget(dd, parent, f) +{ + Q_D(QRhiWidget); + d->init(); +} + +/*! + * \internal + */ +void QRhiWidgetPrivate::init() +{ if (Q_UNLIKELY(!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::RhiBasedRendering))) qWarning("QRhiWidget: QRhi is not supported on this platform."); else - d->setRenderToTexture(); + setRenderToTexture(); - d->config.setEnabled(true); + config.setEnabled(true); #if defined(Q_OS_DARWIN) - d->config.setApi(QPlatformBackingStoreRhiConfig::Metal); + config.setApi(QPlatformBackingStoreRhiConfig::Metal); #elif defined(Q_OS_WIN) - d->config.setApi(QPlatformBackingStoreRhiConfig::D3D11); + config.setApi(QPlatformBackingStoreRhiConfig::D3D11); #else - d->config.setApi(QPlatformBackingStoreRhiConfig::OpenGL); + config.setApi(QPlatformBackingStoreRhiConfig::OpenGL); #endif } diff --git a/src/widgets/kernel/qrhiwidget.h b/src/widgets/kernel/qrhiwidget.h index 45fe7b7482a..09fc2b94538 100644 --- a/src/widgets/kernel/qrhiwidget.h +++ b/src/widgets/kernel/qrhiwidget.h @@ -69,6 +69,8 @@ public: QImage grabFramebuffer() const; protected: + QRhiWidget(QRhiWidgetPrivate &dd, QWidget *parent = nullptr, Qt::WindowFlags f = {}); + bool isAutoRenderTargetEnabled() const; void setAutoRenderTarget(bool enabled); diff --git a/src/widgets/kernel/qrhiwidget_p.h b/src/widgets/kernel/qrhiwidget_p.h index b594b67ec82..06d08ff188f 100644 --- a/src/widgets/kernel/qrhiwidget_p.h +++ b/src/widgets/kernel/qrhiwidget_p.h @@ -22,7 +22,7 @@ QT_BEGIN_NAMESPACE -class QRhiWidgetPrivate : public QWidgetPrivate +class Q_WIDGETS_EXPORT QRhiWidgetPrivate : public QWidgetPrivate { Q_DECLARE_PUBLIC(QRhiWidget) public: @@ -32,6 +32,7 @@ public: void endCompose() override; QImage grabFramebuffer() override; + void init(); void ensureRhi(); void ensureTexture(bool *changed); bool invokeInitialize(QRhiCommandBuffer *cb);