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 <volker.hilsheimer@qt.io>
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
This commit is contained in:
Kaj Grönholm 2024-11-18 14:07:13 +02:00
parent 0b044e8b05
commit 8386dfee05
3 changed files with 27 additions and 6 deletions

View File

@ -174,18 +174,36 @@ QRhiWidget::QRhiWidget(QWidget *parent, Qt::WindowFlags f)
: QWidget(*(new QRhiWidgetPrivate), parent, f) : QWidget(*(new QRhiWidgetPrivate), parent, f)
{ {
Q_D(QRhiWidget); 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))) if (Q_UNLIKELY(!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::RhiBasedRendering)))
qWarning("QRhiWidget: QRhi is not supported on this platform."); qWarning("QRhiWidget: QRhi is not supported on this platform.");
else else
d->setRenderToTexture(); setRenderToTexture();
d->config.setEnabled(true); config.setEnabled(true);
#if defined(Q_OS_DARWIN) #if defined(Q_OS_DARWIN)
d->config.setApi(QPlatformBackingStoreRhiConfig::Metal); config.setApi(QPlatformBackingStoreRhiConfig::Metal);
#elif defined(Q_OS_WIN) #elif defined(Q_OS_WIN)
d->config.setApi(QPlatformBackingStoreRhiConfig::D3D11); config.setApi(QPlatformBackingStoreRhiConfig::D3D11);
#else #else
d->config.setApi(QPlatformBackingStoreRhiConfig::OpenGL); config.setApi(QPlatformBackingStoreRhiConfig::OpenGL);
#endif #endif
} }

View File

@ -69,6 +69,8 @@ public:
QImage grabFramebuffer() const; QImage grabFramebuffer() const;
protected: protected:
QRhiWidget(QRhiWidgetPrivate &dd, QWidget *parent = nullptr, Qt::WindowFlags f = {});
bool isAutoRenderTargetEnabled() const; bool isAutoRenderTargetEnabled() const;
void setAutoRenderTarget(bool enabled); void setAutoRenderTarget(bool enabled);

View File

@ -22,7 +22,7 @@
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QRhiWidgetPrivate : public QWidgetPrivate class Q_WIDGETS_EXPORT QRhiWidgetPrivate : public QWidgetPrivate
{ {
Q_DECLARE_PUBLIC(QRhiWidget) Q_DECLARE_PUBLIC(QRhiWidget)
public: public:
@ -32,6 +32,7 @@ public:
void endCompose() override; void endCompose() override;
QImage grabFramebuffer() override; QImage grabFramebuffer() override;
void init();
void ensureRhi(); void ensureRhi();
void ensureTexture(bool *changed); void ensureTexture(bool *changed);
bool invokeInitialize(QRhiCommandBuffer *cb); bool invokeInitialize(QRhiCommandBuffer *cb);