RenderPass 概述
Vulkan 渲染通道(RenderPass) 定义了整个渲染管线一次执行的过程,包括了渲染所使用的所有资源和操作的描述(比如指定渲染管线的渲染目标,告诉管线要渲染到哪里)
RenderPass 本质上是一个渲染流程的完整描述(管理渲染流程),包括如何渲染这些数据的元数据和指令,但是不包括实际的数据(图像),通过与 FrameBuffer 结合来获取实际的图像数据
在Vulkan编程,RenderPass是必不可少的,它必须包含一个或者多个子通道(SubPass)
每个子通道表示一个渲染阶段,并且都是使用 RenderPass 中定义的资源描述这个阶段的渲染的步骤
RenderPass 是通过附件(Attachment)的形式描述图像资源,包括颜色附件(Color Attachment)、深度/模板附件(Depth/Stencil Attachment)、用于多重采样的的解析附件(Resolve Attachment)和输入附件(Input Attachment)等,
RenderPass 和 FrameBuffer 的关系密切,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;

最低0.47元/天 解锁文章
441

被折叠的 条评论
为什么被折叠?



