当前位置: 首页 > news >正文

Vulkan笔记(七)---图像视图

在渲染管线中使用任何 VkImage,包括交换链中的 VkImage 我们必须创建一个 VkImageView 对象。

创建图像视图

std::vector<VkImage> swapChainImages_;
std::vector<VkImageView> swapChainImageViews_;void CVulkanApp::createImageViews()
{swapChainImageViews_.resize(swapChainImages_.size());for (size_t i=0; i < swapChainImages_.size(); ++i) {VkImageViewCreateInfo viewInfo{};viewInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;viewInfo.image = swapChainImages_[i];viewInfo.viewType = VK_IMAGE_VIEW_TYPE_2D;viewInfo.format = swapChainImageFormat_;viewInfo.components.r = VK_COMPONENT_SWIZZLE_IDENTITY;viewInfo.components.g = VK_COMPONENT_SWIZZLE_IDENTITY;viewInfo.components.b = VK_COMPONENT_SWIZZLE_IDENTITY;viewInfo.components.a = VK_COMPONENT_SWIZZLE_IDENTITY;viewInfo.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;viewInfo.subresourceRange.baseMipLevel = 0;viewInfo.subresourceRange.levelCount = 1;viewInfo.subresourceRange.baseArrayLayer = 0;viewInfo.subresourceRange.layerCount = 1;if (vkCreateImageView(logicDevice_, &viewInfo, nullptr, &swapChainImageViews_[i])!= VK_SUCCESS){throw std::runtime_error("failed to create image views!");}}}

这段代码是Vulkan中创建图像视图(Image Views)的实现,用于为交换链(Swap Chain)中的每个图像创建对应的视图。以下是关键点解释:

  1. 功能概述

    • 为交换链中的每个VkImage创建对应的VkImageView,使渲染管线能够访问这些图像

    • 图像视图定义了如何解释图像数据以及访问图像的哪部分

  2. 核心参数配置

    • viewType:设置为2D纹理视图(VK_IMAGE_VIEW_TYPE_2D),这是最常见的交换链图像类型

    • format:使用交换链创建时确定的格式(swapChainImageFormat_),确保视图与图像格式一致

    • components:颜色通道映射设置为默认值,表示不进行通道映射。

  3. 子资源范围配置

    • aspectMask:设为颜色位(VK_IMAGE_ASPECT_COLOR_BIT),因为这是颜色附件

    • levelCount/layerCount:都设为1,表示不使用mipmap和多层纹理

  4. 创建过程

    • 先调整vector大小以容纳所有视图

    • 循环为每个交换链图像创建视图

    • 使用vkCreateImageView创建视图,失败时抛出异常

  5. 典型应用场景

    • 这些视图后续会用作帧缓冲的颜色附件

    • 是渲染管线配置的前置步骤

注意:创建的资源需要在程序退出时通过vkDestroyImageView销毁。这段代码是Vulkan渲染初始化的标准流程之一,确保了交换链图像能被正确访问和使用。

销毁图像视图

void CVulkanApp::destroyImageViews()
{// 销毁 ImageViewsfor (auto imageView : swapChainImageViews_){if (imageView != VK_NULL_HANDLE){vkDestroyImageView(logicDevice_, imageView, nullptr);}}swapChainImageViews_.clear();
}

图像视图是由我们显式创建的,在程序结束时再次销毁它们。

http://www.lryc.cn/news/625455.html

相关文章:

  • Mac(七)右键新建文件的救世主 iRightMouse
  • 前沿技术借鉴研讨-2025.8.19 (信号提取、信号拆分、胎心诊断)
  • C++---为什么迭代器常用auto类型?
  • Flink on Native K8S安装部署
  • Typescript入门-对象讲解
  • C/C++ 常见笔试题与陷阱详解
  • 电脑出现‘无法启动此程序,因为计算机中丢失dll’要怎么办?2025最新的解决方法分析
  • vue3+element-plus 输入框el-input设置背景颜色和字体颜色,样式效果等同于不可编辑的效果
  • 微软行业案例:英格兰足球超级联赛(Premier League)
  • Flask 路由详解:构建灵活的 URL 映射系统
  • Flutter AlwaysScrollableScrollPhysics详解
  • Windows 平板/电脑 上使用 DHCPSRV 搭建 DHCP 服务器
  • 后台管理系统-8-vue3之首页count数据的渲染
  • Flink Stream API - 源码二开详细实现
  • Python爬虫第一课:爬取HTML静态网页小说章节
  • 【教程】在 VMware Windows 虚拟机中使用 WinPE 进行离线密码重置或取证操作
  • CT Micro’s New HV Photo-MOSFET Relay Optocouplers
  • github 上传代码步骤
  • JWT通俗易懂讲解
  • 什么是强化学习
  • 【图像算法 - 18】慧眼辨良莠:基于深度学习与OpenCV的麦田杂草智能识别检测系统(附完整代码)
  • 从 SGD 到梯度累积:Epoch、Batch、Step 的关系全解析
  • 边缘智能体:Go编译在医疗IoT设备端运行轻量AI模型(上)
  • Ansible 角色管理指南
  • Ansible 角色管理
  • Apache IoTDB(4):深度解析时序数据库 IoTDB 在Kubernetes 集群中的部署与实践指南
  • Redisson 分布式锁核心机制解析
  • 2025年09月计算机二级MySQL选择题每日一练——第一期
  • 寻找旋转排序数组中的最小值
  • 【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day7