Android: Enable required capabilities for embedding QML in services

Enabling OpenGL, ThreadedOpenGL and ForeignWindows capabilities for all
cases where we have a valid Android context.

Also enable createPlatformOpenGLContext and createPlatformWindow in the
same circumstance.

This allows service-embedded contexts to create and manipulate windows
and surfaces.

Task-number: QTBUG-118874
Change-Id: I34a3153865cc1263973b8ddf67a82d61b2266bca
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
bb10
Petri Virkkunen 2024-02-15 14:06:03 +02:00
parent ec3c96d72d
commit ed3ce4ebfa
1 changed files with 14 additions and 5 deletions

View File

@ -72,6 +72,12 @@ QAndroidPlatformScreen* createScreenForDisplayId(int displayId)
return new QAndroidPlatformScreen(display);
}
static bool isValidAndroidContextForRendering()
{
return QtAndroid::isQtApplication() ? QtAndroidPrivate::activity().isValid()
: QtAndroidPrivate::context().isValid();
}
} // anonymous namespace
void *QAndroidPlatformNativeInterface::nativeResourceForIntegration(const QByteArray &resource)
@ -317,9 +323,12 @@ bool QAndroidPlatformIntegration::hasCapability(Capability cap) const
case ApplicationState: return true;
case ThreadedPixmaps: return true;
case NativeWidgets: return QtAndroidPrivate::activity().isValid();
case OpenGL: return QtAndroidPrivate::activity().isValid();
case ForeignWindows: return QtAndroidPrivate::activity().isValid();
case ThreadedOpenGL: return !needsBasicRenderloopWorkaround() && QtAndroidPrivate::activity().isValid();
case OpenGL:
return isValidAndroidContextForRendering();
case ForeignWindows:
return isValidAndroidContextForRendering();
case ThreadedOpenGL:
return !needsBasicRenderloopWorkaround() && isValidAndroidContextForRendering();
case RasterGLSurface: return QtAndroidPrivate::activity().isValid();
case TopStackedNativeChildWindows: return false;
case MaximizeUsingFullscreenGeometry: return true;
@ -341,7 +350,7 @@ QPlatformBackingStore *QAndroidPlatformIntegration::createPlatformBackingStore(Q
QPlatformOpenGLContext *QAndroidPlatformIntegration::createPlatformOpenGLContext(QOpenGLContext *context) const
{
if (!QtAndroidPrivate::activity().isValid())
if (!isValidAndroidContextForRendering())
return nullptr;
QSurfaceFormat format(context->format());
format.setAlphaBufferSize(8);
@ -384,7 +393,7 @@ QOffscreenSurface *QAndroidPlatformIntegration::createOffscreenSurface(ANativeWi
QPlatformWindow *QAndroidPlatformIntegration::createPlatformWindow(QWindow *window) const
{
if (!QtAndroidPrivate::activity().isValid())
if (!isValidAndroidContextForRendering())
return nullptr;
#if QT_CONFIG(vulkan)