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