• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 /*
3  * Copyright 2016 Google Inc.
4  *
5  * Use of this source code is governed by a BSD-style license that can be
6  * found in the LICENSE file.
7  */
8 
9 #include "WindowContextFactory_android.h"
10 #include "../VulkanWindowContext.h"
11 
12 namespace sk_app {
13 
14 namespace window_context_factory {
15 
NewVulkanForAndroid(ANativeWindow * window,const DisplayParams & params)16 WindowContext* NewVulkanForAndroid(ANativeWindow* window, const DisplayParams& params) {
17     auto createVkSurface = [window] (VkInstance instance) -> VkSurfaceKHR {
18         PFN_vkCreateAndroidSurfaceKHR createAndroidSurfaceKHR =
19                 (PFN_vkCreateAndroidSurfaceKHR)vkGetInstanceProcAddr(instance,
20                                                                      "vkCreateAndroidSurfaceKHR");
21 
22         if (!window) {
23             return VK_NULL_HANDLE;
24         }
25         VkSurfaceKHR surface;
26 
27         VkAndroidSurfaceCreateInfoKHR surfaceCreateInfo;
28         memset(&surfaceCreateInfo, 0, sizeof(VkAndroidSurfaceCreateInfoKHR));
29         surfaceCreateInfo.sType = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR;
30         surfaceCreateInfo.pNext = nullptr;
31         surfaceCreateInfo.flags = 0;
32         surfaceCreateInfo.window = window;
33 
34         VkResult res = createAndroidSurfaceKHR(instance, &surfaceCreateInfo,
35                                                nullptr, &surface);
36         return (VK_SUCCESS == res) ? surface : VK_NULL_HANDLE;
37     };
38 
39     auto canPresent = [](VkInstance, VkPhysicalDevice, uint32_t) { return true; };
40 
41     WindowContext* ctx = new VulkanWindowContext(params, createVkSurface, canPresent);
42     if (!ctx->isValid()) {
43         delete ctx;
44         return nullptr;
45     }
46     return ctx;
47 }
48 
49 }  // namespace window_context_factory
50 }  // namespace sk_app
51