15VkSurfaceKHR *QOhosVulkanSurface::tryGetOrCreateVulkanWindowSurface(VkInstance instance,
16 PFN_vkCreateSurfaceOHOS createFn,
17 PFN_vkDestroySurfaceKHR destroyFn)
19 const bool surfaceValid = m_vulkanSurface.has_value() && m_surfaceNativeWindow == m_nativeWindow;
21 return &m_vulkanSurface->surface;
24 m_vulkanSurface.reset();
27 qCWarning(QtForOhos,
"%s: vkCreateSurfaceOHOS not available", Q_FUNC_INFO);
31 VkSurfaceCreateInfoOHOS surfaceInfo{};
32 surfaceInfo.sType = VK_STRUCTURE_TYPE_SURFACE_CREATE_INFO_OHOS;
33 surfaceInfo.pNext =
nullptr;
34 surfaceInfo.flags = 0;
35 surfaceInfo.window = m_nativeWindow;
37 VkSurfaceKHR vkSurface = VK_NULL_HANDLE;
38 VkResult err = createFn(instance, &surfaceInfo,
nullptr, &vkSurface);
39 if (err != VK_SUCCESS) {
40 qCWarning(QtForOhos,
"%s: Failed to create OHOS VkSurface: %d", Q_FUNC_INFO, err);
44 m_vulkanSurface.emplace(instance, vkSurface, destroyFn);
45 m_surfaceNativeWindow = m_nativeWindow;
47 return &m_vulkanSurface->surface;