Browse Source

update on adding android

It works for linux right now. Be careful about the order of including XCB related headers.
master
AliMehrabani 5 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