Vulkan 学习(11)---- Vulkan RenderPass 创建

RenderPass 概述

Vulkan 渲染通道(RenderPass) 定义了整个渲染管线一次执行的过程,包括了渲染所使用的所有资源和操作的描述(比如指定渲染管线的渲染目标,告诉管线要渲染到哪里)

RenderPass 本质上是一个渲染流程的完整描述(管理渲染流程),包括如何渲染这些数据的元数据和指令,但是不包括实际的数据(图像),通过与 FrameBuffer 结合来获取实际的图像数据

Vulkan编程,RenderPass是必不可少的,它必须包含一个或者多个子通道(SubPass)

每个子通道表示一个渲染阶段,并且都是使用 RenderPass 中定义的资源描述这个阶段的渲染的步骤

RenderPass 是通过附件(Attachment)的形式描述图像资源,包括颜色附件(Color Attachment)、深度/模板附件(Depth/Stencil Attachment)、用于多重采样的的解析附件(Resolve Attachment)和输入附件(Input Attachment)等,

RenderPassFrameBuffer 的关系密切,FrameBuffer 代表了 RenderPass 使用的具体内存集合,定义了 RenderPass 中每个 ImageView 与附件的对应关系

RenderPass 使得开发者能够更精细的控制渲染过程,优化性能,同时适应现代GPU架构的特点

Vulkan tutorial:
Render passes in Vulkan describe the type of images that are used during rendering operations, how they will be used, and how their contents should be treated. In our initial triangle rendering application, we’ll tell Vulkan that we will use a single image as color target and that we want it to be cleared to a solid color right before the drawing operation.

(Render pass 主要标志如何和 image 交互,是作为颜色,深度,模板附件还是其他作用等)
Note:可以理解为 RenderPass 定义了对 vkImage的操作关系

RenderPass 创建

vkCreateRenderPass 的函数原型如下:

VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass(
    VkDevice                                    device,
    const VkRenderPassCreateInfo*               pCreateInfo,
    const VkAllocationCallbacks*                pAllocator,
    VkRenderPass*                               pRenderPass);

关键结构 VkRenderPassCreateInfo 的结构:

typedef struct VkRenderPassCreateInfo {
   
   
    VkStructureType                   sType;
    const void*                       pNext;
    VkRenderPassCreateFlags           flags;
    uint32_t                          attachmentCount; // 附件数量
    const VkAttachmentDescription*    pAttachments; // 附件描述
    uint32_t                          subpassCount; // 子通道数量
    const VkSubpassDescription*       pSubpasses; // 子通道描述
    uint32_t                          dependencyCount; // 子通道依赖数量
    const VkSubpassDependency*        pDependencies; // 子通道依赖描述
} VkRenderPassCreateInfo;`
附件描述

附件描述(Attachement Description) 定义了在渲染过程中使用的图像资源,包括它们的格式,样本数、加载和存储操作等
比如定义一个深度附件和模板附件:

// 定义颜色附件描述
VkAttachmentDescription colorAttachment = {
   
   };
colorAttachment.format = VK_FORMAT_R8G8B8A8_UNORM; // 交换链图像格式
colorAttachment.samples = VK_SAMPLE_COUNT_1_BIT; // 采样数
colorAttachment.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR; // 在渲染前清除附件
colorAttachment.storeOp = VK_ATTACHMENT_STORE_OP_STORE; // 在渲染后存储附件内容
colorAttachment.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE; // 不关心模板加载操作
colorAttachment.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE; 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值