diff --git a/base/vulkanexamplebase.cpp b/base/vulkanexamplebase.cpp index 41fac974..b4e15b09 100644 --- a/base/vulkanexamplebase.cpp +++ b/base/vulkanexamplebase.cpp @@ -864,7 +864,40 @@ void VulkanExampleBase::handleMessages(HWND hWnd, UINT uMsg, WPARAM wParam, LPAR } } #elif defined(__ANDROID__) - // todo : Android event handling +void VulkanExampleBase::handleAppCommand(android_app * app, int32_t cmd) +{ + assert(app->userData != NULL); + VulkanExampleBase* vulkanExample = (VulkanExampleBase*)app->userData; + switch (cmd) + { + case APP_CMD_SAVE_STATE: + /* + vulkanExample->app->savedState = malloc(sizeof(struct saved_state)); + *((struct saved_state*)vulkanExample->app->savedState) = vulkanExample->state; + vulkanExample->app->savedStateSize = sizeof(struct saved_state); + */ + break; + case APP_CMD_INIT_WINDOW: + LOGD("APP_CMD_INIT_WINDOW"); + if (vulkanExample->androidApp->window != NULL) + { + LOGI("Initializing Vulkan..."); + vulkanExample->initVulkan(false); + vulkanExample->initSwapchain(); + vulkanExample->prepare(); + assert(vulkanExample->prepared); + LOGI("Vulkan initialized"); + } + else + { + LOGE("No window assigned!"); + } + break; + case APP_CMD_LOST_FOCUS: + //vulkanExample->animating = 0; + break; + } +} #elif defined(__linux__) // Set up a window using XCB and request event types xcb_window_t VulkanExampleBase::setupWindow() @@ -1190,3 +1223,4 @@ void VulkanExampleBase::setupSwapChain() { swapChain.create(setupCmdBuffer, &width, &height); } + diff --git a/base/vulkanexamplebase.h b/base/vulkanexamplebase.h index 6c9dc88e..2bec89f2 100644 --- a/base/vulkanexamplebase.h +++ b/base/vulkanexamplebase.h @@ -181,7 +181,7 @@ public: HWND setupWindow(HINSTANCE hinstance, WNDPROC wndproc); void handleMessages(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); #elif defined(__ANDROID__) - // todo : add event handler for Android + static void handleAppCommand(android_app* app, int32_t cmd); #elif defined(__linux__) xcb_window_t setupWindow(); void initxcbConnection(); @@ -231,7 +231,7 @@ public: void createPipelineCache(); // Prepare commonly used Vulkan functions - void prepare(); + virtual void prepare(); // Load a SPIR-V shader VkPipelineShaderStageCreateInfo loadShader(const char* fileName, VkShaderStageFlagBits stage);