Program Listing for File VkWin32Platform.cpp¶
↰ Return to documentation for file (Source\Azura\RenderSystem\Src\Vulkan\Windows\VkWin32Platform.cpp
)
#include "Vulkan/VkPlatform.h"
#include <Windows.h>
#include <vulkan/vulkan_win32.h>
#include "Vulkan/VkMacros.h"
namespace Azura {
namespace Vulkan {
VkSurfaceKHR VkPlatform::CreateSurface(const void* windowHandle, VkInstance instance, const Log& log_VulkanRenderSystem) {
VkWin32SurfaceCreateInfoKHR createInfo = {};
createInfo.sType = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR;
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
createInfo.hwnd = *reinterpret_cast<const HWND*>(windowHandle);
createInfo.hinstance = GetModuleHandle(nullptr);
const auto CreateWin32SurfaceKHR =
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
reinterpret_cast<PFN_vkCreateWin32SurfaceKHR>(vkGetInstanceProcAddr(instance, "vkCreateWin32SurfaceKHR"));
FAIL_IF(log_VulkanRenderSystem, CreateWin32SurfaceKHR == nullptr, "Cannot find PFN_vkCreateWin32SurfaceKHR");
VkSurfaceKHR surface;
VERIFY_VK_OP(log_VulkanRenderSystem, CreateWin32SurfaceKHR(instance, &createInfo, nullptr, &surface), "Failed to create window surface");
return surface;
}
void VkPlatform::GetInstanceExtensions(Containers::Vector<const char*>& extensions) {
extensions.PushBack(VK_KHR_SURFACE);
extensions.PushBack("VK_KHR_win32_surface");
#ifdef BUILD_DEBUG
extensions.PushBack(VK_EXT_DEBUG_REPORT_EXTENSION_NAME);
#endif
}
} // namespace Vulkan
} // namespace Azura