From 86e9b1533f66f3b3b5034a12506467ebd17ab739 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Fri, 30 Aug 2019 18:43:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0Mac/iOS/Wayland/Android?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E7=9A=84Vulkan=20Surface=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Android/AndroidVulkan.cpp | 22 +++++++++++----------- src/Apple/MacVulkan.cpp | 29 +++++++++++++++++++++++++++++ src/Apple/iOSVulkan.cpp | 29 +++++++++++++++++++++++++++++ src/UNIX/WaylandVulkan.cpp | 30 ++++++++++++++++++++++++++++++ 4 files changed, 99 insertions(+), 11 deletions(-) create mode 100644 src/Apple/MacVulkan.cpp create mode 100644 src/Apple/iOSVulkan.cpp create mode 100644 src/UNIX/WaylandVulkan.cpp diff --git a/src/Android/AndroidVulkan.cpp b/src/Android/AndroidVulkan.cpp index 9445716..cb34159 100644 --- a/src/Android/AndroidVulkan.cpp +++ b/src/Android/AndroidVulkan.cpp @@ -1,28 +1,28 @@ -#include"AndroidWindow.h" +#include +#include"AndroidWindow.h" #include namespace hgl { - VkSurfaceKHR AndroidWindow::CreateSurface(VkInstance vk_inst) + VkSurfaceKHR CreateVulkanSurface(VkInstance vk_inst,Window *w) { - PFN_vkCreateAndroidSurfaceKHR CreateAndroidSurfaceKHR; + if(vk_inst==VK_NULL_HANDLE)return(VK_NULL_HANDLE); + if(!w)return(VK_NULL_HANDLE); - GET_INSTANCE_PROC_ADDR(vk_inst,CreateAndroidSurfaceKHR); - - if(!CreateAndroidSurfaceKHR) - return(nullptr); + AndroidWindow *win=(Android *)w; VkAndroidSurfaceCreateInfoKHR createInfo; - createInfo.sType = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR; - createInfo.pNext = nullptr; - createInfo.window = AndroidGetApplicationWindow(); + createInfo.sType = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR; + createInfo.pNext = nullptr; + createInfo.flags = 0; + createInfo.window = win->GetWindow(); VkSurfaceKHR surface; VkResult res=CreateAndroidSurfaceKHR(vk_inst,&createInfo,nullptr,&surface); if(res!=VK_SUCCESS) - return(nullptr); + return(VK_NULL_HANDLE); return(surface); } diff --git a/src/Apple/MacVulkan.cpp b/src/Apple/MacVulkan.cpp new file mode 100644 index 0000000..3a4510d --- /dev/null +++ b/src/Apple/MacVulkan.cpp @@ -0,0 +1,29 @@ +#include +#include"MacWindow.h" +#include + +namespace hgl +{ + VkSurfaceKHR CreateVulkanSurface(VkInstance vk_inst,Window *w) + { + if(vk_inst==VK_NULL_HANDLE)return(VK_NULL_HANDLE); + if(!w)return(VK_NULL_HANDLE); + + MacWindow *win=(MacWindow *)w; + + VkMacOSSurfaceCreateInfoMVK createInfo; + createInfo.sType = VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK; + createInfo.pNext = nullptr; + createInfo.flags = 0; + createInfo.pView = win->GetView(); + + VkSurfaceKHR surface; + + VkResult res = vkCreateMacOSSurfaceMVK(vk_inst, &createInfo, nullptr, &surface); + + if (res != VK_SUCCESS) + return(VK_NULL_HANDLE); + + return(surface); + } +}//namespace hgl diff --git a/src/Apple/iOSVulkan.cpp b/src/Apple/iOSVulkan.cpp new file mode 100644 index 0000000..ddd68bb --- /dev/null +++ b/src/Apple/iOSVulkan.cpp @@ -0,0 +1,29 @@ +#include +#include"iOSWindow.h" +#include + +namespace hgl +{ + VkSurfaceKHR CreateVulkanSurface(VkInstance vk_inst,Window *w) + { + if(vk_inst==VK_NULL_HANDLE)return(VK_NULL_HANDLE); + if(!w)return(VK_NULL_HANDLE); + + iOSWindow *win=(iOSWindow *)w; + + VkIOSSurfaceCreateInfoMVK createInfo; + createInfo.sType = VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK; + createInfo.pNext = nullptr; + createInfo.flags = 0; + createInfo.pView = win->GetView(); + + VkSurfaceKHR surface; + + VkResult res = vkCreateIOSSurfaceMVK(vk_inst, &createInfo, nullptr, &surface); + + if (res != VK_SUCCESS) + return(VK_NULL_HANDLE); + + return(surface); + } +}//namespace hgl diff --git a/src/UNIX/WaylandVulkan.cpp b/src/UNIX/WaylandVulkan.cpp new file mode 100644 index 0000000..bda8d59 --- /dev/null +++ b/src/UNIX/WaylandVulkan.cpp @@ -0,0 +1,30 @@ +#include +#include"WaylandWindow.h" +#include + +namespace hgl +{ + VkSurfaceKHR CreateVulkanSurface(VkInstance vk_inst,Window *w) + { + if(vk_inst==VK_NULL_HANDLE)return(VK_NULL_HANDLE); + if(!w)return(VK_NULL_HANDLE); + + WaylandWindow *win=(WaylandWindow *)w; + + VkWaylandSurfaceCreateInfoKHR createInfo; + createInfo.sType = VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR; + createInfo.pNext = nullptr; + createInfo.flags = 0; + createInfo.display = win->GetDisplay(); + createInfo.surface = win->GetSurface(); + + VkSurfaceKHR surface; + + VkResult res = vkCreateWaylandSurfaceKHR(vk_inst, &createInfo, nullptr, &surface); + + if (res != VK_SUCCESS) + return(VK_NULL_HANDLE); + + return(surface); + } +}//namespace hgl