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);