当前位置: 首页> 房产> 家装 > 助理工程师_大连建设信息网_长沙seo招聘_绍兴seo排名公司

助理工程师_大连建设信息网_长沙seo招聘_绍兴seo排名公司

时间:2025/7/12 7:00:48来源:https://blog.csdn.net/chenwang1824/article/details/142438390 浏览次数:0次
助理工程师_大连建设信息网_长沙seo招聘_绍兴seo排名公司

目录

        • OverView
        • 创建窗口表面
        • 参考代码

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");//win32instanceCreateInfo.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 extensionuint32_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();
}
关键字:助理工程师_大连建设信息网_长沙seo招聘_绍兴seo排名公司

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: