Vulkan Samples 阅读 -- Basics(一): Triangle

Vulkan Samples 资源

Git 官方:https://github.com/KhronosGroup/Vulkan-Samples.git
Git 私有:https://gitee.com/thebigapple/Vulkan-Samples.git
Git CSDN: https://codechina.csdn.net/mirrors/SaschaWillems/Vulkan.git (目录结构好)

Vulkan Samples 编译(Cmake)

  • git clone --recursive https://github.com/SaschaWillems/Vulkan.git
  • cd Vulkan
  • git submodule init
  • git submodule update
  • python download_assets.py
  • Cmake + VS 编译即可

Basics – Triangle

	VulkanExample *vulkanExample; 
	vulkanExample = new VulkanExample(); //构造函数中只对相机进行初始化
	vulkanExample->initVulkan();
	vulkanExample->setupWindow(hInstance, WndProc);
	vulkanExample->prepare();
	vulkanExample->renderLoop();
	delete(vulkanExample); //析构函数中对Vulkan实例相关资源进行释放

构造、析构函数

  • 构造函数中对相机进行初始化
	title = "Vulkan Example - Basic indexed triangle";
	camera.type = Camera::CameraType::lookat;
	camera.setPosition(glm::vec3(0.0f, 0.0f, -2.5f));
	camera.setRotation(glm::vec3(0.0f));
	camera.setPerspective(60.0f, (float)width / (float)height, 1.0f, 256.0f);
  • 基类 VulkanExampleBase 的构造

  • 析构函数内容

    • vkDestroyPipeline:
    • vkDestroyPipelineLayout
    • vkDestroyDescriptorSetLayout
    • vkDestroyBuffer 包括VBO、IBO、和 UBO
    • vkFreeMemory 包括VBO、IBO、和 UBO
    • vkDestroySemaphore
    • vkDestroySemaphore
    • vkDestroyFence

initVulkan 函数

  • 创建 Vulkan 实例:createInstance
    • 查询设置可用扩展:vkEnumerateInstanceExtensionProperties
    • 查询设置实例layer:vkEnumerateInstanceLayerProperties
    • 创建实例:vkCreateInstance
  • 设置Debugging:setupDebugging
    • vkCreateDebugUtilsMessengerEXT
    • vkDestroyDebugUtilsMessengerEXT
  • 查询设置使用的显卡:vkEnumeratePhysicalDevices
  • commandLineParser:存储显卡信息
  • physicalDevice = physicalDevices[selectedDevice]:默认选择0号位显卡
  • vkGetPhysicalDeviceProperties:获取显卡属性
  • vkGetPhysicalDeviceFeatures:获取显卡特性
  • vkGetPhysicalDeviceMemoryProperties:获取显卡内存
  • getEnabledFeatures:(未实现)
  • VulkanDevice:创建 VulkanDevice 实例
    • this->physicalDevice = physicalDevice:保存选择显卡 handle
    • vkGetPhysicalDeviceProperties:获取显卡属性
    • vkGetPhysicalDeviceFeatures:获取显卡特性
    • vkGetPhysicalDeviceMemoryProperties:获取显卡内存
    • vkGetPhysicalDeviceQueueFamilyProperties:获取 QueueFamily 属性
    • vkEnumerateDeviceExtensionProperties:获取扩展属性
  • vulkanDevice->createLogicalDevice:创建逻辑驱动
    • vkCreateDevice:创建逻辑驱动
    • createCommandPool:创建 CommandPool
  • vkGetDeviceQueue:Get a graphics queue from the device
  • getSupportedDepthFormat:获取深度 format
  • swapChain.connect(instance, physicalDevice, device)
    • 没有找到实例化的位置,从类的定义来看,使用默认构造,应该使用默认初始化直接使用
    • Set instance, physical and logical device to use for the swapchain and get all required function pointers
  • vkCreateSemaphore
    • presentComplete
    • renderComplete

setupWindow 函数 (略)

prepare 函数

  • VulkanExampleBase::prepare:基类初始化
    • initSwapchain: SwapChain 初始化
      • initSurface
      • createCommandPool
      • setupSwapChain
        • swapChain.create(&width, &height, settings.vsync):涉及到渲染循环 swapchain 的创建与销毁。(需要后续仔细看*)
      • createCommandBuffers
      • createSynchronizationPrimitives
        • vkCreateFence
      • setupDepthStencil:涉及
        • vkCreateImage
        • vkGetImageMemoryRequirements
        • vkAllocateMemory
        • vkBindImageMemory
        • vkCreateImageView
      • setupRenderPass
        • pColorAttachments
        • pDepthStencilAttachment
        • subpassDescription
        • vkCreateRenderPass
      • createPipelineCache
        • vkCreatePipelineCache
      • setupFrameBuffer
        • vkCreateFramebuffer
      • UIOverlay:界面相关,显示渲染结果
        • UIOverlay.device = vulkanDevice;
        • UIOverlay.queue = queue;0
        • UIOverlay.shaders:load shader
        • UIOverlay.prepareResources:加载纹理、模型相关资源 (没见到VBO和IBO,所以应该只加载纹理)
          • vkCreateImage
          • vkCreateImageView
          • vkCreateSampler
          • vkCreateDescriptorPool
          • vkCreateDescriptorSetLayout
          • vkAllocateDescriptorSets
          • vkUpdateDescriptorSets
        • UIOverlay.preparePipeline:涉及到VBO、IBO的绑定
          • vkCreatePipelineLayout
          • pipelineInputAssemblyStateCreateInfo
          • pipelineRasterizationStateCreateInfo
          • pipelineColorBlendStateCreateInfo
          • pipelineDepthStencilStateCreateInfo
          • pipelineViewportStateCreateInfo
          • pipelineMultisampleStateCreateInfo
          • pipelineDynamicStateCreateInfo
          • pipelineCreateInfo
          • vertexInputBindingDescription
          • vertexInputAttributeDescription
          • pipelineVertexInputStateCreateInfo
          • vkCreateGraphicsPipelines

renderLoop函数

  • VulkanExampleBase::nextFrame
    • draw:每个程序的 render 函数所需要更新的资源不同,但是 Draw 应该是相同的
      • swapChain.acquireNextImage
      • vkWaitForFences
      • vkResetFences
      • vkQueueSubmit
      • swapChain.queuePresent

总结

   Triangle Sample 很简单,可以看作将 Vulkan Tutorial 的代码进行了抽象。先通读代码,后期深入学习大佬的架构思想。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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、付费专栏及课程。

余额充值