42 if (m_rhi || m_cpuOnly)
45 [[maybe_unused]] QRhi::Implementation referenceBackend =
46 referenceRhi ? referenceRhi->backend() : QRhi::Null;
47 const QPlatformIntegration *qpa = QGuiApplicationPrivate::platformIntegration();
49 if (qpa && qpa->hasCapability(QPlatformIntegration::RhiBasedRendering)) {
52 if (canUseRhiImpl(QRhi::Metal, referenceBackend)) {
53 QRhiMetalInitParams params;
54 m_rhi.reset(QRhi::create(QRhi::Metal, ¶ms));
59 if (!m_rhi && canUseRhiImpl(QRhi::D3D11, referenceBackend)) {
60 QRhiD3D11InitParams params;
61 m_rhi.reset(QRhi::create(QRhi::D3D11, ¶ms));
66 if (!m_rhi && canUseRhiImpl(QRhi::OpenGLES2, referenceBackend)) {
67 if (openGLCapsSupported(*qpa)) {
69 m_fallbackSurface.reset(QRhiGles2InitParams::newFallbackSurface());
70 QRhiGles2InitParams params;
71 params.fallbackSurface = m_fallbackSurface.get();
72 if (referenceBackend == QRhi::OpenGLES2)
73 params.shareContext =
static_cast<
const QRhiGles2NativeHandles *>(
74 referenceRhi->nativeHandles())
76 m_rhi.reset(QRhi::create(QRhi::OpenGLES2, ¶ms));
78# if defined(Q_OS_ANDROID)
81 if (!m_appStateChangedConnection) {
82 if (!m_eventsReceiver)
83 m_eventsReceiver = std::make_unique<QObject>();
85 auto onStateChanged = [
this](
auto state) {
86 if (state == Qt::ApplicationSuspended)
90 m_appStateChangedConnection =
91 QObject::connect(qApp, &QGuiApplication::applicationStateChanged,
92 m_eventsReceiver.get(), onStateChanged);
102 qWarning() << Q_FUNC_INFO <<
": No RHI backend. Using CPU conversion.";
118 const QRhi::Implementation reference)
121 if (reference != QRhi::Null)
122 return implementation == reference;
125 if (s_preferredBackend != QRhi::Null)
126 return implementation == s_preferredBackend;