48 if (m_rhi || m_cpuOnly)
51 const QPlatformIntegration *qpa = QGuiApplicationPrivate::platformIntegration();
53 if (qpa && qpa->hasCapability(QPlatformIntegration::RhiBasedRendering)) {
56 if (canUseRhiImpl(QRhi::Metal, backend)) {
57 QRhiMetalInitParams params;
58 m_rhi.reset(QRhi::create(QRhi::Metal, ¶ms));
63 if (!m_rhi && canUseRhiImpl(QRhi::D3D11, backend)) {
64 QRhiD3D11InitParams params;
65 m_rhi.reset(QRhi::create(QRhi::D3D11, ¶ms));
68 if (!m_rhi && canUseRhiImpl(QRhi::D3D12, backend)) {
69 QRhiD3D12InitParams params;
70 m_rhi.reset(QRhi::create(QRhi::D3D12, ¶ms));
75 if (!m_rhi && canUseRhiImpl(QRhi::OpenGLES2, backend)) {
76 if (openGLCapsSupported(*qpa)) {
78 m_fallbackSurface.reset(QRhiGles2InitParams::newFallbackSurface());
79 QRhiGles2InitParams params;
80 params.fallbackSurface = m_fallbackSurface.get();
81 m_rhi.reset(QRhi::create(QRhi::OpenGLES2, ¶ms));
83# if defined(Q_OS_ANDROID)
86 if (!m_appStateChangedConnection) {
87 if (!m_eventsReceiver)
88 m_eventsReceiver = std::make_unique<QObject>();
90 auto onStateChanged = [
this](
auto state) {
91 if (state == Qt::ApplicationSuspended)
95 m_appStateChangedConnection =
96 QObject::connect(qApp, &QGuiApplication::applicationStateChanged,
97 m_eventsReceiver.get(), onStateChanged);
105 if (!m_rhi && canUseRhiImpl(QRhi::Vulkan, backend)) {
106 auto instance = std::make_unique<QVulkanInstance>();
107 instance->setExtensions(QRhiVulkanInitParams::preferredInstanceExtensions());
108 if (instance->create()) {
109 QRhiVulkanInitParams params;
110 params.inst = instance.get();
111 m_rhi.reset(QRhi::create(QRhi::Vulkan, ¶ms));
113 qCDebug(qLcThreadLocalRhi) <<
"Failed to create QVulkanInstance";
117 m_vulkanInstance = std::move(instance);
124 qCWarning(qLcThreadLocalRhi)
125 << Q_FUNC_INFO <<
": No RHI backend. Using CPU conversion.";
144 const QRhi::Implementation reference)
147 if (reference != QRhi::Null)
148 return implementation == reference;
151 if (s_preferredBackend != QRhi::Null)
152 return implementation == s_preferredBackend;