更新Mac/iOS/Wayland/Android平台的Vulkan Surface初始化

This commit is contained in:
hyzboy 2019-08-30 18:43:35 +08:00
parent 89aba9674b
commit 86e9b1533f
4 changed files with 99 additions and 11 deletions

View File

@ -1,28 +1,28 @@
#include"AndroidWindow.h"
#include<hgl/platform/Vulkan.h>
#include"AndroidWindow.h"
#include<vulkan/vulkan_android.h>
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);
}

29
src/Apple/MacVulkan.cpp Normal file
View File

@ -0,0 +1,29 @@
#include<hgl/platform/Vulkan.h>
#include"MacWindow.h"
#include<vulkan/vulkan_macos.h>
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

29
src/Apple/iOSVulkan.cpp Normal file
View File

@ -0,0 +1,29 @@
#include<hgl/platform/Vulkan.h>
#include"iOSWindow.h"
#include<vulkan/vulkan_ios.h>
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

View File

@ -0,0 +1,30 @@
#include<hgl/platform/Vulkan.h>
#include"WaylandWindow.h"
#include<vulkan/vulkan_wayland.h>
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