Browse Source

update on adding android

It works for linux right now. Be careful about the order of including XCB related headers.
master
AliMehrabani 10 months ago
parent
commit
181af9c9ea
  1. 43
      VkTest.pro
  2. 8
      VkTest.pro.user
  3. 94
      VulkanTutorial1.0/ComputeAndGraphics.cpp
  4. 6
      VulkanTutorial1.0/ComputeAndGraphics.h
  5. 23
      VulkanTutorial1.0/Types.h
  6. 27
      VulkanTutorial1.0/VulkanWindow.cpp
  7. 14
      VulkanTutorial1.0/VulkanWindow.h

43
VkTest.pro

@ -1,18 +1,23 @@
QT += core xml x11extras gui QT += core xml gui
CONFIG += c++17 CONFIG += c++17
INCLUDEPATH += /usr/include/vulkan \ QMAKE_SPEC_T = $$[QMAKE_SPEC]
INCLUDEPATH += \
# /usr/include/vulkan \
$$PWD/third_party \ $$PWD/third_party \
$$PWD/third_party/vkbootstrap \ # $$PWD/third_party/vkbootstrap \
$$PWD/third_party/vkbootstrap/build \ # $$PWD/third_party/vkbootstrap/build \
$$PWD/third_party/fmt/include \ # $$PWD/third_party/fmt/include \
$$PWD/third_party/SDL/build/include/SDL2 \ # $$PWD/third_party/SDL/build/include/SDL2 \
$$PWD/third_party/SDL/build/include-config-/SDL2 \ # $$PWD/third_party/SDL/build/include-config-/SDL2 \
$$PWD/third_party/fmt/build # $$PWD/third_party/fmt/build
LIBS += -lglfw -lvulkan -ldl -lpthread -lX11 -lXxf86vm -lXrandr -lXi \ LIBS += \
-L$$PWD/third_party/pugixml/build -lpugixml \ -lglfw -lvulkan -ldl -lpthread -lX11 -lXxf86vm -lXrandr -lXi \
-lvulkan \
# -L$$PWD/third_party/pugixml/build -lpugixml \
# -lSDL2main -lSDL2 -lvk-bootstrap \ # -lSDL2main -lSDL2 -lvk-bootstrap \
# -L$$PWD/third_party/fmt/build -lfmt # -L$$PWD/third_party/fmt/build -lfmt
@ -21,13 +26,13 @@ SOURCES += \
VulkanTutorial1.0/VulkanWindow.cpp \ VulkanTutorial1.0/VulkanWindow.cpp \
main.cpp main.cpp
HEADERS += \ \ HEADERS += \
VulkanTutorial1.0/ComputeAndGraphics.h \ VulkanTutorial1.0/ComputeAndGraphics.h \
VulkanTutorial1.0/Types.h \ VulkanTutorial1.0/Types.h \
VulkanTutorial1.0/VulkanWindow.h VulkanTutorial1.0/VulkanWindow.h
DISTFILES += \ \ DISTFILES += \
shaders/VulkanTutorial1.0/ComputeAndGraphics/compComp.spv \ shaders/VulkanTutorial1.0/ComputeAndGraphics/compComp.spv \
shaders/VulkanTutorial1.0/ComputeAndGraphics/compile.sh \ shaders/VulkanTutorial1.0/ComputeAndGraphics/compile.sh \
shaders/VulkanTutorial1.0/ComputeAndGraphics/fragComp.spv \ shaders/VulkanTutorial1.0/ComputeAndGraphics/fragComp.spv \
@ -42,10 +47,9 @@ DISTFILES += \ \
shaders/VulkanTutorial1.0/HelloTriangle/vert.spv shaders/VulkanTutorial1.0/HelloTriangle/vert.spv
contains(ANDROID_TARGET_ARCH,arm64-v8a) { contains(QMAKE_SPEC_T,.*android.*) {
QT += QT +=
ANDROID_PACKAGE_SOURCE_DIR = \ ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android
$$PWD/android
OTHER_FILES += android/src/Vulkan \ OTHER_FILES += android/src/Vulkan \
android/AndroidManifest.xml \ android/AndroidManifest.xml \
android/build.gradle \ android/build.gradle \
@ -55,3 +59,10 @@ contains(ANDROID_TARGET_ARCH,arm64-v8a) {
android/gradlew.bat \ android/gradlew.bat \
android/res/values/libs.xml android/res/values/libs.xml
} }
contains(QMAKE_SPEC_T,.*linux.*) {
QT += x11extras
INCLUDEPATH += \
/usr/include/vulkan \
}

8
VkTest.pro.user

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject> <!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.10.1, 2024-11-18T18:35:13. --> <!-- Written by QtCreator 4.10.1, 2024-11-19T11:35:57. -->
<qtcreator> <qtcreator>
<data> <data>
<variable>EnvironmentId</variable> <variable>EnvironmentId</variable>
@ -8,7 +8,7 @@
</data> </data>
<data> <data>
<variable>ProjectExplorer.Project.ActiveTarget</variable> <variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value> <value type="int">1</value>
</data> </data>
<data> <data>
<variable>ProjectExplorer.Project.EditorSettings</variable> <variable>ProjectExplorer.Project.EditorSettings</variable>
@ -623,8 +623,8 @@
<valuelist type="QVariantList" key="Android.PreStartShellCmdListKey"/> <valuelist type="QVariantList" key="Android.PreStartShellCmdListKey"/>
<value type="int" key="PE.EnvironmentAspect.Base">0</value> <value type="int" key="PE.EnvironmentAspect.Base">0</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/> <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName"></value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">VkTest</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">VkTest</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.AndroidRunConfiguration:/home/ali-mehrabani/Qt_projects/VkTest/VkTest.pro</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.AndroidRunConfiguration:/home/ali-mehrabani/Qt_projects/VkTest/VkTest.pro</value>
<value type="QString" key="RunConfiguration.Arguments"></value> <value type="QString" key="RunConfiguration.Arguments"></value>
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value> <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>

94
VulkanTutorial1.0/ComputeAndGraphics.cpp

@ -146,10 +146,10 @@ VkApplicationInfo ComputeAndGraphics::createInstanceAppInfo()
VkApplicationInfo appInfo{}; VkApplicationInfo appInfo{};
appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
appInfo.pApplicationName = "Vulkan App"; appInfo.pApplicationName = "Vulkan App";
appInfo.applicationVersion = VK_MAKE_VERSION(1, 3, 0); appInfo.applicationVersion = VK_MAKE_VERSION(1, 1, 0);
appInfo.pEngineName = "No Engine"; appInfo.pEngineName = "No Engine";
appInfo.engineVersion = VK_MAKE_VERSION(1, 3, 0); appInfo.engineVersion = VK_MAKE_VERSION(1, 1, 0);
appInfo.apiVersion = VK_API_VERSION_1_3; appInfo.apiVersion = VK_API_VERSION_1_1;
return appInfo; return appInfo;
} }
@ -211,10 +211,11 @@ std::vector<const char*> ComputeAndGraphics::getRequiredExtensions()
std::vector<const char*> extensions; std::vector<const char*> extensions;
extensions.push_back(VK_KHR_SURFACE_EXTENSION_NAME); extensions.push_back(VK_KHR_SURFACE_EXTENSION_NAME);
#ifdef Q_OS_LINUX
extensions.push_back(VK_KHR_XCB_SURFACE_EXTENSION_NAME); #if defined(Q_OS_ANDROID)
#elif Q_OS_ANDROID
extensions.push_back(VK_KHR_ANDROID_SURFACE_EXTENSION_NAME); extensions.push_back(VK_KHR_ANDROID_SURFACE_EXTENSION_NAME);
#elif defined(Q_OS_LINUX)
extensions.push_back(VK_KHR_XCB_SURFACE_EXTENSION_NAME);
#endif #endif
if (enableValidationLayers) { if (enableValidationLayers) {
@ -387,11 +388,11 @@ void ComputeAndGraphics::createLogicalDevice()
VkPhysicalDeviceFeatures deviceFeatures = createDeviceCoreFeatures(); VkPhysicalDeviceFeatures deviceFeatures = createDeviceCoreFeatures();
VkPhysicalDeviceVulkan12Features deviceFeatures12 = createDeviceVulkan12Features(nullptr); // VkPhysicalDeviceVulkan12Features deviceFeatures12 = createDeviceVulkan12Features(nullptr);
// VkPhysicalDevice8BitStorageFeaturesKHR device8BitStorageFeatures2Info = createDevice8BitStorageFeatures2Info(); // VkPhysicalDevice8BitStorageFeaturesKHR device8BitStorageFeatures2Info = createDevice8BitStorageFeatures2Info();
// VkPhysicalDeviceFeatures2 deviceCoreFeatures2 = createDeviceCoreFeatures2(&device8BitStorageFeatures2Info); // VkPhysicalDeviceFeatures2 deviceCoreFeatures2 = createDeviceCoreFeatures2(&device8BitStorageFeatures2Info);
VkDeviceCreateInfo createInfo = createLogicalDeviceInfo(queueCreateInfos, &deviceFeatures, &deviceFeatures12); VkDeviceCreateInfo createInfo = createLogicalDeviceInfo(queueCreateInfos, &deviceFeatures, nullptr);
if (vkCreateDevice(_physicalDevice, &createInfo, nullptr, &_device) != VK_SUCCESS) { if (vkCreateDevice(_physicalDevice, &createInfo, nullptr, &_device) != VK_SUCCESS) {
throw std::runtime_error("failed to create logical device!"); throw std::runtime_error("failed to create logical device!");
@ -420,48 +421,48 @@ VkPhysicalDeviceFeatures ComputeAndGraphics::createDeviceCoreFeatures()
return deviceFeatures; return deviceFeatures;
} }
VkPhysicalDeviceVulkan12Features ComputeAndGraphics::createDeviceVulkan12Features(void* pNext) //VkPhysicalDeviceVulkan12Features ComputeAndGraphics::createDeviceVulkan12Features(void* pNext)
{ //{
VkPhysicalDeviceVulkan12Features deviceFeatures12{}; // VkPhysicalDeviceVulkan12Features deviceFeatures12{};
deviceFeatures12.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES; // deviceFeatures12.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES;
deviceFeatures12.scalarBlockLayout = VK_TRUE; // deviceFeatures12.scalarBlockLayout = VK_TRUE;
deviceFeatures12.shaderInt8 = VK_TRUE; // deviceFeatures12.shaderInt8 = VK_TRUE;
deviceFeatures12.uniformAndStorageBuffer8BitAccess = VK_TRUE; // deviceFeatures12.uniformAndStorageBuffer8BitAccess = VK_TRUE;
// deviceFeatures12.storageBuffer8BitAccess = VK_TRUE; //// deviceFeatures12.storageBuffer8BitAccess = VK_TRUE;
// deviceFeatures12.storagePushConstant8 = VK_TRUE; //// deviceFeatures12.storagePushConstant8 = VK_TRUE;
deviceFeatures12.pNext = pNext; // deviceFeatures12.pNext = pNext;
return deviceFeatures12; // return deviceFeatures12;
} //}
VkPhysicalDeviceVulkan13Features ComputeAndGraphics::createDeviceVulkan13Features(void* pNext) //VkPhysicalDeviceVulkan13Features ComputeAndGraphics::createDeviceVulkan13Features(void* pNext)
{ //{
VkPhysicalDeviceVulkan13Features deviceFeatures13{}; // VkPhysicalDeviceVulkan13Features deviceFeatures13{};
deviceFeatures13.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES; // deviceFeatures13.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES;
deviceFeatures13.pNext = pNext; // deviceFeatures13.pNext = pNext;
return deviceFeatures13; // return deviceFeatures13;
} //}
VkPhysicalDeviceFeatures2 ComputeAndGraphics::createDeviceCoreFeatures2(VkPhysicalDevice8BitStorageFeatures* pNext) //VkPhysicalDeviceFeatures2 ComputeAndGraphics::createDeviceCoreFeatures2(VkPhysicalDevice8BitStorageFeatures* pNext)
{ //{
VkPhysicalDeviceFeatures2 deviceFeatures2{}; // VkPhysicalDeviceFeatures2 deviceFeatures2{};
deviceFeatures2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; // deviceFeatures2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
deviceFeatures2.pNext = pNext; // deviceFeatures2.pNext = pNext;
return deviceFeatures2; // return deviceFeatures2;
} //}
VkPhysicalDevice8BitStorageFeaturesKHR ComputeAndGraphics::createDevice8BitStorageFeatures2Info() //VkPhysicalDevice8BitStorageFeaturesKHR ComputeAndGraphics::createDevice8BitStorageFeatures2Info()
{ //{
VkPhysicalDevice8BitStorageFeatures storage8BitFeatures{}; // VkPhysicalDevice8BitStorageFeatures storage8BitFeatures{};
storage8BitFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES; // storage8BitFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES;
storage8BitFeatures.uniformAndStorageBuffer8BitAccess = VK_TRUE; // storage8BitFeatures.uniformAndStorageBuffer8BitAccess = VK_TRUE;
storage8BitFeatures.storagePushConstant8 = VK_TRUE; // storage8BitFeatures.storagePushConstant8 = VK_TRUE;
storage8BitFeatures.storageBuffer8BitAccess = VK_TRUE; // storage8BitFeatures.storageBuffer8BitAccess = VK_TRUE;
return storage8BitFeatures; // return storage8BitFeatures;
} //}
VkDeviceCreateInfo ComputeAndGraphics::createLogicalDeviceInfo(std::vector<VkDeviceQueueCreateInfo>& queueCreateInfos VkDeviceCreateInfo ComputeAndGraphics::createLogicalDeviceInfo(std::vector<VkDeviceQueueCreateInfo>& queueCreateInfos
, VkPhysicalDeviceFeatures* deviceFeatures, void* pNext) , VkPhysicalDeviceFeatures* deviceFeatures, void* pNext)
@ -2164,7 +2165,12 @@ void ComputeAndGraphics::updateComputeUniformBuffer(uint32_t currentImage)
} }
void ComputeAndGraphics::recreateSwapChain() { void ComputeAndGraphics::recreateSwapChain() {
int width = 800, height = 600; int width = 0, height = 0;
_windowQt->getWindowSize(width, height);
while (width == 0 || height == 0) {
_windowQt->getWindowSize(width, height);
}
// glfwGetFramebufferSize(_window, &width, &height); // glfwGetFramebufferSize(_window, &width, &height);
// while (width == 0 || height == 0) { // while (width == 0 || height == 0) {
// glfwGetFramebufferSize(_window, &width, &height); // glfwGetFramebufferSize(_window, &width, &height);

6
VulkanTutorial1.0/ComputeAndGraphics.h

@ -200,8 +200,8 @@ private:
VkDeviceQueueCreateInfo createQueueInfo(uint32_t queueFamily, uint32_t queueCount, float* queuePriority); VkDeviceQueueCreateInfo createQueueInfo(uint32_t queueFamily, uint32_t queueCount, float* queuePriority);
VkPhysicalDeviceFeatures createDeviceCoreFeatures(); VkPhysicalDeviceFeatures createDeviceCoreFeatures();
VkPhysicalDeviceVulkan12Features createDeviceVulkan12Features(void* pNext); // VkPhysicalDeviceVulkan12Features createDeviceVulkan12Features(void* pNext);
VkPhysicalDeviceVulkan13Features createDeviceVulkan13Features(void* pNext); // VkPhysicalDeviceVulkan13Features createDeviceVulkan13Features(void* pNext);
VkPhysicalDeviceFeatures2KHR createDeviceCoreFeatures2(VkPhysicalDevice8BitStorageFeaturesKHR* pNext); VkPhysicalDeviceFeatures2KHR createDeviceCoreFeatures2(VkPhysicalDevice8BitStorageFeaturesKHR* pNext);
VkPhysicalDevice8BitStorageFeaturesKHR createDevice8BitStorageFeatures2Info(); VkPhysicalDevice8BitStorageFeaturesKHR createDevice8BitStorageFeatures2Info();
VkDeviceCreateInfo createLogicalDeviceInfo(std::vector<VkDeviceQueueCreateInfo>& queueCreateInfos, VkPhysicalDeviceFeatures* deviceFeatures VkDeviceCreateInfo createLogicalDeviceInfo(std::vector<VkDeviceQueueCreateInfo>& queueCreateInfos, VkPhysicalDeviceFeatures* deviceFeatures
@ -315,7 +315,7 @@ private:
uint32_t currentFrame = 0; uint32_t currentFrame = 0;
bool framebufferResized = false; bool framebufferResized = false;
GLFWwindow *_window; // GLFWwindow *_window;
VulkanWindow* _windowQt; VulkanWindow* _windowQt;
VkInstance _instance; VkInstance _instance;
VkDebugUtilsMessengerEXT _debugMessenger; VkDebugUtilsMessengerEXT _debugMessenger;

23
VulkanTutorial1.0/Types.h

@ -3,16 +3,23 @@
#pragma once #pragma once
#if defined(Q_OS_ANDROID)
#define VK_USE_PLATFORM_ANDROID_KHR // Enable Vulkan support for Android
#elif defined(Q_OS_LINUX)
#define VK_USE_PLATFORM_XCB_KHR // Enable Vulkan support for Linux (XCB)
#include <xcb/xcb.h>
#endif
#include <vulkan/vulkan.h> #include <vulkan/vulkan.h>
#include <iostream> #include <iostream>
#pragma once
//#define VK_USE_PLATFORM_ //#define VK_USE_PLATFORM_
#define GLFW_INCLUDE_VULKAN //#define GLFW_INCLUDE_VULKAN
#include <GLFW/glfw3.h> //#include <GLFW/glfw3.h>
//#define GLFW_EXPOSE_NATIVE_ //#define GLFW_EXPOSE_NATIVE_
#include <GLFW/glfw3native.h> //#include <GLFW/glfw3native.h>
#define GLM_FORCE_RADIANS #define GLM_FORCE_RADIANS
//#define GLM_FORCE_DEFAULT_ALIGNED_GENTYPES //#define GLM_FORCE_DEFAULT_ALIGNED_GENTYPES
@ -25,12 +32,6 @@
#include <QObject> #include <QObject>
#ifdef Q_OS_ANDROID
const QString TARGET_PLATFORM = "Android";
#else
const QString TARGET_PLATFORM = "Linux";
#endif
struct SwapChainSupportDetails { struct SwapChainSupportDetails {
VkSurfaceCapabilitiesKHR capabilities; VkSurfaceCapabilitiesKHR capabilities;
std::vector<VkSurfaceFormatKHR> formats; std::vector<VkSurfaceFormatKHR> formats;

27
VulkanTutorial1.0/VulkanWindow.cpp

@ -16,17 +16,8 @@ VulkanWindow::~VulkanWindow() {
VkSurfaceKHR VulkanWindow::createVulkanSurface(VkInstance instance, VkSurfaceKHR& surface) { VkSurfaceKHR VulkanWindow::createVulkanSurface(VkInstance instance, VkSurfaceKHR& surface) {
#ifdef Q_OS_LINUX
VkXcbSurfaceCreateInfoKHR surfaceCreateInfo = {};
surfaceCreateInfo.sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR;
surfaceCreateInfo.connection = QX11Info::connection();
surfaceCreateInfo.window = static_cast<unsigned int>(winId());
if (vkCreateXcbSurfaceKHR(instance, &surfaceCreateInfo, nullptr, &surface) != VK_SUCCESS) { #if defined(Q_OS_ANDROID)
qCritical() << "Failed to create Vulkan surface on Linux.";
exit(EXIT_FAILURE);
}
#elif Q_OS_ANDROID
VkAndroidSurfaceCreateInfoKHR surfaceCreateInfo = {}; VkAndroidSurfaceCreateInfoKHR surfaceCreateInfo = {};
surfaceCreateInfo.sType = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR; surfaceCreateInfo.sType = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR;
surfaceCreateInfo.window = reinterpret_cast<ANativeWindow*>(winId()); surfaceCreateInfo.window = reinterpret_cast<ANativeWindow*>(winId());
@ -35,12 +26,28 @@ VkSurfaceKHR VulkanWindow::createVulkanSurface(VkInstance instance, VkSurfaceKHR
qCritical() << "Failed to create Vulkan surface on Android."; qCritical() << "Failed to create Vulkan surface on Android.";
exit(EXIT_FAILURE); 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<unsigned int>(winId());
if (vkCreateXcbSurfaceKHR(instance, &surfaceCreateInfo, nullptr, &surface) != VK_SUCCESS) {
qCritical() << "Failed to create Vulkan surface on Linux.";
exit(EXIT_FAILURE);
}
#endif #endif
_surface = surface; _surface = surface;
qDebug() << "Vulkan surface created successfully."; qDebug() << "Vulkan surface created successfully.";
return _surface; return _surface;
} }
void VulkanWindow::getWindowSize(int &width, int &height)
{
width = this->width();
height = this->height();
}
void VulkanWindow::cleanup() { void VulkanWindow::cleanup() {
if (_surface != VK_NULL_HANDLE) { if (_surface != VK_NULL_HANDLE) {
vkDestroySurfaceKHR(_instance, _surface, nullptr); vkDestroySurfaceKHR(_instance, _surface, nullptr);

14
VulkanTutorial1.0/VulkanWindow.h

@ -4,20 +4,19 @@
#include <QObject> #include <QObject>
#include <QWindow> #include <QWindow>
#include <QDebug> #include <QDebug>
#include <QX11Info>
#include "Types.h" #include "Types.h"
#ifdef Q_OS_ANDROID #if defined(Q_OS_ANDROID)
#define VK_USE_PLATFORM_ANDROID_KHR // Enable Vulkan support for Android
#include <vulkan_android.h> #include <vulkan_android.h>
#else #elif defined(Q_OS_LINUX)
#include <xcb/xcb.h>
#define VK_USE_PLATFORM_XCB_KHR // Enable Vulkan support for Linux (XCB)
#include <vulkan_xcb.h> #include <vulkan_xcb.h>
#include <QX11Info>
#endif #endif
#define VK_USE_PLATFORM_XCB_KHR // Enable Vulkan support for Linux (XCB)
#define VK_USE_PLATFORM_ANDROID_KHR // Enable Vulkan support for Android
class VulkanWindow : public QWindow class VulkanWindow : public QWindow
{ {
Q_OBJECT Q_OBJECT
@ -27,6 +26,7 @@ public:
virtual ~VulkanWindow(); virtual ~VulkanWindow();
VkSurfaceKHR createVulkanSurface(VkInstance instance, VkSurfaceKHR& surface); VkSurfaceKHR createVulkanSurface(VkInstance instance, VkSurfaceKHR& surface);
void getWindowSize(int& width, int& height);
private: private:
void cleanup(); void cleanup();

Loading…
Cancel
Save