diff options
author | Andy Nichols <nezticle@gmail.com> | 2016-12-06 22:36:30 +0100 |
---|---|---|
committer | Andy Nichols <andy.nichols@qt.io> | 2016-12-14 15:51:23 +0000 |
commit | 9d8db91ada0ab340ae781862f567c9b104e83c63 (patch) | |
tree | 9796e5b28a786a35567983c041869682b40b68c7 /src/plugins/platforms/android/qandroidplatformintegration.cpp | |
parent | b750a3786f42395f0cddd8ed8f92a2bcfda1b270 (diff) |
Android: Enable Adoption of ANativeWindow handle as a QOffscreenSurface
This is done by adding an API to QOffscreenSurface to enable setting a
native handle which can represent a native offscreen surface. When
using the TexureView it is necessary to render to SurfaceTexture objects
which are exposed as offscreen window surfaces. After wraping a
SurfaceTexture in a android.view.Surface object and passing it to C++
via the JNI, it is possible to get the needed ANativeWindow* handle
required to pass to eglCreateWindowSurface. So by setting this native
handle Qt can then render to this "native" offscreen surface.
Change-Id: If7fc5ac7ac588fe6c3a6fb883ea7e439d095470f
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
Diffstat (limited to 'src/plugins/platforms/android/qandroidplatformintegration.cpp')
-rw-r--r-- | src/plugins/platforms/android/qandroidplatformintegration.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/plugins/platforms/android/qandroidplatformintegration.cpp b/src/plugins/platforms/android/qandroidplatformintegration.cpp index de9e27e595..173431208f 100644 --- a/src/plugins/platforms/android/qandroidplatformintegration.cpp +++ b/src/plugins/platforms/android/qandroidplatformintegration.cpp @@ -65,6 +65,7 @@ #include "qandroidplatformservices.h" #include "qandroidplatformtheme.h" #include "qandroidsystemlocale.h" +#include "qandroidplatformoffscreensurface.h" #include <QtPlatformHeaders/QEGLNativeContext> @@ -262,12 +263,20 @@ QPlatformOffscreenSurface *QAndroidPlatformIntegration::createPlatformOffscreenS { if (!QtAndroid::activity()) return nullptr; + QSurfaceFormat format(surface->requestedFormat()); format.setAlphaBufferSize(8); format.setRedBufferSize(8); format.setGreenBufferSize(8); format.setBlueBufferSize(8); + if (surface->nativeHandle()) { + // Adopt existing offscreen Surface + // The expectation is that nativeHandle is an ANativeWindow* representing + // an android.view.Surface + return new QAndroidPlatformOffscreenSurface(m_eglDisplay, format, surface); + } + return new QEGLPbuffer(m_eglDisplay, format, surface); } |