#include "VulkanWindow.h" // #include VulkanWindow::VulkanWindow() { setSurfaceType(QWindow::VulkanSurface); } VulkanWindow::~VulkanWindow() { // cleanup(); } void VulkanWindow::createVulkanSurface(VkInstance instance, VkSurfaceKHR& surface) { QVulkanInstance* vkInstance = new QVulkanInstance(); vkInstance->setVkInstance(instance); vkInstance->create(); setVulkanInstance(vkInstance); VkSurfaceKHR newSurface = QVulkanInstance::surfaceForWindow(this); surface = newSurface; if (!surface) { qDebug() << "############## Failed to retrieve surface using Qt. ##############"; exit(EXIT_FAILURE); } // #if defined(Q_OS_ANDROID) // VkAndroidSurfaceCreateInfoKHR surfaceCreateInfo = {}; // surfaceCreateInfo.sType = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR; // surfaceCreateInfo.pNext = nullptr; // surfaceCreateInfo.flags = 0; // ANativeWindow* nativeWindow = reinterpret_cast(winId()); // if (!nativeWindow) { // qCritical() << "Failed to retrieve ANativeWindow using JNI."; // exit(EXIT_FAILURE); // } // surfaceCreateInfo.window = nativeWindow; // if (vkCreateAndroidSurfaceKHR(instance, &surfaceCreateInfo, nullptr, &surface) != VK_SUCCESS) { // qCritical() << "Failed to create Vulkan surface on Android."; // exit(EXIT_FAILURE); // } // #elif defined(Q_OS_LINUX) // VkXcbSurfaceCreateInfoKHR surfaceCreateInfo = {}; // surfaceCreateInfo.sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR; // surfaceCreateInfo.connection = QX11Info::connection(); // surfaceCreateInfo.window = static_cast(winId()); // if (vkCreateXcbSurfaceKHR(instance, &surfaceCreateInfo, nullptr, &surface) != VK_SUCCESS) { // qCritical() << "Failed to create Vulkan surface on Linux."; // exit(EXIT_FAILURE); // } // #endif qDebug() << "Vulkan surface created successfully."; } void VulkanWindow::getWindowSize(int &width, int &height) { width = this->width(); height = this->height(); } void VulkanWindow::cleanup() { }