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