From fcdbb4b8fd682f3738bcf0b54dce75eee6846f14 Mon Sep 17 00:00:00 2001 From: xiangsilian Date: Thu, 16 Oct 2025 20:52:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20android=20create=20surface?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/cpp/main.cpp | 2 ++ vulkan/Application.cpp | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+) 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 }