87 if (QAndroidEventDispatcherStopper::stopped() ||
88 QGuiApplication::applicationState() == Qt::ApplicationSuspended) {
89 qDebug(lcQpaWindow) <<
"Application not active, return existing surface.";
93 bool needsExpose =
false;
97 QMutexLocker lock(&m_surfaceMutex);
98 if (!m_androidSurfaceCreated) {
99 QtAndroidPrivate::AndroidDeadlockProtector protector(
100 u"QAndroidPlatformVulkanWindow::vkSurface()"_s);
101 if (!protector.acquire())
104 m_surfaceWaitCondition.wait(&m_surfaceMutex);
107 if (!m_androidSurfaceCreated || !m_androidSurfaceObject.isValid())
111 m_nativeWindow = ANativeWindow_fromSurface(env.jniEnv(), m_androidSurfaceObject.object());
113 VkAndroidSurfaceCreateInfoKHR surfaceInfo;
114 memset(&surfaceInfo, 0,
sizeof(surfaceInfo));
115 surfaceInfo.sType = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR;
116 surfaceInfo.window = m_nativeWindow;
117 QVulkanInstance *inst = window()->vulkanInstance();
119 qWarning(
"Attempted to create Vulkan surface without an instance; was QWindow::setVulkanInstance() called?");
122 if (!m_createVkSurface) {
123 m_createVkSurface =
reinterpret_cast<PFN_vkCreateAndroidSurfaceKHR>(
124 inst->getInstanceProcAddr(
"vkCreateAndroidSurfaceKHR"));
126 if (!m_destroyVkSurface) {
127 m_destroyVkSurface =
reinterpret_cast<PFN_vkDestroySurfaceKHR>(
128 inst->getInstanceProcAddr(
"vkDestroySurfaceKHR"));
130 VkResult err = m_createVkSurface(inst->vkInstance(), &surfaceInfo,
nullptr, &m_vkSurface);
131 if (err != VK_SUCCESS)
132 qWarning(
"Failed to create Android VkSurface: %d", err);