Vulkan入门(7)-渲染过程及创建图形管道.md

文章目录

  • 参考资料
  • 简述
  • 一. Attachment description 附件说明
    • 1.1 loadOp
    • 1.2 storeOp
    • 1.3 内存中像素的布局
  • 二. Subpasses and attachment references 子过程和附件引用
  • 三. Render pass 渲染过程
  • 四. 创建 pipeline

参考资料

简述

Render passes, 即渲染过程。在完成创建管道之前,我们需要告诉Vulkan渲染时将使用的帧缓冲区附件。

我们需要指定将有多少颜色和深度缓冲区,为每个缓冲区使用多少个样本,以及在整个渲染操作中应如何处理它们的内容。

所有这些信息都包装在一个render pass对象中,为其创建一个新的createRenderPass函数。在createGraphicsPipeline之前从initVulkan调用此函数。

void initVulkan() {
    createInstance();
    setupDebugCallback();
    createSurface();
    pickPhysicalDevice();
    createLogicalDevice();
    createSwapChain();
    createImageViews();
    createRenderPass();
    createGraphicsPipeline();
}

void createRenderPass() {

}

Vulkan图形管线和计算管线的区别之一是,你使用图形管线来渲染出像素,组成图像以供处理或显示给用户。在复杂的图形应用程序中,图片经过很多遍构建,每一遍都生成场景的一部分,应用全帧效果如后期处理、合成、渲染用户界面元素等等。这样的一遍可以使用Vulkan 中 renderpass 对象表示。

一个单一的的renderpass对象封装了多个pass或者一系列最终图像的几个渲染阶段,renderpass对象包含输出图像所需的信息。

所有的绘制必须被包含在一个renderpass中。甚至,图形管线需要知道他们把渲染结果发往哪儿,因此,有必要在创建图形管线之前创建一个renderpass对象,告知正在生成图像的管线有关图像的信息。

一. Attachment description 附件说明

在这里,我们仅有一个颜色缓冲区附件,由交换链中的一个图像表示。

void createRenderPass() {
    VkAttachmentDescription colorAttachment = {};
    colorAttachment.format = swapChainImageFormat;
    colorAttachment.samples = VK_SAMPLE_COUNT_1_BIT;
}

颜色附件的格式应该与交换链图像的格式匹配,而且我们还没有对多重采样做任何事情,所以只要使用1个样本。

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;

loadOp和storeOp决定在呈现之前和呈现之后如何处理附件中的数据。loadOp和storeOp应用于颜色和深度数据,以及stencilLoadOp/
stencilStoreOp应用于模具数据。这里不会对模板缓冲区执行任何操作,因此加载和存储的结果是无关的。

1.1 loadOp

  1. VK_ATTACHMENT_LOAD_OP_LOAD: 指定将保留渲染区域中图像的先前内容。对于深度/模具格式的附件,这将使用访问类型V

你可能感兴趣的:(vulkan,vulkan)