Vulkan 学习(9)---- vkSuraceKHR 创建

OverView

Vulkan Components

Vulkan 是一个平台无关的图形API,这意味着它不能直接与特定的窗口系统(WindowslinuxmacOS 的窗口系统)进行交互

为了解决这个问题,Vulkan 引入了窗口系统集成(Window System Intergration WSI)机制,使得 Vulkan 应用程序可以与不同操作系统的窗口系统(比如 WindowsWin32LinuxX11 或者 WaylandAndroidANativeWindow) 进行交互

这些机制运行Vulkan应用程序在窗口系统中创建和管理表面(Surface),并和图形硬件交换图像(Swapchain)

VK_KHR_surfaceWSI的核心扩展(instance 扩展),是 Vulkan 中用于渲染表面的对象,是一个平台无关的抽象类型,用于封装与窗口系统相关的表面信息,通过这个对象,Vulkan可以将渲染结果输出到窗口上。

创建窗口表面

VkSurfaceKHR对象是平台无关的,但是创建VkSurfaceKHR对象时,不同的窗口系统需要使用不同的 API

vkCreateAndroidSurfaceKHR()
vkCreateWaylandSurfaceKHR()
vkCreateWin32SurfaceKHR()
vkCreateXcbSurfaceKHR()

需要注意的是,创建Vulkan实例的时候需要提前设置好相应的扩展:

std::vector<const char*> instance_extensions;
instance_extensions.push_back("VK_KHR_surface");
instance_extensions.push_back("VK_KHR_win32_surface");//win32

instanceCreateInfo.enabledExtensionCount = static_cast<uint32_t>(instance_extensions.size());
instanceCreateInfo.ppEnabledExtensionNames = instance_extensions.data();
VkResult result = vkCreateInstance(&instanceCreateInfo, nullptr, &instance);

Windows系统上是借助于glfw创建出的window完成 VkSurfaceKHR的创建:

参考代码
#define GLFW_INCLUDE_VULKAN
#include <GLFW/glfw3.h>
#define GLFW_EXPOSE_NATIVE_WIN32
#include <GLFW/glfw3native.h>
#include <vulkan/vulkan_win32.h>


void vulkanBasicDemo::vulkanCreateVulkanSurface() {
    // 获取 instance extension
    uint32_t extensionCount = 0;
    vkEnumerateInstanceExtensionProperties(nullptr, &extensionCount, nullptr);
    std::vector<VkExtensionProperties> availableExtensions(extensionCount);
    vkEnumerateInstanceExtensionProperties(nullptr, &extensionCount, availableExtensions.data());
    
    if (!isExtensionSupported("VK_KHR_win32_surface", availableExtensions)) {
        throw std::runtime_error("VK_KHR_win32_surface extension not supported");
    }
    std::cout << "instance support VK_KHR_win32_surface" << std::endl;


    glfwInit();
    glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
    GLFWwindow* window = glfwCreateWindow(800, 600, "Vulkan window", nullptr, nullptr);

    VkWin32SurfaceCreateInfoKHR  createInfo = {};
    createInfo.sType = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR;
    createInfo.pNext = nullptr;
    createInfo.flags = 0;
    createInfo.hwnd = glfwGetWin32Window(window);
    createInfo.hinstance = GetModuleHandle(nullptr);

    VkResult result = vkCreateWin32SurfaceKHR(instance, &createInfo, nullptr, &surface);
    if (result != VK_SUCCESS) {
        throw std::runtime_error("vkCreateWin32SurfaceKHR failed");
    }

    vkDestroySurfaceKHR(instance, surface, nullptr);
    glfwDestroyWindow(window);
    glfwTerminate();
}
realesrgan-ncnn-vulkan-20211212-windows是一个基于ncnn框架和Vulkan图形API开发的图像超分辨率增强模型。它是由GitHub用户realsrgan开发的最新版本,最新发布日期为2021年12月12日,专为Windows操作系统而设计。 该模型的主要应用是图像超分辨率增强,通过提高图像的分辨率和细节,使图像看起来更加清晰和真实。它采用深度学习和卷积神经网络等先进的技术,能够将低分辨率的图像转换成高分辨率的图像,从而提升图像的质量和视觉效果。 realesrgan-ncnn-vulkan-20211212-windows的开发使用了ncnn框架和Vulkan图形API,这使得它能够在Windows系统上实现快速且高效的图像处理。ncnn是一个轻量级的深度学习框架,专注于在移动平台和嵌入式设备上实现高性能和低延迟的推理。而Vulkan图形API是一种跨平台的图形渲染和计算API,可以充分利用计算设备的性能,提供高效的图像处理和渲染能力。 realesrgan-ncnn-vulkan-20211212-windows的使用可以通过命令行或者图形界面进行,用户可以根据自己的需求和偏好选择适合的方式。该模型提供了训练好的权重参数,用户可以直接加载这些参数并进行图像超分辨率增强。此外,该模型还支持批量处理和视频处理,方便用户对多个图像进行处理。 总之,realesrgan-ncnn-vulkan-20211212-windows是一个高效、快速且易于使用的图像超分辨率增强模型,适用于Windows系统,并利用了ncnn框架和Vulkan图形API的优势,为用户提供了出色的图像处理效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值