diff --git a/app/src/main/cpp/main.cpp b/app/src/main/cpp/main.cpp index 794f54c..a8032e5 100644 --- a/app/src/main/cpp/main.cpp +++ b/app/src/main/cpp/main.cpp @@ -20,6 +20,8 @@ void handle_cmd(android_app *pApp, int32_t cmd) { } } +android_app* g_android_app = nullptr; + void android_main(struct android_app *pApp) { aout << "Welcome to android_main" << std::endl; diff --git a/vulkan/Application.cpp b/vulkan/Application.cpp index 33b2981..0d9cb4f 100644 --- a/vulkan/Application.cpp +++ b/vulkan/Application.cpp @@ -1,4 +1,11 @@ #include "Application.h" +#ifndef _WIN32 + +#else + #include + #include + #include "../app/src/main/cpp/AndroidOut.h" +#endif bool enableValidationLayers = true; @@ -71,11 +78,29 @@ void Application::run() cleanup(); } +#ifndef _WIN32 +#else + extern android_app* g_android_app +#endif + void Application::createSurface() { #ifdef _WIN32 if (glfwCreateWindowSurface(instance, window, nullptr, &surface) != VK_SUCCESS) { throw std::runtime_error("failed to create window surface!"); } +#else + if (instance == VK_NULL_HANDLE || !g_android_app) + { + return VK_NULL_HANDLE; + } + + VkSurfaceKHR surface{}; + + VkAndroidSurfaceCreateInfoKHR info{VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR}; + + info.window = g_android_app->window; + + VK_CHECK(vkCreateAndroidSurfaceKHR(instance, &info, nullptr, &surface)); #endif }